您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 第4章c语言(运算符和表达式)
第4章C世界中的加减乘除——运算符和表达式C中的运算符和表达式算术运算符和表达式关系运算符和表达式逻辑运算符和表达式条件运算符和表达式赋值运算符和表达式自增、自减运算符逗号运算符和表达式运算符的优先级4.1C中的运算符和表达式4.1.1运算符4.1.2表达式4.1.3优先级与结合性4.1.1运算符用来对数据进行运算的符号,就可以称为运算符。C语言中的运算符如下表所示:运算符种类作用包含运算符算术运算符用于各类数值运算加(+)、减(-)、乘(*)、除(/)、求余(或称模运算,%)、自增(++)、自减(--)关系运算符用于比较运算大于()、小于()、等于(==)、大于等于(=)、小于等于(=)、不等于(!=)逻辑运算符用于逻辑运算与(&&)、或(||)、非(!)位操作运算符参与运算的量,按二进制位进行运算位与(&)、位或(|)、位非(~)、位异或(^)、左移()、右移()赋值运算符用于赋值运算简单赋值(=)、复合算术赋值(+=,-=,*=,/=,%=)、复合位运算赋值(&=,|=,^=,=,=)条件运算符用于条件求值(?:)逗号运算符用于把若干表达式组合成一个表达式(,)指针运算符用于取内容和取地址取内容(*)、取地址(&)求字节数运算符用于计算数据类型所占的字节数(sizeof)其它运算符其它括号(),下标[],成员(→,.)等4.1.1运算符按运算符在表达式中与运算分量的关系(连接运算分量的个数),运算符可分为:①单目运算符,即一元运算符,只需要一个运算分量,如:-5,!a;②双目运算符,即二元运算符,需要两个运算分量,如:a+b,x||y;③三目运算符,即三元运算符,需要三个运算分量,如:ab?a:b。注意:条件运算符(?:)是C语言中唯一的三目运算符。4.1.2表达式C中运算符和数据构成的式子,就称为表达式;表达式运算的结果就称为是表达式的值。根据运算符的分类,C语言的表达式分为以下8类:算术表达式、关系表达式、逻辑表达式、赋值表达式、条件表达式、逗号表达式、位表达式和其它表达式等。由以上表达式还可以组成更复杂的表达式,例如:z=x+(y=0)4.1.3优先级和结合性优先级:是指当不同的运算符进行混合运算时,运算顺序是根据运算符的优先级而定的,优先级高的运算符先运算,优先级低的运算符后运算。结合性:是指运算符可以和左边的表达式结合,也可以与右边的表达式结合,即:左结合性和右结合性。例如:x+y*z注意:最典型的右结合性运算符是赋值运算符,它的结合性是自右向左4.2算术运算符和表达式4.2.1算术运算符4.2.2算术表达式4.2.3算术运算符的优先级与结合性4.2.4应用举例4.2.1算术运算符基本的算术运算符有5个,分别是:+:加法运算符或正值运算符-:减法运算符或负值运算符*:乘法运算符/:除法运算符%:求模运算符或求余运算符其中,+(正值运算符)和-(负值运算符)是单目运算符,其余均为双目运算符。2x2*xbaa/b4.2.2算术表达式简单的算术表达式,例如:2+3:结果为:52-3:结果为:-12*3:结果为:62/3:结果为:02%3:结果为:2注意:(1)“%”运算符要求两侧的运算分量必须为整型数据;(2)在C中,乘法运算符为“*”,而不能写成数学中的“×”号;除法运算为“/”,而不是“÷”号。6.0%4×-6%46%-4-6%-44.2.2算术表达式复杂的算术表达式,例如:2*(9/3)结果为:610/((12+8)%9)结果为:54.2.3算术运算符的优先级和结合性在复杂的算术表达式中:“()”的优先级最高,“*、/、%”运算符的优先级高于”+、-”运算符。算术运算符中的结合性均为“左结合”。4.2.4应用举例【范例4-1】使用算术运算符计算结果。注意:对于“/”运算符,C语言中规定:⑴当它的两个运算分量均为整数时,计算结果也必须为整数。⑵如果两个运算分量中有一个数是浮点型时,则结果也应该为浮点型数据。例如:99.0/5的结果为19.8。⑶如果两个运算分量有一个为负值,其结果随不同的机器系统而不同,但多数机器采用“向零取整”的原则。例如:-7/4的结果为-1;7/-4的结果为1。4.2.4应用举例【范例4-2】算术运算符和表达式的应用。4.3关系运算符和表达式4.3.1关系运算符4.3.2关系表达式4.3.3关系运算符的优先级与结合性4.3.4应用举例4.3.1关系运算符C语言提供了6种关系运算符,分别是:(大于)、=(大于等于)、(小于)、=(小于等于)、==(等于)、!=(不等于)。它们都是双目运算符。注意:以下这些运算符不同于平时的书写习惯:⑴“=”和“=”不能写成“≥”和“≤”;⑵等于在C中的书写格式为“==”而不是“=”,注意是两个“=”连起来写表示相等的关系,“=”是后面要讲的赋值运算符,注意二者的区别。4.3.2关系表达式把两个C语言表达式连接起来的式子称为关系表达式;如:x!=0‘a’==‘A’a*a+b*b+c*cy*y注意:数值型数据比较的是数值的大小;字符型数据比较的是ASCII码的大小。关系表达式的结果只有两个:1和0。当关系表达式成立时值为1,不成立时值为0。例如:若x=3,y=5,z=-2,则:x+yz的结果为0x!=(yz)的结果为1‘a’==‘A’的值为04.3.3关系运算符的优先级和结合性“”、“=”、“”和“=”的优先级相同;“==”和“!=”的优先级相同;前四种的优先级高于后两种。例如:a==bc等价于a==(bc)abc等价于(ab)c关系运算符中的结合性均为“左结合”。4.3.4应用举例【范例4-3】输出程序中表达式的值01#includestdio.h02voidmain()03{04inta,b,c;05a=b=c=10;/*a,b,c均赋值为10*/06a=b==c;/*将b==c的结果赋值变量a*/07printf(a=%d,b=%d,c=%d\n,a,b,c);/*分别输出a,b,c的值*/08a=bc=100;/*将bc=100的结果赋给变量a*/09printf(a=%d,b=%d,c=%d\n,a,b,c);/*分别输出a,b,c的值*/10}4.4逻辑运算符和表达式4.4.1逻辑运算符4.4.2逻辑表达式4.4.3逻辑运算符的优先级和结合性4.4.4应用举例4.4.1逻辑运算符逻辑运算符主要用于逻辑运算;包含了“&&”(逻辑与)、“||”(逻辑或)、“!”(逻辑非)。其中,“!”是单目运算符,而”&&”和“||”是双目运算符。aba&&ba||b!a真真真真假真假假真假假真假真真假假假假真4.4.2逻辑表达式逻辑运算符把各个表达式连接起来组成一个逻辑表达式。例如:a&&b、1||(!x)逻辑表达式的值只有两个:0和1。举例:当x为0时,x-2&&x=5的值为多少。若a=4,则!a、a&&-5、4||0的值分别为多少。4.4.3逻辑运算符的优先级和结合性逻辑非(!)的优先级别最高,逻辑与(&&)的优先级高于逻辑或(||)逻辑非(!)—然后是算术运算符—关系运算符—逻辑与(&&)—逻辑或(||)举例:53&&2||!84-2逻辑运算符是“右结合”。4.4.4应用举例【范例4-4】试写出判断某数x是否小于-2且大于等于5的逻辑表达式。当x值为0时,分析程序运行结果。【范例4-5】试判断给定的某年year是否为闰年。(闰年的条件是符合下面两个条件之一:①能被4整除,但不能被100整除;②能被400整除。)4.5条件运算符条件运算符中由“?”和“:”组成,是C语言中唯一的一个三目运算符;将条件运算符将数据连接起来的式子称为条件表达式。条件表达式的一般构成形式是:表达式1?表达式2:表达式3条件表达式的执行过程是:①先计算表达式1的值;②若该值不为0,则计算表达式2的值,并将表达式2的值作为整个条件表达式的值;③否则,就计算表达式3的值,并将该值作为整个条件表达式的值。例如:(x=0)?1:-14.5条件运算符条件运算符的结合性是“右结合”。优先级别低于算术运算符、关系运算符和逻辑运算符;例如:ab?a:cd?c:d等价于ab?a:(cd?c:d)【范例4-6】条件运算符和表达式的应用。4.6赋值运算符和表达式4.6.1赋值运算符4.6.2赋值表达式4.6.3赋值运算符的优先级和表达式4.6.4应用举例4.6.1赋值运算符基本的赋值运算符为:=复合赋值运算符分别为:+=、-=、*=、/=、%=、=、=、&=、^=、!=4.6.2赋值表达式由赋值运算符将一个变量和一个表达式连接起来的式子称为赋值表达式。赋值表达式的一般格式为:变量=表达式例如:a=5;x=10+y;对于赋值运算符说明如下:⑴赋值运算符“=”与数学中的等式形式一样,但含义不同,注意区别。⑵注意“==”与“=”的区别,==是用来判断运算符两边的数据是否相等,而=作用是将右边表达式的值赋给左边的变量。如:a==bc与a=bc不同x=yy=x4.6.2赋值表达式赋值表达式的值等于右边表达式的值,而结果的类型由左边变量的类型决定,例如:inti;floatf;i=1.2*3;f=23;4.6.2赋值表达式使用复合的赋值运算符构成的表达式,例如:a+=b+c等价于a=a+(b+c)a-=b+c等价于a=a-(b+c)a*=b+c等价于a=a*(b+c)a/=b+c等价于a=a/(b+c)a%=b+c等价于a=a%(b+c)注意:①复合运算符在书写时,两个运算符之间不能有空格,否则就是错误的。②复合赋值运算符右边的表达式应作为一个整体对待。4.6.3赋值运算符的优先级和结合性赋值运算符是“右结合”,例如:a=b=c=0赋值运算符的优先级比上述运算符的优先级都低例如:a=(b=9)*(c=7)等价于a=((b=9)*(c=7))y=x==0?1:sin(x)/x等价于y=(x==0?1:sin(x)/x)max=ab?a:b等价于max=(ab?a:b)4.6.4应用举例【范例4-7】分析下面程序的运行结果。01#includestdio.h02voidmain()03{04inta,b,c;05a=b=c=1;06a+=b;/*等价于a=a+b*/07b+=c;08c+=a;09printf((1)%d\n,ab?a:b);/*输出a,b二者的较大者*/10(a=b=c)?printf(AA):printf(CC);/*若a=b=c成立则输出AA,否则输出CC*/11printf(\na=%d,b=%d,c=%d\n,a,b,c);12}4.6.4应用举例【范例4-8】若a=12,试写出表达式a+=a-=a*=a运算后a的值。a*=aa=a*a=12*12=144a-=144a=a-144=144-144=0a+=0a=a+0=0+0=04.7自增、自减运算符自增运算符:++和自减运算符:--。有以下几种形式:++i/*前置运算,相当于i=i+1*/--i/*前置运算,相当于i=i-1*/i++/*后置运算,相当于i=i+1*/i--/*后置运算,相当于i=i-1*/注意:++、--中间不能有空格;自增自减运算符只能用于变量,是单目运算符;它们都具有“右结合性”。4.7自增、自减运算符若i=0;则j=++i;与j=i++;一样吗?举例:【范例4-9】前置加和后置加的区别。说明:y=i+++j;应该如何理解?在C中,词法分析遵循“最长匹配”原则。在确保有意义的条件下,从左到右尽可能多地将若干个字符组成一个运算符,所以,上面的表达式就等价于y=(i++)+j。4.8逗号运算符和表达式逗号运算符的功能是把两个表达式连接起来,使之构成一个逗号表达式。逗号运算符在所有运算符中是级别最低的。逗号表达式的一般形式为:表达式1,表达式
本文标题:第4章c语言(运算符和表达式)
链接地址:https://www.777doc.com/doc-6860329 .html