资源预览内容
第1页 / 共28页
第2页 / 共28页
第3页 / 共28页
第4页 / 共28页
第5页 / 共28页
第6页 / 共28页
第7页 / 共28页
第8页 / 共28页
第9页 / 共28页
第10页 / 共28页
亲,该文档总共28页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第五讲第五讲 运算符和表达式运算符和表达式讲师讲师:程浩7/31/2024学习目标1.熟练应用各种算术运算符的优先级和结合性n2.熟练应用各关系运算符的优先级和关系表达式值的判定n3.熟练应用各逻辑运算符的优先级和逻辑表达式值的判定n4.熟练应用赋值运算符的结合性和优先级n5.熟练应用自增/减运算符的作用、自增/减运算的前置方式和后置方式的区别n6.理解逗号表达式的作用及其值的计算7.了解C语言的常用运算符的优先级 学习重点:n算术运算符的优先级和结合性n关系运算符的优先级和关系表达式值的判定n逻辑运算符的优先级和逻辑表达式值的判定学习难点:n自增/减运算符的作用、自增/减运算的前置方式和后置方式的区别一、算术运算符及算术表达式(1)n算术运算符算术运算符+ :加法运算符。如:加法运算符。如1+2的结果为的结果为3。- :减法运算符,或负值运算符。如:减法运算符,或负值运算符。如5-3、-2的结果的结果 分别为分别为2和和-2。* :乘法运算符。如:乘法运算符。如2*3的结果为的结果为6。/ :除法运算符。如:除法运算符。如4/2的结果为的结果为2。% :模运算符,或称取余运算符,要求:模运算符,或称取余运算符,要求%两侧均为整两侧均为整型数据。如型数据。如 8%3的结果为的结果为2。n注意注意运运算算的的数数据据都都是是整整型型数数据据时时,结结果果为为整整型型,如如果果有有实实数,则结果为数,则结果为double型。型。模模运运算算符符要要求求运运算算符符两两侧侧必必须须为为整整型型数数据据,如如果果不不是是整整型型数数据据可可以以采采用用强强制制类类型型转转换换。例例如如x为为float型型, (int)x%2一、算术运算符及算术表达式(2)n算术表达式算术表达式用用算术运算符算术运算符将数据对象连接起来的式子,称为将数据对象连接起来的式子,称为算术算术表达式表达式。表达式的运算按照运算符的结合性和优先级。表达式的运算按照运算符的结合性和优先级来进行。来进行。C规定了运算符的结合方向,即规定了运算符的结合方向,即结合性结合性。算术运算符的。算术运算符的结合性是结合性是从左往右从左往右算。例如表达式算。例如表达式2+3+4,先算先算2+3C语言规定负值运算符优先级语言规定负值运算符优先级高于高于乘、除、模运算符,乘、除、模运算符,乘、除、模运算符优先级乘、除、模运算符优先级高于高于加、减运算符,当表达加、减运算符,当表达式中优先级相同时,按照运算符的结合性。式中优先级相同时,按照运算符的结合性。n例如例如:3+4*3/-2,计算次序:,计算次序:-、*、/、+。n如果需要先计算优先级低的可以使用小括号如果需要先计算优先级低的可以使用小括号“()()”,小括号的优先级最高,小括号的优先级最高。一、算术运算符及算术表达式(3)n例题例题程序程序L5_1.C功能:计算功能:计算a+3*-2/(int)(a+b)-12的结果,其中的结果,其中a=1.7,b=2.4。#include void main() float a=1.7,b=2.4,s;s= a+3*-2/(int)(a+b)-12printf(result is %fn,s);二、关系运算符及关系表达式(1)n关系运算符关系运算符4。= :小于等于运算符。如小于等于运算符。如3 :大于运算符。如:大于运算符。如xy。= :大于等于运算符。如大于等于运算符。如x=0。= :等于运算符。如等于运算符。如a= =b。!= :不等于运算符。如不等于运算符。如y!=1。n两个数据在进行值的比较,其结果不是两个数据在进行值的比较,其结果不是“真真”就是就是“假假”。n在在C语言中,任何语言中,任何非非0值为值为“真真”,0值为值为“假假”。关。关系运算的结果系运算的结果仅产生两个值仅产生两个值:1表示表示“真真”,0表示表示“假假”。 二、关系运算符及关系表达式(2)n关系运算符结合性与优先级关系运算符结合性与优先级关系运算符的结合性为关系运算符的结合性为“自左至右自左至右”。 例如例如543,计算时先算,计算时先算54,条件成立结果为,条件成立结果为1,再与再与3比较,即比较,即13,条件不成立,所以最终结果为,条件不成立,所以最终结果为0。关系运算符中关系运算符中、=的优先级相等,的优先级相等,= =、!=优先级相等,且前者优先级相等,且前者高于高于后者。后者。 例如例如1= =43,“”的优先级高于的优先级高于“= =”,所以,所以43结果为结果为1,1= =1结果为结果为1。关系运算符的级别关系运算符的级别小于小于算术运算符。例如算术运算符。例如2+35-1,运算次序为,运算次序为+、。二、关系运算符及关系表达式(3)n用关系运算符将两个数据或表达式连接起来的式子,用关系运算符将两个数据或表达式连接起来的式子,称为称为关系表达式关系表达式。关系表达式的值为。关系表达式的值为1或或0。n例例5.2 阅读程序,写出结果并演算。阅读程序,写出结果并演算。#include void main() int a=5,b=4,c=3; int s,t; if (abc) s=a; else s=0; t=(a-cc+2= =0); printf(s=%d,t=%dn,s,t); n举一反三举一反三 :计算:计算2+4= =6*(2!=1)的结果。的结果。三、逻辑运算符及逻辑表达式(1)n逻辑运算符逻辑运算符逻辑运算表示两个数据或表达式之间的逻辑关系。逻辑运算表示两个数据或表达式之间的逻辑关系。C语言提供的语言提供的逻辑运算符逻辑运算符有三种:逻辑与运算符有三种:逻辑与运算符“&”、逻辑或运算符、逻辑或运算符“”、逻辑非运算符、逻辑非运算符“!”。逻辑运算的结果也只有两个:逻辑运算的结果也只有两个:“真真”为为1和和“假假”为为0。n逻逻辑辑与与,即即&:为为便便于于理理解解,可可以以写写为为“条条件件1&条条件件2”,则则逻逻辑辑与与运运算算结结果果为为“只只有有当当条条件件1成成立立并并且且条条件件2也也成成立立时时,逻逻辑辑与与成成立立,结结果果为为“真真”即即值值1,其其余余情情况况结结果果为为“假假”即即值值0”。所所以以条条件件1或或条条件件2只只要要有有一一个个不不成成立立,逻逻辑辑与与的的结结果果都都为为“假假”。如如(x3)&(x3) (x3),则,则x取值不取值不是大于是大于3的,即的,即x小于等于小于等于3时,结果为时,结果为1,否则结果为,否则结果为0。三、逻辑运算符及逻辑表达式(3)n逻辑运算符#include void main()printf(%d,%d,%d,%dn,(43)&(51),(41),(43)&(51),(43)&(53) (51),(41),(43) (51),(43) (53),!(43); 运行结果 :1,0,0,01,1,1,00,1三、逻辑运算符及逻辑表达式(4)n逻辑运算符结合性与优先级逻辑运算符结合性与优先级逻辑运算符逻辑运算符“!”的结合性为的结合性为“自右至左自右至左”、“&”和和“”的结合性为的结合性为“自左至右自左至右”。逻辑运算符的优先级为逻辑运算符的优先级为“!”高于高于“&”高于高于“”。例。例如表达式如表达式!(35)&(41),则,则!的运算结果为假、的运算结果为假、&的运算结果为假,最终的运算结果为假,最终的结果为假,即该表达式的值的结果为假,即该表达式的值为为0。“!”的优先级的优先级高于高于算术运算符,算术运算符,“&”和和“”的优先的优先级级低于低于关系运算符。例如:关系运算符。例如:3+1626)(2b!=0&!(a= =0)等价于等价于(ab)!=0)&(!(a= =0),如果如果a=4,b=3,结果为结果为1。三、逻辑运算符及逻辑表达式(4)n逻辑表达式逻辑表达式逻辑表达式的值为逻辑表达式的值为1或或0。由于。由于C语言编译系统在判断一个量为语言编译系统在判断一个量为“真真”、“假假”时,时,以以0为为“假假”,以非,以非0为为“真真”。所以逻辑运算符也。所以逻辑运算符也可以直接连接数据,如可以直接连接数据,如!4的结果为的结果为0、3&0的结果为的结果为0。例例5.3 阅读程序,写出结果并演算。阅读程序,写出结果并演算。 #include void main() int a=5,b=4,c=3; int s,t; if (ab&ac) s=a; else s=0; t=!(a-c12&0); printf(s=%d,t=%dn,s,t); 举一反三举一反三 :计算:计算20&(3-2*4)的结果。的结果。4为非0,即为真!4!(真)假0三、逻辑运算符及逻辑表达式(5)n熟练掌握熟练掌握C语言的关系运算符和逻辑运算符,可以自如语言的关系运算符和逻辑运算符,可以自如地描述各种复杂的条件。地描述各种复杂的条件。n例如要判断某一年例如要判断某一年year是否是闰年,需要满足下列条是否是闰年,需要满足下列条件之一:件之一:该年可以被该年可以被4整除,但不能被整除,但不能被100整除。整除。该年可以被该年可以被400整除。整除。 则可以用逻辑表达式表示为:则可以用逻辑表达式表示为: (year%4= =0&year%100!=0) (year%400= =0) 上述表达式成立则为闰年,否则为非闰年。上述表达式成立则为闰年,否则为非闰年。n试编程实现:输入一个年份,判断是否是闰年试编程实现:输入一个年份,判断是否是闰年。四、赋值运算符及赋值表达式(1)nC语言中最常见的赋值运算符是语言中最常见的赋值运算符是“=”,其,其作用是将赋值运算符右边的表达式赋予左边作用是将赋值运算符右边的表达式赋予左边的变量的变量 变量变量=表达式表达式n例如:例如:x=4。n赋值运算符的结合性为赋值运算符的结合性为从右至左从右至左,其优先级,其优先级低于低于算术运算符、关系运算符和逻辑运算符。算术运算符、关系运算符和逻辑运算符。n例如例如 i=j=2+3;2+3;j=5;i=j四、赋值运算符及赋值表达式(2)n复合赋值运算算术运算符“+ * / %”和赋值运算符“=”的结合+=:加赋值运算符。如a+=3+1,等价于 a=a+(3+1)。-=:减赋值运算符。如a-=3+1,等价于 a=a-(3+1)。*=:乘赋值运算符。如a*=3+1,等价于 a=a*(3+1)。/=:除赋值运算符。如a/=3+1,等价于 a=a/(3+1)%=:取余赋值运算符.如a%=3+1,等价于a=a%(3+1)。复合赋值运算符的作用是先将复合运算符右边表达式的结果与左边的变量进行算术运算,然后再将最终结果赋予左边的变量复合运算要注意:一是复合运算符左边必须是变量;二是复合运算符右边的表达式计算完成后才参与复合赋值运算。复合赋值运算符的结合性和优先级等同于简单的赋值运算符“=”。四、赋值运算符及赋值表达式(2)#include void main() int a=10,b=10; printf(“%dt”,a+=a- =a*a); printf(“%d ”,b+=b- =b*=b); n运行结果 :-180 0n复合运算符常用于某个变量自身的变化,尤其当左边的变量名很长时,使用复合运算符书写更方便。n举一反三 :计算a=3时,表达式a*=4+(a%=2)的结果。a*a=100a=a-100=-90a=a+a=-180b=b*b=100b=b-b=0b=b+b=0五、自增运算符与自减运算符(1)n自增和自减运算符主要用于给一个变量加1或减1。n自增和自减运算符及其功能如下:+:自增运算符。如a+,+a,都等价于a=a+1。 -: 自减运算符。如a-,-a,都等价于a=a-1。n自增和自减运算符是单目运算符,可以放到变量前面(前置方式)或者后面(后置方式),这两种方式同样实现了变量的自增或自减运算。但是结果是不同的。n前置运算时变量先做自增或自减运算,再将变化后的变量值参加表达式中的其它运算。后置运算时变量在参加表达式中的其它运算之后,再做自增或自减运算。五、自增运算符与自减运算符(2)n当a=10时,x=a+的结果是x=10,a=11。而x=+a的结果是x=11,a=11。n当a=10时,x=a-的结果是x=10,a=9。而x=-a的结果是x=9,a=9。n所以一个变量的前置自增(减)运算和后置自增(减)运算仅表明该变量使用其值参加运算与其值自身变化之间的先后关系,即前置运算是变量先变化后使用,而后置运算是先使用后变化。n此外需要说明的是变量的自增或自减运算与该变量在表达式中的运算顺序无关x=a;a=a+1a=a+1x=a;五、自增运算符与自减运算符(3)#include void main() int a1,a2,a3,a4,b1,b2,b3,b4; a1=a2=a3=a4=10; b1=(a1+)+(a1+)+(a1+); b2=(+a2)+(+a2)+(+a2); b3=(a3-)+(a3-)+(a3-); b4=(-a4)+(-a4)+(-a4);printf(a1=%d,a2=%d,b1=%d,b2=%dn,a1,a2,b1,b2);printf(a3=%d,a4=%d,b3=%d,b4=%dn,a3,a4,b3,b4);n运行结果 :a1=13,a2=13,b1=30,b2=39 a3=7,a4=7,b3=30,b2=21b1=a1+a1+a1;a1=a1+1;a1=a1+1a1=a1+1a2=a2+1;a2=a2+1a2=a2+1b2=a2+a2+a2;六、逗号运算符及逗号表达式(1)n逗号运算符主要用于连接表达式。: a=a+1,b=3*4;n用逗号运算符连接起来的表达式称为逗号表达式n表达式1,表达式2, ,表达式nn逗号表达式的运算过程是:先算表达式1,再算表达式2,依次算到表达式n。n整个逗号表达式的值是最后一个表达式的值。逗号表达式的结合性从左至右.它的优先级是最低的。nb=(a=4,3*4,a*2) 等价于 a=4; 3*4; b=a*2;六、逗号运算符及逗号表达式(2)#include void main() int a=3,b=4,c=1,max,t; if (ab,ac) max=a; else max=0; t=(a+3,b+1,+c); printf(max=%d,t=%dn,max,t);运行结果 :max=3,t=2举一反三举一反三 :判断输出结果:判断输出结果printf(“%d,%dn”,(3,4,5),(a=3,a=0,a+=2)if(ac)t=+c七、条件运算符和条件表达式(1)n条件运算符是C语言的唯一的三目运算符,即它需要3个数据或表达式构成条件表达式。 表达式1?表达式2:表达式3n如果表达式1成立,则 表达式2的值是整个 表达式的值,否则 表达式3的值是整个表达式 的值。表达式表达式1 1成立成立不成立不成立条件表达式的值条件表达式的值为表达式为表达式3 3的值的值条件表达式的值条件表达式的值为表达式为表达式2 2的值的值七、条件运算符和条件表达式(2)n例如表达式“max=(ab)?a:b)”,等价于 if (ab) max=a; else max=b;n条件运算符的结合方向为“从右至左”。 例如: ab?a:bc?b:c 等价于 ab?a: (bc?b:c)n条件运算符的优先级高于赋值运算符,低于关系和算术运算符。所以max=ab?a:b等价于max=(ab)?a:b)。 #include void main() int a,b,c,max; scanf(“%d,%d,%d”,&a,&b,&c); max=a(bc?b:c)?a:(bc?b:c); printf(a=%d,b=%d,c=%d,max=%dn,a,b,c,max);常用运算符优先级别经典例题 /* 程序程序L5_12.C : 生成一个简单的密电码。生成一个简单的密电码。/*- 程序L5_11.C功能:输入年、月、日,输出该日期是该年的第几天 -*/
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号