资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,2.4,运算符和表达式,(,见附录,C,),C,运,算,符,算术运算符:(,+-*/%+-,),关系运算符:(,=!=,),逻辑运算符:(!,&|,),位运算符 :(,|&,),赋值运算符:(,=,及其扩展),条件运算符:(,?:,),逗号运算符:(,),指针运算符:(*,&,),求字节数符:(,sizeof,),强制类型转换:(类型),分量运算符:(,.-,),下标运算符:(,),其它(如函数调用运算符,(),),学习运算符应注意:,运算符功能,与运算量关系,要求运算量个数,要求运算量类型,运算符优先级别,结合方向,结果的类型,一,.,算术运算符和表达式,基本算术运算符:,+-*/%,结合方向:从左向右,优先级:,-*/%-+-,说明:,“-”可为单目运算符,负号运算符结合方向自右至左,优先级高于,+-*/%,两整数相除,结果为整数,.,若有负数,向零取整。,%要求两侧均为整型数据,结果为余数部分,余数的符号与被除数一致,例,5/2 =,2,-5/3 =,-1,(向零取整),-5/2.0=,-2.5,(,int,double),例,5%2 =,1,-2%3 =,-2,2%-3 =,2,5%1 =,0,5.5%2,(,),例 将一个三位数,365,转换为,563,。,(2-4.c),#include“,stdio.h,”,void main(),int,x=365,a,b,c,y;,c=x%10;,b=x/10%10;,a=x/100;,y=c*100+b*10+a;,printf(“x,=%d,y=%dn”,x,y);,结果:,x=365,y=563,自增、自减运算符,+-,作用:使,变量,值加,1,或减,1,种类:,前置,+i,-i (,先执行,i,+1,或,i-1,,,再使用,i,值),后置,i+,i-(,先使用,i,值,再执行,i,+1,或,i-1,),例,自增运算,#include“,stdio.h,”,void main(),int,a=3,b=4,c,d;,c=a+;,d=+b;,printf(“a,=%d,b=%d,c=%d,d=%dn”,a,b,c,d);,程序的运行结果为:,a=4,b=5,c=3,d=5,_,其中,c=a+;,与下列两条语句等价:,c=a;,a=a+1;,先使用,a,的原值赋给,c,再使,a,的值增,1,变成,4,_,其中,d=+b;,与下列两条语句等价:,b=b+1;,d=b;,先使用,b,的值增,1,变成,5,再赋给,d.,说明:,优先级,+-,-,*/%,+-,(1),自右至左,(2),自左至右,(3),自左至右,例-,i+,-(i+),i=3;,printf(“%d”,-i,+);,/-3,例-,i+,i=3;,printf(“%d”,-i,+);,例:,Main(),int,a=1,b=1;,printf(“+a,=%d,b+=%dn”,+a,b+);,printf(“a,=%d,b=%dn”,a,b);,printf,(“-a=%d,b-=%dn”,-a,b-);,printf(“a,=%d,b=%dn”,a,b);,运行结果:,+a=2,b+=1,a=2,b=2,-a=1,b-=2,a=1,b=1,二,.,赋值运算符和表达式,简单赋值运算符,符号:,=,格式:变量标识符,=,表达式,作用:将一个数据(常量或表达式)赋给一个变量,复合赋值运算符,种类:,+=-=*=/=%=,a+=3,a=a+3,x*=y+8,x=x*(y+8)/+,优先级高于*,=,x%=3,x=x%3,例,a=3;,c=d+2;,赋值运算符说明,:,结合方向:,自右向左,优先级,:,14,左侧必须是变量,不能是常量或表达式,赋值表达式的值与变量值相等,且可嵌套,赋值转换,规则,:,使赋值号右边表达式值,自动,转换成其左边变量的类型,例,3=x-2*y;,错误,a+b=3;,错误,例,float f;,int,i;,i=10;,f=i;,则,f=10.0,例,int,i;,i=2.56;/,结果,i=2,;,例,:a=b=c=5,int,a=b=c=5;(),/,表达式值为5,,a,b,c,值为5,练习:,a=5;,计算,a+=a-=a+a,,,则表达式的值为(),(1)a+a=10;a=5,(2)a-=10,即,a=a-10=-5.a=-5;,(3)a+=-5,即,a=a+(-5),a=-10;,练习:,*x+20%3*(x=y)/16,其中,x=3.0,,,y=4,,,则表达式的值为(),(1)1/2=0;0*x=0,(2)20%3=2;x=4.0(,赋值后和左端类型一致,),(3)0+2*4.0/16=8.0/16=0.5,逗号运算符和表达式,形式:,表达式,1,表达式,2,表达式,n,结合性,:,从左向右,优先级,:,15,逗号表达式,的值:等于表达式,n,的值,用途:,常用于循环,for,语句中,例,a=3*5,a*4,a=3*5,a*4,a+5,例,x=(a=3,6*3),x=a=3,6*a,/a=15,表达式值60,/a=15,表达式值20,/,赋值表达式,表达式值18,,x=18,/,逗号表达式,表达式值18,x=3,例,:,#include,main(),int,x,y=7;,float z=4;,x=(y=y+6,y/z);,printf(x,=%dn,x);,运行结果:,x=3,三,.,关系运算符和表达式,关系运算符,种类,:,=!=,结合方向:自左向右,优先级别:,6,7,例,ca+b,/*c(a+b)*/,ab!=c,/*(ab)!=c*/,a=bc,/*a=(bc,/*a=(bc)*/,关系表达式的值:是逻辑值“真”或“假”,用,1,和,0,表示,例,int,a=3,b=2,c=1,d,f;,ab,(ab)=c,b+cb,f=abc,/,表达式值1,/,表达式值1,/,表达式值0,/d=1,/f=0,+,-,,,-,*,/,%,+,-,6,=,7=,!=,=,关系运算举例:,例 若,a=0;b=0.5;x=0.3;,则,a,=x278,在,C,中是允许的,,值为,0,例,int,i=1,j=7,a;,a=i+(j%4!=0);,则,a=,2,例 ,a0,结果为,A100,结果为,1,0,a,b,!a,!b,a&b,a|b,真,假,真,假,假,假,真,真,四,.,逻辑运算符和表达式,逻辑运算符,种类:,!&|,逻辑运算真值表,C,语言中,运算量:,0表示“假”,,非0表示“真”,运算结果:,0表示“假”,,1表示“真”,真,假,假,假,假,假,真,真,假,假,真,真,真,假,真,真,!,(2),&,(11),|,(12),高,低,例,a=x&xb&xy,a=b|x=y,!a|ab,优先级:,结合方向:,!,:,从右向左,&:,从左向右,|:,从左向右,/(a=x)&(xb)&(xy),/(a=b)|(x=y),/(!a)|(ab),!,(2),&,(11),|,(12),高,低,优先级:,结合方向:,!,:,从右向左,&:,从左向右,|:,从左向右,例,a=4;b=5;,!a,a&b,a|b,!a|b,4&0|2,53&2|83)&2|(8b)&(n=cd),后,n,的值(),2,练习:,2.,设有:,main(),int,a=0,b=1;,a+,a+|b+;,求执行,后,a,b,的值(),a=2,b=1,五,.,条件运算符与表达式,一般形式:,expr1,?,expr2,:,expr3,执行过程,功能:相当于条件语句,但不能取代一般,if,语句,例,if(ab),printf(“%d”,a,);,else,printf(“%d”,b,);,printf(“%d”,a,b?a:b);,例 求,a+|b|,printf(“a+|b,|=%dn”,b0?a+b:a-b);,expr1,取,expr2,值,取,expr3,值,非0,=0,优先级,:13,结合方向:,自右向左,如,ab?a:cd?c:d,ab?a:(cd?c:d),
展开阅读全文