《C语言基本运算符与表达式.ppt》由会员分享,可在线阅读,更多相关《C语言基本运算符与表达式.ppt(39页珍藏版)》请在人人文库网上搜索。
1、a,1,基本运算符和表达式,表达式 算术运算符和表达式 赋值运算符 不同数据类型间的转换 关系运算符和表达式 逻辑运算符和表达式 自增和自减运算符 逗号运算符和表达式 条件运算符和表达式 求字节运算符,a,2,学习重点,熟悉几种常用的运算符 掌握运算符的运算规则 3. 掌握表达式求值,a,3,3.1 表达式,一、 表达式的概念 表达式是由运算符连接常量、变量、函数所组成的式子。 每个表达式都有一个值和类型。,a,4,二、 运算符的种类:,据运算对象的个数分有三种: 单目、双目、三目,a,5,a,6,学习运算符应注意: 运算符功能 与运算量关系 要求运算量个数 要求运算量类型 运算符优先级别 结。
2、合方向 结果的类型,a,7,一、算术运算符: + - * / % 结合方向:从左向右 优先级: - -* / % - + - 说明: “-”可为单目运算符时,右结合性 两整数相除,结果为整数 %要求两侧均为整型数据,例 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 算术运算符和表达式,a,8,例1: #include”stdio.h” main() printf(nn%d,%dn,20/7,-20。
3、/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,a,9,3.3 赋值运算符 一、简单赋值运算符:= 格式: 变量=表达式 作用:将一个数据(常量或表达式)赋给一个变量,二、复合赋值运算符 种类:+= - = *= /= %=,x*=y+8,x=x*(y+8),例 a=3; d=func(); c=d+2;,a,10,说明: 结合方向:自右向左 左侧必须是变量,不能是常量或表达式 优先级:比算术低,例 3=x。
4、-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),a,11,例3: #include”stdio.h” main(。
5、) 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%6d%6d %6d %6d %6d n,a,b,c,d,z); ,结果: 106 47 -190 31 4,a,12,3.4 不同类型数据间的转换 转换有两种:,隐式:计算机自动进行的转换,显式:强制性转换,一、隐式转换(4种) 运算转换-不同类型数据混合运算时 赋值转换-把一个值赋给与其类型不同的变量时 输出转换-输出时转换成指定的输出格式 函数调用转换-实参与形参类型不一致时转换,a,13,(。
6、1) 运算转换:,不同类型数据运算时先自动转换成同一类型,数据类型的级别,a,14,转换规则: 当运算符两端的数据类型不同时,按“向高看齐”的原则,对较低的类型提升。,10+a +i*f - d / l,例 int i; float d,f; long l;,a,15,(2)赋值转换:自动将“=”右边的类型转换为左边变量的类型。,实整,舍弃小数。 例: int i; i=375.986;,i=375,intfloat,数值不变,但以浮点形式存到变量中。,例:float f; f=36;,f=36.000000,a,16, 字符 整型,将字符的ASCII码值放到整型量的低八位中,高八位为0。, 。
7、整型赋予字符型,只把低八位赋予字符变量。,例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); ,a,17, signedunsigned,原样照赋,例5 #include”stdio.h” main() unsigned int a; int b=-1; a=b; printf(“%u”,a); ,输出结果: 65535,C,a,18,二、显式转换(强制转换) 格式:(类型名)(表达式) 例 (i。
8、nt)(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,精度损失问题,a,19,例:,float f; f=6/7; 问:f=?,f=0.8571 f=0.0,改为:f=6.0/7 或 f=6/7.0或 f=(float)6/7,类型转换时,只赞成低高 不赞成高低 只赞成有符号数无符号数 不赞成无符号数有符号数,。
9、a,20,3.5 关系运算符和表达式 运算符: = = != 结合方向:自左向右 优先级别: = -= != 与其它比:算术关系赋值,例 ca+b /c(a+b) ab!=c /(ab)!=c 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,21,注意:,例 若a=0; b=0.5; x=0.3; 则 a=x=b的值为,0,例 5278在C中是允许的, 值为,0,例 int i=1, j=7,a; a=i+(j%4!=。
10、0); 则a=,2,例 a0 结果为 A100 结果为,1,0,a,22,例 注意区分“=”与“=” int a=0,b=1; if(a=b) printf(“a equal to b”); else printf(“a not equal to b”);,a,23,例7: #include”stdio.h” main() int x,y,z; printf(“input data x,y:n”); scanf(“%d%d”, ,a,24,结果1: input data x,y: 5 3 回车 x y xy x=y x!=y x=y 5 3 0 0 1 1 1 0,结果2:- input da。
11、ta x,y: -5 -3 回车 x y 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 x=y x!=y x=y 4 4 0 1 0 1 0 1,a,25,3.6 逻辑运算符和表达式 运算符:! b=5; !a ab=2;c=3;d=4;m=1;n=1; (m=ab) printf(“input data x,y:n”); scanf(“%d%d”, ,a,30,结果1: input data x,y: 12 8 回车 x y !x x|y x k=+j; j=3; k=j+; j=3; printf(。
12、“%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,a,33,说明: 不能用于常量和表达式,如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,。
13、b=%d”,a,b);,/a=6,b=6,a,34,例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,a,35,3.8 逗号运算符和表达式 形式:表达式1,表达式2,。
14、表达式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,a,36,例10: #include”stdio.h” main() int x,y=7; float z=4; x=(y=y+6,y/z); printf(x=%dn,x); ,运行结果:x=3,a,37,3.9 条件。
15、运算符与表达式 e1 ? e2 : e3 (唯一的三目运算符) 功能:e1为真,取e2值;e1为假,取e3值。 (相当于条件语句,但不能取代一般if语句),结合方向:自右向左 如 ab?a:cd?c:d ab?a:(cd?c:d),例 求 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 int i; i=sizeof(f); 则i的值将为4。,a,39,例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。