第四章类型表达式资料课件

上传人:痛*** 文档编号:241709747 上传时间:2024-07-17 格式:PPT 页数:67 大小:696KB
返回 下载 相关 举报
第四章类型表达式资料课件_第1页
第1页 / 共67页
第四章类型表达式资料课件_第2页
第2页 / 共67页
第四章类型表达式资料课件_第3页
第3页 / 共67页
点击查看更多>>
资源描述
一一 C C语言的数据类型语言的数据类型三三 变量赋初值变量赋初值四四 各类数值型数据间的混合运算各类数值型数据间的混合运算二二 常量与变量常量与变量五五 C C语言的运算符和表达式语言的运算符和表达式第四章、第七章第四章、第七章 数据类型和表达式数据类型和表达式一、一、C语言的数据类型语言的数据类型C语言的数据类型语言的数据类型二、二、常量与变量常量与变量程序运行过程中,其值不能被改变的量称为常量常量,可以是任任何基本数据类型何基本数据类型的值。其其值可以改可以改变的量称的量称为变量量。2.1常量常量 1、整型常量即整常数。在语言中,可用以下三种形式表示:(1)十进制整数 如:123、-456、4。(2)八进制整数:以以0 0开头的数开头的数。如:0123表示八进制数123,等于十进制数83,-011表示八进制数-11,即十进制数-9。(3)十六进制整数:以以0 x0 x开头的数开头的数。如:0 x123,代表16进制数123,等于十进制数291。-0 x12等于十进制数18。n将二进制转化成16或8进制:以小数点为界分别向左右每4(或3)个数字为一组进行分组,每组分别转化成二进制数,最后合并在一起,并把首0去掉(尾0不可以去)。如:(001 101 001)2=(151)8 n(0001 0110 0101 1011)2=(165B)16 n简单不易错的方法,就是将十进制数先转成二进制数,再四位一化分成为十六进制数n 例:十进制的21 化成二进制是10101,(除2取余)化十六进制原则,是将二进制的整数向左四位一化分,不足补0,0101正好四位,8421法,为5,前面还有个1。再补三个0。结果为1,所以结果为1 5n 例2:十进制的49 化成二进制是110001,(除2取余)化十六进制,四位一化分,向左,不足补0,结果为,31 2.1 常量与变量常量与变量 注意:(1)在C语言中10,010,0 xl0是3个数值完全不同的整数。(2)整型数可long int、short int和unsigned int等若干种。(3)长整型数在书写时加一个后缀“L”。(4)整型数又可以是正数和负数。表示形式表示形式值类型型+123123int-323-323int-32000L-32000long int76 5432LU765432unsigned long int二、二、常量与变量常量与变量2实型常量实型常量又称型常量又称实数、浮点数,有两种表数、浮点数,有两种表现形式:形式:(1)十)十进制制实数:数:由数字和小数点组成。如由数字和小数点组成。如 0.149,123.0。(2)指数形式:)指数形式:用带指数记数法来表示,如用带指数记数法来表示,如123E2或或123e2(注意书写)。(注意书写)。2.实型常量实型常量 缺省缺省的实型常量是double型的。如果期望的类型是期望的类型是float或long double,则需要用字母进行特定标注。F或或f表示float类型,l或或L表示long double类型。表示形式表示形式值类型型0.0.0.00.0doubledouble.0.00.00.0doubledouble2.02.02.02.0doubledouble3.14163.14163.14163.1416doubledouble-2.0f-2.0f-2.0-2.0floatfloat13.4E-2F13.4E-2F0.1340.134floatfloat3.141 592 653 6L3.141 592 653 6L3.141 592 653 63.141 592 653 6long doublelong double3字符型常量字符型常量字符型常量有:字符常量、字符串常量和转义字符三种。(1)字符常量)字符常量字符常量构成:用一对单引号括起来的单个字符。字符常量构成:用一对单引号括起来的单个字符。例如:例如:A、a、X、?、$等都是字符常量。等都是字符常量。字符常量的值:就是该字符的字符常量的值:就是该字符的ASCII码值,可以和数值一样码值,可以和数值一样参加运算。参加运算。例如:字符例如:字符A的数值为十进制数的数值为十进制数65。二、二、常量与变量常量与变量3字符型常量字符型常量(3)转义字符)转义字符转义字符:转义字符:C语言中用来表示键盘上的控制符和功能符的特语言中用来表示键盘上的控制符和功能符的特殊符号。殊符号。例如:回车换行符、换页符等。例如:回车换行符、换页符等。形式:反斜杠形式:反斜杠后面跟一个字符或一个数值。后面跟一个字符或一个数值。例如:例如:n,为换行,为换行,101与与x41都表示字符都表示字符A。二、二、常量与变量常量与变量3字符型常量字符型常量转义字符表示含义将将转义为字符常量中的有效字符(转义为字符常量中的有效字符(字符)字符)单引号字符单引号字符双引号字符双引号字符n换行,将当前位置移到下一行开头换行,将当前位置移到下一行开头t横向跳格,横向跳到下一个输出区横向跳格,横向跳到下一个输出区r回车,将当前位置移到本行开头回车,将当前位置移到本行开头f走纸换页,将当前位置移到下页开头走纸换页,将当前位置移到下页开头b退格,将当前位置移到前一列退格,将当前位置移到前一列v竖向跳格竖向跳格ddd1到到3位位8进制数所代表的字符进制数所代表的字符xhh1到到2位位16进制数所代表的字符进制数所代表的字符(2)字符串常量字符串常量 n字符串常量是一对双撇号双撇号括起来的字符序列。n合法的字符串常量:“How do you do.”,“CHINA”,“a”,“$123.45”n注意:和“”两者不同两者不同。字符常量字符常量字符串常量字符串常量假设被指定为字符变量:char c;c=a;=“a”;c“CHINA”;结论:结论:不能把一个字符串常量赋给一个字符变量。n规定:在每一个字符串常量字符串常量的结尾加一个“字符串结字符串结束标志束标志”,以便系统据此判断字符串是否结束。n规定以字符作为字符串结束标志。是一个ASCII码为0的字符,称为“空操作字符空操作字符”,即它不引起任何控制动作,也不是一个可显示的字符。例如:例如:有一个字符串常量”,它在内存中实际为CHINA0 它占内存单元不是个字符,而是个字符,最后一个字符为。但在输出时不输出。二、常量与变量二、常量与变量 注意:字符常量与字符串常量的区别。例如:例如:字符常量A与字符串常量A的区别是:定定界界符符不不同同:字符常量使用单引号,而字符串常量使用双引号;长长度度不不同同:字符常量长度为1,字符串常量长度可为任意值(0或某个整数);存存储储要要求求不不同同:字符常量存储的是字符的ASCII码值,而字符串常量,除了要存储有效的字符外,还要存储一个结束标志0。二、常量与变量二、常量与变量【例例2.1】转义字符的使用转义字符的使用#include void main()printf(abctderftgn);/*表示一个空格表示一个空格 */printf(htibbjk);程序运行后在显示屏上的输出结果如下:程序运行后在显示屏上的输出结果如下:f gdeh jk若在打印机上输出,则结果如下:若在打印机上输出,则结果如下:f abcgdeh jik(4)符号常量)符号常量在在C语言中用符号来代替常量称为符号常量。语言中用符号来代替常量称为符号常量。习惯上,符号常量名用大写,变量名用小写,以示区别。习惯上,符号常量名用大写,变量名用小写,以示区别。【例例2.2】符号常量的使用。符号常量的使用。/*程序功能:计算圆的面积程序功能:计算圆的面积*/#include#define PI 3.1415926 void main()float r,s;r=5.0;s=PI*r*r;printf(Area is%f,s);运行结果为:运行结果为:Area is 78.539815二、常量与变量二、常量与变量注意:使用符号常量的好处是:(1)含义清楚。定义符号常量名时应考虑“见名知意”。(2)在需要改变一个常量时能做到“一改全改”。(3)符号常量的值在其作用域内不能改变,也不能再被赋值。二、常量与变量二、常量与变量2.2变量变量变量:变量:在程序运行过程中其值可以改变的量。在程序运行过程中其值可以改变的量。变量属性:变量属性:变量名、变量类型(内存中占用存储单元)和变量名、变量类型(内存中占用存储单元)和变量的值变量的值。(1)变量名:)变量名:变量的名字变量的名字变量名。变量名。变量命名:遵循标识符命名规则,最好取名时考虑变量命名:遵循标识符命名规则,最好取名时考虑“见名见名知意知意”。例如:例如:max表示求最大值、sum表示求和等。(2)变量类型:)变量类型:整型变量、实型变量和字符变量三种。不整型变量、实型变量和字符变量三种。不同类型的变量,占用的内存单元(字节)数不同。同类型的变量,占用的内存单元(字节)数不同。(3)变量值:)变量值:变量在程序运行过程中的取值。在程序中,变量在程序运行过程中的取值。在程序中,通过变量名来引用变量的值。通过变量名来引用变量的值。二、常量与变量二、常量与变量二、常量与变量二、常量与变量int a;double b;a=35;b=1整型变量整型变量(1)整型变量分类)整型变量分类 根据占用内存字节数的不同,整型变量分为 4 类:基本整型(基本整型(int)、短整型(短整型(short int)、长整型(长整型(long int)和 无符号整型。无符号整型。无符号整型:无符号整型:无符号基本整型(unsigned int)、无符号短整型(unsigned short表示)和无符号长整型(用unsigned long表示)三种。二、常量与变量二、常量与变量(2)整型)整型变量占用字量占用字节数与数与值域域各种类型的整型变量占用的内存字节数,随系统而异。各种类型的整型变量占用的内存字节数,随系统而异。类型关键字所占字节数取值范围说明int 2-3276832767有符号基本整有符号基本整型型unsigned 2065535无符号基本整无符号基本整型型short2-3276832767有符号短整型有符号短整型unsigned short2065535无符号短整型无符号短整型long4-21474836482147483647有符号有符号长整型整型unsigned long404294967295无符号无符号长整型整型注:对于其它系统中设基本整型占用内存字节数为n,其值域为:-2n*8-1(2n*8-1-1);无符号整型变量的值域为:0(2n*8-1)。二、常量与变量二、常量与变量例如,图例如,图2.2是在Turbo C系统中:int 与unsigned最大值。二、常量与变量二、常量与变量(3)整型变量的定义整型变量的定义所有变量都必须所有变量都必须“先定义,后使用先定义,后使用”。例如:例如:int a,b;/*定义变量定义变量 a、b 为整型为整型*/unsigned short c,d;/*定义变量定义变量 c、d 为无符号短整型为无符号短整型*/long e,f;/*定义变量定义变量 e、f 为长整型为长整型*/注:变量定义一般是放在一个函数的开头的声明部分。注:变量定义一般是放在一个函数的开头的声明部分。二、常量与变量二、常量与变量【例例2.3】整型整型变量的定量的定义与使用。与使用。#include void main()int a,b,c,d;/*定义定义a,b,c,d为整型变量为整型变量*/unsigned u;/*定义定义u为无符号整型变量为无符号整型变量*/a=12;b=-24;u=10;c=a+u;d=b+u;printf(a+u=%d,b+u=%dn”,c,d);运行运行结果果为:a+u=22,b+u=-14二、常量与变量二、常量与变量2实型变量C语言的言的实型型变量,分量,分为两种:两种:(1)单精精度度型型(float):占占4个个字字节节(32位位)7位位有有效效数数字。字。(2)双精度型()双精度型(double),占占8个字节个字节15位有效数字。位有效数字。例如:例如:float x,y;/*定义定义x、y为单精度实数为单精度实数*/double b;/*定义定义 b 为双精度实数为双精度实数*/long double c;/*定义定义 c 为长双精度实数为长双精度实数*/二、常量与变量二、常量与变量3字符变量字符字符变量的量的类型关型关键字字为 char,占用一个字,占用一个字节内存内存单元。元。(1)变量量值的存的存储字符字符变量在内存中占一个字量在内存中占一个字节。以。以该字符的字符的ASCII码值(无符号整数)存(无符号整数)存储到内存到内存单元中。元中。例如:例如:char chl,ch2;/*定义两个字符变量:定义两个字符变量:chl,ch2*/chl=a;ch2=b;/*给字符变量赋值给字符变量赋值*/存储如图所示:存储如图所示:二、常量与变量二、常量与变量(2)特性)特性C语言中字符型数据与整型数据之间可以通用。语言中字符型数据与整型数据之间可以通用。例如:例如:字符型数据既可以以字符型数据既可以以“字符形式字符形式”或者或者“整数形式整数形式”输出。出。【例例2.4】字符字符变量的字符形式量的字符形式输出和整数形式出和整数形式输出。出。#include void main()char ch1,ch2;ch=a;ch2=b;printf(ch1=%c,ch2=%cn,ch1,ch2);/*字符形式输出字符形式输出*/printf(“ch1=%d,ch2=%dn”,ch1,ch2);/*整整数数形形式式输输出出*/程序运行程序运行结果:果:ch1=a,ch2=b ch1=97,ch2=98注意:字符数据占一个字节,它只能存放 0-255 范围内的整数。二、常量与变量二、常量与变量允许对字符数据进行算术运算。【例例2.5】字符数据的算字符数据的算术运算。运算。#include void main()char ch1,ch2;chl=a;ch2=B;printf(“ch1=%c,ch2=%cn”,ch1-32,ch2+32);/*字母的大小写转换*/程序的运行程序的运行结果:果:ch1=A,ch2=b 二、常量与变量二、常量与变量三、变量赋初值三、变量赋初值变量量赋初初值又称又称为变量初始化,有其两种方法:量初始化,有其两种方法:(1)先定义一个变量,然后再给它赋一个值,例如:int a;a=;(2)在定义变量的同时就对变量进行初始化,例如:char ch=a;float b=2.345;int x,y=3;/*部分变量赋初值,对 y 赋初值 3*/三、变量赋初值三、变量赋初值【例例2.6】变量量赋初初值#include stdio.hvoid main()int x,y=3;char ch;ch=a;printf(%d%d%c,x,y,ch);运行运行结果如下:果如下:251 3 a注:注:x没有进行初始化,输出为随机不定值251,下次可能是其他的结果。四、各类数值型数据间的混合运算四、各类数值型数据间的混合运算在同一个表达式中出现多种数据类型的混合运算时,先将各种类型数据转换成同一类型数据,然后才能运算求值。转换规则如图 2.4 所示。(1)规范化范化图2.4中水平方向的向左箭中水平方向的向左箭头的的转换为规范化范化转换。(2)保)保值转换图2.4中向上方向的向上箭中向上方向的向上箭头的的转换为保保值转换(即将(即将类型等型等级较低低转换成等成等级较高的)。高的)。例如:例如:有如下定有如下定义:int m;float n;double d;longint e;对表达式:表达式:(c+d)*20+m*n-de 问:上述表达式最后的结果是什么类型?问:上述表达式最后的结果是什么类型?四、各类数值型数据间的混合运算四、各类数值型数据间的混合运算求求(c+d)*20+m*n-de 的的转换过程是:程是:计算算(c+d)时,先将,先将 c 和和 d 转换成整型数成整型数99、100,运算运算结果果为199;计算算m*n时,先将,先将m和和n都都转换成成为双精度型;双精度型;将将 e 转换成双精度型,成双精度型,de 结果果为双精度型;双精度型;假假设所用所用计算机是先算机是先计算运算符左算运算符左边操作数,那么操作数,那么(c+d)*20计算后算后结果果为3980,再将,再将3980转换成双精度型,然后与成双精度型,然后与 m*n 的的结果相加,再减去果相加,再减去de 的的结果,表达式果,表达式计算完算完毕,结果果为双精度。双精度。四、各类数值型数据间的混合运算四、各类数值型数据间的混合运算五、五、C语言的运算符和表达式语言的运算符和表达式C语言表达式是由运算符、常量及变量组成;语言表达式是由运算符、常量及变量组成;运算符(即操作符)是对运算对象(又称操作数)进行某运算符(即操作符)是对运算对象(又称操作数)进行某种操作的符号。有二元(双目)、一元(单目)运算符。种操作的符号。有二元(双目)、一元(单目)运算符。对于运算符应从以下不几个方面掌握:对于运算符应从以下不几个方面掌握:1运算符号运算符号2运算规则,即所进行的操作运算规则,即所进行的操作3运算的优先级别运算的优先级别4运算顺序运算顺序5运算对象运算对象6运算结果运算结果1五种基本算术运算符+(加法)、(加法)、-(减法取(减法取负)、)、*(乘法)、(乘法)、/(除法)、(除法)、%(求余数)(求余数)运算运算规则与代数运算基本相同,但有以下不同之与代数运算基本相同,但有以下不同之处需要需要说明:明:(1)除法运算)除法运算/两个整数相除商为整数,小数部分被舍弃。两个整数相除商为整数,小数部分被舍弃。例如:例如:52=2 而:而:5.0/2=2.5。(2)求余数运算)求余数运算%参加运算的两操作数均为整型数据,否则出错。结果是整参加运算的两操作数均为整型数据,否则出错。结果是整除后的余数。在除后的余数。在Turbo C中运算运算结果的符号与被除数中运算运算结果的符号与被除数相同。相同。例如例如:7%3=1,7%-3=1,(商分,(商分别为 2、-2)。)。-7%3=-1,-7%-3=-1;(商分;(商分别为-2、2)。)。五、五、C语言的运算符和表达式语言的运算符和表达式2表达式和算术表达式(1)表达式的概念。表达式的概念。表达式:表达式:用运算符和括号将常量、变量和函数等连接起来符用运算符和括号将常量、变量和函数等连接起来符合合C语言语法规则的式子。语言语法规则的式子。单个常量、个常量、变量或函数构成的表达式称量或函数构成的表达式称为简单表达式。表达式。(2)算算术表达式的概念。表达式的概念。算算术表达式:表达式:用算术运算符和括号将常量、变量和函数等连用算术运算符和括号将常量、变量和函数等连接起来的符合接起来的符合C语言语法规则的式子语言语法规则的式子。例如:例如:3+6*9、(x+y)2 1、5-a等,都是算等,都是算术表达式。表达式。五、五、C语言的运算符和表达式语言的运算符和表达式(3)表达式求表达式求值运算运算顺序序例如例如:先乘除后加减。:先乘除后加减。结合性合性同同级运算的运算的结合方向称合方向称为结合性。合性。例如:例如:算术运算符的结合方向是算术运算符的结合方向是“从左至右从左至右”,即先左后,即先左后右,称左结合。右,称左结合。五、五、C语言的运算符和表达式语言的运算符和表达式3强制类型转换一般格式一般格式为:()()功能:功能:将一个表达式强制转换成所需类型将一个表达式强制转换成所需类型。例如:例如:(double)a 将变量将变量a的值转换成的值转换成 double 型型(int)(x+y)将将x+y的结果转换成的结果转换成 int 型型(float)5/2 等价于等价于(float)5)/2,将将5转换成实型,再除以转换成实型,再除以2(=2.5)(float)(5/2)将将5整除整除2的结果的结果(2)转换成实型转换成实型(2.0)注意:强制转换类型得到的是一个所需类型的中间量,原表达式类型并不发生变化。例如,x 原定为 float 型,则(double)x只是将变量 x 的值转换成一个double型的中间量,其 x 的数据类型并未转换成double型,仍为 float 型。五、五、C语言的运算符和表达式语言的运算符和表达式4自增(+)、自减(-)运算符自增(自增(+)运算是使)运算是使单个个变量的量的值增增1;自减(自减(-)运算使)运算使单个个变量的量的值减减1。自增、自减运算符都有两种用法:自增、自减运算符都有两种用法:(1)前置运算:前置运算:运算符放在运算符放在变量之前:量之前:+变量、量、-变量量先使变量的值增先使变量的值增(或减或减)1然后再以变化后的值参与其他运算,然后再以变化后的值参与其他运算,即先增(减)、后运算。即先增(减)、后运算。(2)后置运算:后置运算:运算符放在运算符放在变量之后:量之后:变量量+、变量量-变量先参与其他运算,然后再使变量的值增(或减)变量先参与其他运算,然后再使变量的值增(或减)1,即,即先运算、后增(减)。先运算、后增(减)。五、五、C语言的运算符和表达式语言的运算符和表达式例如例如:如果:如果 i 的原值等于3,则执行下面的赋值语句:j=+i;(i 的值先增1变成4,再赋给 j,j 的值为4)j=i+;(先将 i 的值 3 赋给 j,j 的值为 3,然后 i 增1变成4)【例例5.1】自增、自减运算符的用法与运算自增、自减运算符的用法与运算规则示例示例#include void main()int x=6,y;printf(x=%dn,x);/*先输出先输出 x 的初值的初值*/y=+x;/*前置运算:前置运算:x 先增先增1(=7),然后再赋值给,然后再赋值给y(=7)*/printf(y=+x:x=%d,y=%d n,x,y);y=x-;/*后后置置运运算算:先先将将 x 的的值值(=7)赋赋值值给给y(=7),然然后后 x 再减再减1(=6)*/printf(y=x-:x=%d,y=%dn,x,y);程序运行程序运行结果:果:x=6y=+x:x=7,y=7y=x-:x=6,y=7 五、五、C语言的运算符和表达式语言的运算符和表达式说明:说明:(1)自增、自减运算常用于循环语句中使循环控制变量加(或减)自增、自减运算常用于循环语句中使循环控制变量加(或减)1。(2)自增、自减运算符不能用于常量和表达式。)自增、自减运算符不能用于常量和表达式。例如,例如,5+、-(a+b)等都是非法的。等都是非法的。(3)连续使用同一变量进行自增或自减时很易出错。)连续使用同一变量进行自增或自减时很易出错。例如:例如:(x+)+(x+)+(x+)=?(假设?(假设 x 的初值的初值=3)解:解:表达式的值等于表达式的值等于 9,变量,变量 x 的值变为的值变为6。为什么?请思考。为什么?请思考。(4)书写写时最好采用能理解的写法,避免最好采用能理解的写法,避免误解。解。如如:不不要要写写成成 i+j形形式式,可可产生生(i+)+j或或 i+(+j)二二义性性,最最好好写写成成(i+)+j或或 i+(+j)的形式。的形式。但但C语言言规定定:从从左左到到右右取取尽尽可可能能多多的的符符号号组成成运运算算符符。i+j 应理理解解为(i+)+j。(5)在)在printf()函数中从右向左函数中从右向左计算。算。例如:例如:设i的初的初值为5:Printf(“%d,%d”,i,i+);输出出结果果为:6,5五、五、C语言的运算符和表达式语言的运算符和表达式5.2关系运算符和关系表达式关系运算符和关系表达式关系运算关系运算就是将两个数据进行“比较运算”,判定两个数据是否符合给定的关系,如果条件成立结果为“真真”;否则条件不成立结果为“假假”。1关系运算符及其优先次序(1)关系运算符)关系运算符 (小于小于),(大于大于),=(大于或等于大于或等于),=(等于等于),!=(不等于不等于)注意:“等于”关系运算符是双等号“=”,而不是单等,而不是单等号号“=”(赋值运算符)。五、五、C语言的运算符和表达式语言的运算符和表达式(2)关系运算符)关系运算符优先先级前前4个优先级相同,后个优先级相同,后2个相同,且前个相同,且前4个高于后个高于后2个个。即:(即:(、=)(=、!=)(3)与其他运算的)与其他运算的优先先级关系运算符的优先级低于算术运算符,但高于赋值运算符。关系运算符的优先级低于算术运算符,但高于赋值运算符。即:即:算算术运算符运算符(,=)(=,!=)赋值运算符运算符 2关系表达式 关系表达式:关系表达式:用一个关系运算符将两个表达式(可以是算用一个关系运算符将两个表达式(可以是算术表达式、关系表达式、表达式、关系表达式、逻辑表达式、表达式、赋值表达式或字符表达表达式或字符表达式等)式等)连接起来,接起来,进行关系运算的式子。行关系运算的式子。五、五、C语言的运算符和表达式语言的运算符和表达式例如例如:ab,a+b c-d,(a=3)=b,(a b)=(b c)都是合法的关系表达式。都是合法的关系表达式。关系表达式的关系表达式的值是一个是一个逻辑值(非(非“真真”即即“假假”)。)。C语言中用言中用整数整数“1”表示表示“逻辑真真”,用整数,用整数“0”表示表示“逻辑假假”。例如,例如,假假设 int x=3,y=4,z=5,则:(1)x y 的的值为0。(2)(x y)!=z 的的值为1。(3)x y z 的的值为1。(4)(x=0”。如果需要描。如果需要描述述“x=0”且且“x l0”,就不能能写为,就不能能写为“0=x=0)&(x=0,并且,并且x 10*/(x 5)/*x5*/!(x=0)/*否否定定x=0,即:,即:x 不等于不等于0 时,条件成立时,条件成立*/(year%4=0)&(year%100!=0)|(year%400=0)/*year能被能被4整除,同时不能被整除,同时不能被100整除;或者,整除;或者,year能被能被400整除整除*/逻辑运算符的运算运算符的运算规则:&:当且当且仅当两个运算量当两个运算量为“真真”结果果为“真真”,否,否则为“假假”。|:当且当且仅当两个运算量当两个运算量为“假假”结果果为“假假”,否,否则为“真真”。!:当运算量当运算量为“真真”时结果果为“假假”;当运算量;当运算量为“假假”时结果果为“真真”。五、五、C语言的运算符和表达式语言的运算符和表达式 例如,例如,假定假定x=5,则 (x=0)&(x l0)的的值为“真真”,(x 5)的的值为“假假”。(2)逻辑运算符的运算运算符的运算优先先级 逻辑运算符运算符优先先级逻辑非的优先级最高,逻辑与次之,逻辑或最低。逻辑非的优先级最高,逻辑与次之,逻辑或最低。即:即:!(非)(非)&(与)(与)|(或)(或)与其他种与其他种类运算符的运算符的优先关系先关系!(非非)算算术运运算算关关系系运运算算&(与与)|(或或)赋值运算运算五、五、C语言的运算符和表达式语言的运算符和表达式2逻辑表达式逻辑表达式:表达式:用逻辑运算符将用逻辑运算符将1个或多个表达式连接起来,个或多个表达式连接起来,进行逻辑运算的式子。进行逻辑运算的式子。例如:例如:“(year%4=0)&(year%100!=0)|(year%400=0)”就是一个判断年份是否是闰年的逻辑表达式。就是一个判断年份是否是闰年的逻辑表达式。逻辑表达式的表达式的值:是一个逻辑值(非是一个逻辑值(非“真真”即即“假假”)。整)。整数数“1”表示表示“逻辑真逻辑真”、用、用“0”表示表示“逻辑假逻辑假”。例如:例如:假假设num=12,则:(1)!num的的值0。(2)num=1&num 31的的值=1。五、五、C语言的运算符和表达式语言的运算符和表达式3说明(1)逻辑运算符两运算符两侧的操作数可以是任何的操作数可以是任何类型的数据,如型的数据,如实型、字符型等。型、字符型等。(2)在)在计算算逻辑表达式表达式时,不一定所有的表达式都要求解。,不一定所有的表达式都要求解。对于与运算,只要一个操作数为对于与运算,只要一个操作数为“假假”,结果为,结果为“假假”。不。不需求解第二个操作数。需求解第二个操作数。对于或运算,只要一个操作数为对于或运算,只要一个操作数为“真真”,结果为,结果为“真真”。不需求解第二个操作数。不需求解第二个操作数。例如:例如:假假设 int m、n、a、b、c、d;m=n=a=b=c=d=1;表达式:表达式:(m=a b)&(n=c d)结果果为0:计算时,因计算时,因(m=a b)的值为的值为 0,不需计算表达式,不需计算表达式(n=c d)。因因(n=c d)是是“真真”还是还是“假假”,其值都为,其值都为“假假”。五、五、C语言的运算符和表达式语言的运算符和表达式5.4赋值运算符和赋值表达式赋值运算符和赋值表达式1赋值运算符号符号“”就是赋值运算符,它的作用是将一个表达式的值就是赋值运算符,它的作用是将一个表达式的值赋给一个变量。赋给一个变量。赋值运算符的一般形式运算符的一般形式为:注意:被赋值的变量必须是单个变量,且必须在赋值运算符的左边。例如:例如:x=5 /*将将 5 赋值给变量赋值给变量 x*/y=(float)5/2 /*将表达式的值(将表达式的值(=2.5)赋值给变量)赋值给变量 y*/当当表表达达式式值值的的类类型型与与变变量量类类型型不不一一致致,系系统统自自动动将将表表达达式式的的值转换成被赋值变量的数据类型后再赋值给变量。值转换成被赋值变量的数据类型后再赋值给变量。五、五、C语言的运算符和表达式语言的运算符和表达式2复合赋值运算在在赋值符符“=”之前加上其他双目运算符可构成复合之前加上其他双目运算符可构成复合赋值符。符。复合复合赋值运算的一般格式运算的一般格式为:它等价于:它等价于:双目运算符双目运算符(表达式表达式)例如:例如:x+=3 /*等价于等价于x=x+3*/y*=x+6 /*等价于等价于 y=y*(x+6),而不是,而不是y=y*x+6*/C语言中有言中有10种复合种复合赋值运算符:运算符:+=,-=,*=,/=,%=;/*复合算术运算符复合算术运算符(5个个)*/&=,=,|=,=;/*复合位运算符复合位运算符(5个个)*/五、五、C语言的运算符和表达式语言的运算符和表达式3赋值表达式赋值表达式:表达式:由赋值运算符或复合赋值运算符将一个变量和由赋值运算符或复合赋值运算符将一个变量和一个表达式连接起来的表达式。一个表达式连接起来的表达式。一般格式:一般格式:=赋值表达式也有一个值,被赋值变量的值,就是赋值表达式赋值表达式也有一个值,被赋值变量的值,就是赋值表达式的值。的值。例如:例如:“a=5”为赋值表达式,表达式,a的的值“5”就是就是表达式的值表达式的值。五、五、C语言的运算符和表达式语言的运算符和表达式5.5条件运算符和条件表达式条件运算符和条件表达式 1一般格式:?:C语言中唯一的一个三目运算符,三个表达式类型可以各不语言中唯一的一个三目运算符,三个表达式类型可以各不相同。但通常相同。但通常“表达式表达式1”为逻辑表达式或关系表达式。为逻辑表达式或关系表达式。2运算规则计算计算“表达式表达式1”的值为非的值为非0(“真真”),则结果等于),则结果等于“表达式表达式2”的值;否则,结果等于的值;否则,结果等于“表达式表达式3”的值。的值。五、五、C语言的运算符和表达式语言的运算符和表达式3运算符的优先级别与结合性条件运算符的优先级,高于赋值运算符,但低于关系运条件运算符的优先级,高于赋值运算符,但低于关系运算符和算术运算符。其结合性为算符和算术运算符。其结合性为“从右到左从右到左”(即右结(即右结合性)。合性)。例如:例如:设a=2,c=a,f=3.0 则下列表达式下列表达式a 0?a:-a 结果果为?f=3.0?a=c 结果果为?(f 0)?(a 0)?2:1):(a0)?1:0)结果果为?(a=0)?(a=1):(a=0)结果果为?2 1 2 1 五、五、C语言的运算符和表达式语言的运算符和表达式【例例5.8】从从键盘上上输入入一一个个字字符符,如如果果它它是是大大写写字字母母,则把把它它转换成小写字母成小写字母输出;否出;否则,直接,直接输出。出。void main()char ch;printf(Input a character:);scanf(%c,&ch);ch=(ch=A&ch=Z)?(ch+32):ch;printf(ch=%cn,ch);五、五、C语言的运算符和表达式语言的运算符和表达式5.6逗号运算符和逗号表达式逗号运算符和逗号表达式用逗号运算符用逗号运算符“,”连接起来的式子称接起来的式子称为逗号表达式逗号表达式。逗号运算。逗号运算符又称符又称顺序求序求值运算符。运算符。1一般形式:,。2求解过程:求解过程:从左至右,依次计算各表达式的值,最后从左至右,依次计算各表达式的值,最后“表达式表达式n”的值即为的值即为整个逗号表达式的值。整个逗号表达式的值。例如:例如:a=3*5,a*4的的值=60先求解先求解a=3*5得得a=15;再求;再求 a*4=60,所以逗号表达式的值,所以逗号表达式的值=60。又例如又例如:(a=3*5,a*4),a+5的的值=20:五、五、C语言的运算符和表达式语言的运算符和表达式5.7求字节数运算求字节数运算求字求字节数运算运算符:数运算运算符:sizeof(类型型/变量量)功能:功能:sizeof 运算符求变量或类型的字节长度运算符求变量或类型的字节长度。例如:例如:sizeof(double)为8 sizeof(int)为2 float f;int i;i=sizeof(f)的的值为4。五、五、C语言的运算符和表达式语言的运算符和表达式5.8位逻辑运算位逻辑运算 操作符名称运算规则主要用途&按位与对应位均位均为1 1时才才为1 1,否,否则为0 0屏蔽数的某些位,屏蔽数的某些位,其余位保留不变其余位保留不变|按位或对应位均位均为0 0时才才为0 0,否,否则为1 1将一个数的某(些)将一个数的某(些)位置位置1,其余位保留,其余位保留不变不变按位异或对应位相同位相同时为0 0,不同不同时为1 1使一个数的某(些)使一个数的某(些)位翻转,其余各位位翻转,其余各位不变不变按位取反各位求反,即各位求反,即1 1变0 0,0 0变1 1五、五、C语言的运算符和表达式语言的运算符和表达式说明:明:(1)所有操作数都必)所有操作数都必须首先首先转换成二成二进制数再按位运算。制数再按位运算。(2)位运符)位运符优先先级别:&|(3)位位双双目目运运算算符符优先先级别低低于于关关系系运运算算符符,高高于于逻辑运运算算符,运算自左向右运算。符,运算自左向右运算。关系运算符关系运算符(&|)逻辑运算符运算符(4)运算符自右向左运算;运算符自右向左运算;&、|是自左向右运算。是自左向右运算。五、五、C语言的运算符和表达式语言的运算符和表达式例如:例如:设有定有定义:int a=3,b=9,则有:五、五、C语言的运算符和表达式语言的运算符和表达式2.5C语言的运算符和表达式语言的运算符和表达式2.5.9位移运算和位运算赋值运算符位移运算和位运算赋值运算符 1位移运算操作操作符符名称名称运算规则运算规则说明说明左移左移a ba 右移右移a ba b,a a 右移右移 b b 位位使操作数各位右移,移出的低使操作数各位右移,移出的低位舍去,高位:位舍去,高位:1.1.对无符号数和有符号中的正无符号数和有符号中的正数,数,补0 0(2 2)有符号数中的)有符号数中的负数,取数,取决于所使用的系决于所使用的系统:补0 0的称的称为“逻辑右移右移”,补1 1的称的称为“算算术右移右移”2.5C语言的运算符和表达式语言的运算符和表达式优先先级别:()仅仅次次于于算算术术双双目目运运算算符符,运运算算方方向向从从左向右运算。左向右运算。(1)左移运算符)左移运算符左移运算符把一个数的二进位全部左移若干位。左移运算符把一个数的二进位全部左移若干位。例例如如:b 2 将将 b 的的各各二二进进位位右右移移2位位。移移到到右右端端的的低低位位被被舍弃,对无符号数,高位补舍弃,对无符号数,高位补0。如如b=14 时:时:b为 00001110,b2为 00000011:10 此二位舍弃此二位舍弃 2.5C语言的运算符和表达式语言的运算符和表达式右移一位相当于除以右移一位相当于除以2,右移,右移n位相当于除以位相当于除以2n。右移时,应注意符号位问题。右移时,应注意符号位问题。补入补入0的称为的称为“逻辑右移逻辑右移”。补入。补入1的称的称“算术右移算术右移”。例如例如:m为八进制数为八进制数113755。m:1001011111101101 m1:0100101111110110 (逻辑右移时逻辑右移时)m1:1100101111110110 (算术右移时算术右移时)2.5C语言的运算符和表达式语言的运算符和表达式位运算赋值运算符位运算赋值运算符 操作符操作符名称名称运算规则运算规则说明说明&=|=位与赋值位或赋值按位异或赋值位左移赋值位右移赋值a&=b,等价于 a=a&ba|=b,等价于 a=a|ba=b,等价于 a=a ba=b,等价于 a=a=b,等价于 a=a b操作数操作数均均为整整型型位位运运算算赋值运运算算符符优先先级:6个个运运算算符符同同级,与与赋赋值值符符级级别别相相同同,运运算算方方向自右向左运算。向自右向左运算。例如:例如:设 a=6,b=3,a,b 均均为无符号整型,无符号整型,则:b&=a,结果果 a 不不变,b 为2 a=b,结果果 b 不不变,a 为482.5C语言的运算符和表达式语言的运算符和表达式2.5.10运算符的优先级与结合性运算符的优先级与结合性结合性合性就是指操作数两侧的运算符相同优先级时,该操作数就是指操作数两侧的运算符相同优先级时,该操作数是先与左边,还是先与右边的运算符结合。若先与左面的运是先与左边,还是先与右边的运算符结合。若先与左面的运算符结合,称为左结合性(即从左至右运算)。反之,称为算符结合,称为左结合性(即从左至右运算)。反之,称为右结合性(从右至左运算)。右结合性(从右至左运算)。总结得出:得出:结合性:结合性:除单目运算符、条件运算符和赋值运算符是右结除单目运算符、条件运算符和赋值运算符是右结合性外,其他运算符都是左结合。合性外,其他运算符都是左结合。优先级顺序优先级顺序:表中第表中第1级最高,级最高,第,第15级级“,”号运算号运算符最低。符最低。
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!