资源描述
单击此处编辑母版样式,单击此处编辑幻灯片母版样式,第二层,第三层,第四层,第五层,*,*,*,第三章,运算符和表达式,要求,熟练掌握运算符与表达式的基础知识;,熟练掌握算术运算符和算术表达式;,熟练掌握赋值运算;,熟练掌握关系运算符、逻辑运算符与逻辑表达式;,熟练掌握条件表达式与逗号表达式。,2,C,运,算,符,算术运算符:,+-*/,%,+,-,关系运算符:,=,!=,逻辑运算符:!,&|,位运算符 :,|,&,赋值运算符:,=,及其扩展,条件运算符:,?:,逗号运算符:,指针运算符:*,&,求字节数 :,sizeof,强制类型转换:(类型),分量运算符:,.-,下标运算符:,其它 :,()-,3,运算符功能,与运算量关系,要求运算量个数,要求运算量类型,运算符优先级别,结合方向,结果的类型,学习运算符应注意,4,运算符的优先级,(),-.,左右,!,+-+-(,类型,),sizeof,*&,右左,(,单目,),*/%,左右,+-,左右,=,+-,高 低,说明:,“,-”,为,单目,运算符时,右结合,两整数相除,结果为整数,%,要求两侧均为整型,数据,例,5/2 =,-5/2.0 =,例,5%2 =,-5%2 =,1%10 =,5%1 =,5.5%2,算术运算符和表达式,2,-2.5,1,-1,1,0,(,),6,例:求十位数上的数字,#include,main(),int a,b;,scanf(%d,b=a%100;,b=b/10;,printf(%d,b);,7,作用:使变量值加,1,或减,1,种类:,前置,+i,-i (,先执行,i+1,或,i-1,,,再使用,i,值),后置,i+,i-(,先使用,i,值,再执行,i+1,或,i-1,),例,j=3;k=+j;,j=3;k=j+;,j=3;,printf(%d,+j,);,j=3;,printf(%d,j,+);,a=3;b=5;c=(+a)*b;,a=3;b=5;c=(a+)*b;,/k=4,j=4,/k=3,j=4,/4,/3,/c=20,a=4,/c=15,a=4,自增、自减运算符,+-,8,说明:,+-,不能用于常量和表达式,如,5+,,,(a+b)+,+-,结合方向:,自右向左,优先级,:,-(,负号,),+-*/%-+-,高 低,例,-i+,-(i+),i=3;,printf(%d,-i,+);/-3,例,i=3;,printf(%d,-i,+);,(,j+)+k,;,j+k,;,9,例,3.1,#include,void main(),int a=2,b=2,x,y;,x=-a+2;/,前缀运算,y=b-+2;/,后缀运算,printf(x,=%d y=%,dn,x,y);,printf(a,=%d b=%,dn,a,b);,10,例,3.2,#include,void main(),int a=2,b=2,c;,c=+,a+b,-;,/,变量,a,为前缀运算,,b,为后缀运算,printf(a,=%,d,b,=%,d,c,=%,dn,a,b,c,);,a=b=2;,c=-a-b;,/,连续的,“,-”,表示前两个是对,a,的自减,最后的,“,-”,表示减法运算,printf(a,=%,d,b,=%,d,c,=%,dn,a,b,c,);,a=b=2;,printf(a,=%,dn,a,+);,printf(b,=%,dn,+b,);,c=,a+b,;/a,、,b,增,1,后的值参加运算,printf(c,=%,dn,c,);,11,简单赋值运算符,符号:,=,格式:,变量名,=,表达式,作用:将一个数据(常量或表达式)赋给一个变量,例,a=3;,c=a+2;,赋值运算符和表达式,12,结合方向:,自右向左,左侧必须是变量,不能是常量或表达式,赋值表达式的值与变量值相等,且可嵌套,赋值转换规则,:,使赋值号右边表达式值,自动,转换成其左边变量的类型,例,3=x-2*y;,a+b=3;,例,float f;,int i;,f=10.0f;,i=f;,则,i=10,例,int i;,i=2.56;/,结果,i=2;,例,:a=b=c=5,a=(b=5),a=5+(c=6),a=(b=4)+(c=6),a=(b=10)/(c=2),/,表达式值为,5,,,a,b,c,值为,5,/b=5;a=5,/,表达式值,11,,,c=6,a=11,/,表达式值,10,,,a=10,b=4,c=6,/,表达式值,5,,,a=5,b=10,c=2,简单赋值说明,13,复合赋值运算符,+=-=*=/=%=,=&=|=,含义:,变量名,运算符,=,表达式,变量名,=,变量名,运算符 表达式,a+=3,a=a+3,x*=y+8,x=x*(y+8),x%=3,x=x%3,14,结合方向:自右向左,左侧必须是变量,不能是常量或表达式,赋值表达式的值与变量值相等,且可嵌套,赋值转换规则,:,赋值号右边表达式值,自动,转换成其左边变量的类型,例,:a=12;,a+=a-=a*a;,例,:int a=2;,a%=4-1;,a+=a*=a-=a*=3;,/a=-264,等价于,a=a+(a=a-(a*a),/a=0,等价于,a=a+(a=a*(a=a-(a=a*3),复合赋值说明,15,例,3.3,#include,void main(),int a=5,b=5,c=5;,a-=2;/a=a-2;,b*=a+3;/b=b*(a+3);,c /=a-1;/c=c/(a-1);,printf(a,=%,d,b,=%,d,c,=%,dn,a,b,c,);,16,例,#include,main(),int,a,b,c,;,a=b=c=1;,a+=-,b-c,;,printf(a,=%,d,b,=%,d,c,=%,dn,a,b,c,);,17,形式:,表达式,1,表达式,2,表达式,n,结合性,:,从左向右,逗号表达式的值:等于表达式,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=1;b=2;c=3;,printf(%d,%d,%d,a,b,c,);,printf(%d,%d,%d,(a,b,c),b,c,);,/a=15,表达式值,60,/a=15,表达式值,20,/x=18,/,逗号表达式,表达式值,18,x=3,/1,2,3,/3,2,3,逗号运算符和表达式,18,例,:,#include,main(),int x,y=7;,float z=4;,x=(y=y+6,y/z);,printf(x,=%,dn,x,);,运行结果:,x=3,19,关系运算符,种类:,=!=,结合方向:,自左向右,=,=,!=,优先级(高),优先级(低),例,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,关系运算符和表达式,20,例 若,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,例,a 0,结果为,A 100,结果为,1,0,关系运算注意(,1,),21,例 注意区分,=,与,=,int a=0,b=1;,if(a,=,b),printf(a,equal to b);,else,printf(a,not equal to b);,例 应避免对,实数,作相等或不等的判断,如,1.0/3.0*3.0=1.0,结果为,可改写为:,fabs(1.0/3.0*3.0-1.0)1e-6,0,关系运算注意(,2,),22,a,b,!a,!b,a&b,a|b,真,假,真,假,假,假,真,真,逻辑运算符,种类:,!&|,逻辑运算真值表,C,语言中,运算量,:0,表示,“,假,”,,,非,0,表示,“,真,”,运算结果,:0,表示,“,假,”,,,1,表示,“,真,”,真,假,假,假,假,假,真,真,假,假,真,真,真,假,真,真,逻辑运算符和表达式(,1,),23,!,&,|,高,低,例,a=x&xb&xy,a=b|x=y,!a|ab,优先级:,结合方向:,!:,从右向左,&:,从左向右,|:,从左向右,/(a=x)&(xb)&(xy),/(a=b)|(x=y),/(!a)|(ab),逻辑运算符和表达式(,2,),24,例,a=4;b=5;,!a,a&b,a|b,!a|b,4&0|2,53&2|83)&2|(8,b)&(n,=cd),/,结果,m=0,n=1,26,一般形式:,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,b,0?a+b:a-b);,expr1,取,expr2,值,取,expr3,值,非,0,=0,例,(a=,b)?Y:N,(x%2=1)?1:0,(x=0)?x:-x,(c=a&c0?1:(xb?a:cd?c:d,ab?a:(cd?c:d),expr1,、,expr2,、,expr3,类型可不同,表达式值取较高的类型,例,x?a:b,/x=0,表达式值为,b;x0,表达式值为,a,xy?1:1.5 /xy ,值为,1.0;xy ,值为,1.5,条件运算符与表达式,27,0,1 11,11,11,11,11,11,11,int,型:,最大,:32767,1,0 00,00,00,00,00,00,00,最小,:-32768,11,11,11,11,11,11,11,11,unsigned int,型:,最大,:65535,00,00,00,00,00,00,00,00,最小,:0,简单补充:,int,和,unsigned int,28,数制,基,权,表示,数码,特点,10,,,10,,,10,,,十进制数,09,10,逢十进一,二进制数,01,2,2,,,2,,,2,,,逢二进一,八进制数,07,8,8,,,8,,,8,,,逢八进一,十六进制数,09,AF,af,16,16,,,16,,,16,,,逢十六进一,十进制:,4956=4,10+9,10+5,10+6,10,二进制:,1011=1,2+0,2+1,2+1,2,十六进制:,81AE=8,16+1,16+10,16+14,16,八进制:,4275=4,8+2,8+7,8+5,8,简单补充:进制,29,例 输入变量,a,、,b,、,c,,从大到小输出,#include,void main(),char,a,b,c,max,min,mid,;,scanf(%c%c%c,&a,&b,&c,);,max=a,b?a:b,;,max=,max,c?max:c,;,min=a,b?a:b,;,min=,min,c?min:c,;,mid=,a+b+c,-max-min;,printf(%c%c%c,max,mid,min,);,30,例 输入三个顶点坐标,输出三角形面积,#include,#include,float,len(float,a,float,b,float,c,float,d),return=,sqrt(a-c,)*(a-,c)+(b-d,)*(,b-d,);,void main(),float x1,x2,x3,y1,y2,y3,a,b,c,s,area;,scanf(%f%f%f%f%f%f,a=len(x1,y1,x2,y2);,b=len(x1,y1,x3,y3);,c=len(x3,y3,x2,y2);,s=(a+b+c)/2;,area=,sqrt(s,*(s-a)*(,s-b,)*(,s-c,);,printf(%ft%f,2*,s,area,);,31,例 输入半径,输入球的体积,#include,#define PI 3.14159,void main(),float radius,volume;,scanf(%f,&radius,);,volume=4.0/3*PI*radius*,radius,*,radius,;,printf(%.3f,volume);,32,例 输入数值,输出其绝对值,#include,void main(),float x;,scanf(%f,&x,);,printf(%f,x,0?-x:x);,33,练习:,1,、填空,C,程序都是从,函数开始执行。,C,程序的语句都是用,结束。,用来在屏幕上显示信息的库函数是,。,用来从键盘读取数据的库函数是,。,34,若,x,和,n,均是,int,型变量,且,x,和,n,的初值均为,5,,则计算表达式,x,=n,后,,x,的值为,,,n,的值为,。,若有定义:,int b=7;float a=2.5,c=4.7;,则以下表达式的值为,。,a+(int)(b/3*(int)(a+c)/2)%4,若,a,是,int,型变量,且,a=6,,则计算表达式,a+=a-=a*a,后,,a,的值为,。,假设所有变量均为整型,则表达式,(a=2,b=5,a+,b+,a+b),的值为,。,35,
展开阅读全文