资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,C语言基本运算符与表达式,3.1,表达式,一、表达式的概念,表达式是由运算符连接常量、变量、函数所组成的式子。每个表达式都有一个值和类型。,二、运算符的种类:,据运算对象的个数分有三种:,单目、双目、三目,C,运,算,符,算术运算符:(,+-*/%+-,),关系运算符:(,=!=,),逻辑运算符:(!,&|,),位运算符 :(,|&,),赋值运算符:(,=,及其扩展),条件运算符:(,?:,),逗号运算符:(,),指针运算符:(*,&,),求字节数 :(,sizeof,),强制类型转换:(类型),分量运算符:(,.-,),下标运算符:(,),其它 :(,()-,),学习运算符应注意:,运算符功能,与运算量关系,要求运算量个数,要求运算量类型,运算符优先级别,结合方向,结果的类型,一、算术运算符:,+,-,*/%,结合方向:从左向右,优先级:,-,-,*/%,-,+-,说明:,“,-,”,可为,单目,运算符时,右结合性,两整数相除,结果为整数,%要求两侧均为整型数据,例,5/2 =,-5/2.0 =,例,5%2 =,-5%2 =,1%10 =,5%1 =,5.5%2,例,5/2 =,2,-5/2.0=,-2.5,例,5%2 =,1,-5%2 =,-1,1%10 =,1,5%1 =,0,5.5%2,(,),3.2,算术运算符和表达式,例1:,#include”stdio.h”,main(),printf(nn%d,%dn,20/7,-20/7);,printf(%f,%fn,20.0/7,-20.0/7);,结果:,2,,,-2,2.857143,,,-2.857143,例,2,:,#include”stdio.h”,main(),printf(%dn,100%3);,结果:,1,3.3,赋值运算符,一、简单赋值运算符:,=,格式:,变量,=,表达式,作用:将一个数据(常量或表达式)赋给一个变量,二、复合赋值运算符,种类,:,+=-=*=/=%=,a+=3,a=a+3,x*=y+8,x=x*(y+8),例,a=3;,d=func();,c=d+2;,a+=b,a=a+b,a-=b,a=a-b,a*=b,a=a*b,a/=b,a=a/b,a%=b,a=a%b,说明,:,结合方向:,自右向左,左侧必须是变量,不能是常量或表达式,优先级:比算术低,例,3=x-2*y;,a+b=3;,例,: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,例:,a=12;,a+=a-=a*a;,/a=-264,等价于,a=a+(a=a-(a*a),例,:int a=2;,a%=4-1;,a+=a*=a-=a*=3;,/a=0,等价于,a=a+(a=a*(a=a-(a=a*3),例,3,:,#include”stdio.h”,main(),int a,b,c,d,x,y,z;,a=100;b=45;c=-19;d=94;x=-2;y=5;z=28;,a+=6;b-=x;c*=10;,d/=x+y;z%=8;,printf(n%,6,d%,6,d%,6,d%,6,d,%6d,n,a,b,c,d,z,);,结果:,106 47 -190 31 4,3.4,不同类型数据间的转换,转换有两种:,隐式:计算机自动进行的转换,显式:强制性转换,一、隐式转换(,4,种),运算转换,-,不同类型数据混合运算时,赋值转换,-,把一个值赋给与其类型不同的变量时,输出转换,-,输出时转换成指定的输出格式,函数调用转换,-,实参与形参类型不一致时转换,(,1,),运算转换,:,不同类型数据运算时先,自动,转换成同一类型,数据类型的级别,float,long,int,bit,char,低,高,unsigned,signed,转换规则:,当运算符两端的数据类型不同时,按“向高看齐”的原则,对较低的类型提升。,10+a +i*f -d/l,例,int i;,float d,f;,long l;,int,int,float,float,float,float,float,float,(,2,)赋值转换:,自动将“,=,”,右边的类型转换为左边变量的类型。,实,整,舍弃小数。,例:,int i;,i=375.986;,i=375,int,float,数值不变,但以浮点形式存到变量中。,例:,float f;,f=36;,f=36.000000,字符 整型,将字符的,ASCII,码值放到整型量的低八位中,高八位为,0,。,整型赋予字符型,只把低八位赋予字符变量。,例,4,:,#include”stdio.h”,main(),int a,b=322,i;,float x,y=8.88;,char c1=k,c2;,a=y;x=b;,i=c1;c2=b;,printf(%d,%f,%d,%c,a,x,i,c2);,signed,unsigned,原样照赋,例,5,#include”stdio.h”,main(),unsigned int a;,int b=-1;,a=b;,printf(“%u”,a);,输出结果:,65535,C,二、显式转换(强制转换),格式:,(,类型名,),(,表达式),例,(int)(x+y),(int)x+y,(float)(3/2),(int)3.6,说明:强制转换得到所需类型的中间变量,原变量类型不变,例,6,#include”stdio.h”,main(),float x;,int i;,x=3.6;,i=(int)x;,printf(“x=%f,i=%d”,x,i);,结果:,x=3.600000,i=3,精度损失问题,较高类型向较低类型转换时可能发生,例:,float f;,f=6/7;,问:,f=?,f=0.8571,f=0.0,改为:,f=6.0/7,或,f=6/7.0,或,f=(float)6/7,类型转换时,只赞成低,高,不赞成高低,只赞成有符号数无符号数,不赞成无符号数有符号数,3.5,关系运算符和表达式,运算符:,=!=,结合方向:自左向右,优先级别:,=,-,=!=,与其它比:算术,关系,赋值,例,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,注意:,例 若,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,例,注意区分“,=,”,与“,=,”,int a=0,b=1;,if(a,=,b),printf(“a equal to b”);,else,printf(“a not equal to b”);,例,7,:,#include”stdio.h”,main(),int x,y,z;,printf(“input data x,y:n”);,scanf(“%d%d”,printf(“n x y xy x=y x!=y x=y”);,printf(“n%5d%5d”,x,y);,z=xy;printf(“%5d”,z);,z=xy;printf(“%5d”,z);,z=x=y;printf(“%5d”,z);,z=x!=y;printf(“%5d”,z);,z=x=y;printf(“%5d”,z);,printf(“n”);,结果,1,:,input data x,y:,5 3,回车,x,y,xy,xy,x=y x!=y,x=y,5,3,0,0,1,1 1 0,结果,2,:,-,input data x,y:,-5 -3,回车,x,y,xy,xy,x=y x!=y,x=y,-5,-3,1,1,0,0 1 0,结果,1,:,input data x,y:,4 4,回车,x,y,xy,xy,x=y x!=y,x=y,4,4,0,1,0,1 0 1,a,b,!a,!b,a&b,a|b,真,假,真,假,假,假,真,真,3.6,逻辑运算符和表达式,运算符:,!&|,逻辑运算真值表,运算量:,0(假),非0(真),表达式值:,0(假),1,(真),真,假,假,假,假,假,真,真,假,假,真,真,真,假,真,真,例,a=x&xb&xy,a=b|x=y,!a|ab,优先级:,结合方向:,!,:,右,左,&:,左,右,|:,左,右,/(a=x)&(xb)&(xy),/(a=b)|(x=y),/(!a)|(ab),与其它比:单目,算术,关系,逻辑,赋值,!,&|,例,a=4;b=5;,!a,a&b,a|b,!a|b,4&0|2,53&2|8b)&(n=cd),求,m=?n=?,/m=0,n=1,例,a&b&c,/,只在,a,为真时,才判别,b,的值;,只在,a,、,b,都为真时,才判别,c,的值,或表达式遇真结束,例,a|b|c,/,只在,a,为假时,才判别,b,的值;,只在,a,、,b,都为假时,才判别,c,的值,例,8,:,#include”stdio.h”,main(),int x,y,z;,printf(“input data x,y:n”);,scanf(“%d%d”,printf(“n x y !x x|y x,printf(“n%5d%5d”,x,y);,z=!x;printf(“%8d”,z);,z=x|y;printf(“%8d”,z);,z=x,printf(“n”);,结果,1,:,input data x,y:,12 8,回车,x,y,!x,x|y,x&y,12,8,0,1,1,结果,2,:,input data x,y:,9 -3,回车,x,y,!x,x|y,x&y,9,-3,0,1,1,结果,3,:,input data x,y:,0 81,回车,x,y,!x,x|y,x&y,0,8,1,1,0,结果,4,:,input data x,y:,-23 0,回车,x,y,!x,x|y,x&y,-23,0,0,1,10,结果,5,:,input data x,y:,0 0,回车,x,y,!x,x|y,x&y,0,0,1,0,0,3.7,自增、自减运算符:,+-,作用:使变量值加,1,或减,1,i+,或,+i,i=i+1,i-,或,-i,i=i-1,种类:,前缀:,+i,-i,先增1,(,减,1,),,再使用,i,值,后缀:,i+,i-,先使用,i,值,再增1,(,减,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,说明:,不能用于常量和表达式,如,5+,(,a+b)+,结合方向:,自右向左,优先级:-,+-,-*/%-+-,例-,i+,-(i+),i=3;printf(,“,%d,”,-i+);,/-3,例,int a=5,b;,b=a+;,printf(“a=%d,b=%d”,a,b);,/a=6,b=5,例,int a=5,b;,b=+a;,printf(“a=%d,b=%d”,a,b);,/a=6,b=6,例,9,:,#include”stdio.h”,main(),int x,y,z;,x=y=8;z=+x;,printf(“n%3d%3d%3d”,y,z,x);,x=y=8;z=x+;,printf(“n%3d%3d%3d”,y,z,x);,x=y=8;z=-x;,printf(“n%3d%3d%3d”,y,z,x);,x=y=8;z=x-;,printf(“n%3d%3d%3d”,y,z,x);,printf(“n”);,结果:,8 9 9,8 8 9,8 7 7,8 8 7,3.8,逗号运算符和表达式,形式:,表达式,1,表达式,2,表达式,n,结合性,:,从左向右,优先级,:,最低,表达式,值:等于表达式,n,的值,用途:,常用于循环,for,语句中,例,a=3*5,a*4,a=3*5,a*4,a+5,例,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,/1,2,3,/3,2,3,例,10:,#include”stdio.h”,main(),int x,y=7;,float z=4;,x=(y=y+6,y/z);,printf(x=%dn,x);,运行结果:,x=3,3.9,条件运算符与表达式,e1,?,e2,:,e3 (,唯一的三目运算符),功能:,e1,为真,取,e2,值;,e1,为假,取,e3,值。,(相当于条件语句,但不能取代一般,if,语句),结合方向:,自右向左,如,ab?a:cd?c:d,ab?a:(cd?c:d),例,if(ab),printf(“%d”,a);,else,printf(“%d”,b);,printf(“%d”,ab?a:b,);,例 求,a+|b|,printf(“a+|b|=%dn”,b0?a+b:a-b,);,例,(a=b)?Y:N,(x%2=1)?1:0,(x=0)?x:-x,(c=a&c=z)?c-a+A:c,3.10,求字节运算符,sizeof,单目运算符,作用:返回变量或类型的字节长度。,一般形式为:,sizeof(,变量或类型,),如,:,sizeof(double),为,8,sizeof(int),为,2,也可以求已定义的变量,例如,:,float f;int i;,i=sizeof(f);,则,i,的值将为,4,。,例,11:,#include”stdio.h”,#include,main(),printf(“n char:%5d byte,sizeof(char);,printf(“n int:%5d bytes,sizeof(int);,printf(“n long:%5d byte,sizeof(long);,printf(“n float:%5d byte,sizeof(float);,运行结果:,char 1 byte,Int 2 bytes,long 4 bytes,float 4 bytes,此课件下载可自行编辑修改,仅供参考!感谢您的支持,我们努力做得更好!谢谢,
展开阅读全文