C语言基本运算符与表达式_第1页
C语言基本运算符与表达式_第2页
C语言基本运算符与表达式_第3页
C语言基本运算符与表达式_第4页
C语言基本运算符与表达式_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 基本运算符和表达式基本运算符和表达式表达式表达式算术运算符和表达式算术运算符和表达式赋值运算符赋值运算符不同数据类型间的转换不同数据类型间的转换关系运算符和表达式关系运算符和表达式逻辑运算符和表达式逻辑运算符和表达式自增和自减运算符自增和自减运算符逗号运算符和表达式逗号运算符和表达式条件运算符和表达式条件运算符和表达式求字节运算符求字节运算符 学习重点学习重点1.熟悉几种常用的运算符熟悉几种常用的运算符2.掌握运算符的运算规则掌握运算符的运算规则3. 掌握表达式求值掌握表达式求值 3.1 表达式表达式一、一、 表达式的概念表达式的概念 表达式是由运算符连接常量、变量、函表达式是由运算符连接常

2、量、变量、函数所组成的式子。数所组成的式子。 每个表达式都有一个值每个表达式都有一个值和类型。和类型。二、二、 运算符的种类:运算符的种类:据运算对象的个数分有三种:据运算对象的个数分有三种: 单目、双目、三目单目、双目、三目C运运算算符符算术运算符:(算术运算符:(+ - + - * * / % + - / % + -)关系运算符:(关系运算符:( = != = !=)逻辑运算符:(!逻辑运算符:(! & |& |)位运算符位运算符 :(:( | & | &)赋值运算符:(赋值运算符:(= = 及其扩展)及其扩展)条件运算符:(条件运算符:(?:?:)逗号运算

3、符:(逗号运算符:(, ,)指针运算符:(指针运算符:(* * & &)求字节数求字节数 :(:(sizeofsizeof)强制类型转换:(类型)强制类型转换:(类型)分量运算符:(分量运算符:(. -. -)下标运算符:(下标运算符:()其它其它 :(:(( ) -( ) -)学习运算符应注意:学习运算符应注意:运算符功能运算符功能与运算量关系与运算量关系要求运算量个数要求运算量个数要求运算量类型要求运算量类型运算符优先级别运算符优先级别结合方向结合方向结果的类型结果的类型一、算术运算符:一、算术运算符: + + - - * * / % / %结合方向:从左向右结合方向:从左

4、向右优先级:优先级: - - - -* * / % / % - - + -+ -说明:说明:“- -”可为可为单目单目运算符时运算符时, ,右结合性右结合性两整数相除,结果为整数两整数相除,结果为整数% %要求两侧均为整型数据要求两侧均为整型数据例例 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

5、(nn%d,%dn,20/7,-20/7);printf(%f,%fn,20.0/7,-20.0/7);结果:结果:2,-22.857143,-2.857143例例2: #include”stdio.h”main() printf(%dn,100%3); 结果:结果:13.33.3 赋值运算符赋值运算符一、简单赋值运算符:一、简单赋值运算符:= 格式:格式: 变量变量=表达式表达式 作用:将一个数据(常量或表达式)赋给一个变量作用:将一个数据(常量或表达式)赋给一个变量 二、复合赋值运算符二、复合赋值运算符种类种类:+= - = *= /= %= a+=3a=a+3x*=y+8x=x*(y+8

6、)例例 a=3;a=3; d= d=funcfunc();(); c=d+2; c=d+2;a+=ba=a+ba-=ba=a-ba*=ba=a*ba/=ba=a/ba%=ba=a%b 说明说明: :结合方向:结合方向:自右向左自右向左左侧必须是变量,不能是常量或表达式左侧必须是变量,不能是常量或表达式优先级:比算术低优先级:比算术低例例 3=x-23=x-2* *y;y; a+ba+b=3;=3; 例例: a=b=c=5: a=b=c=5 a=(b=5) a=(b=5) a=5+(c=6) a=5+(c=6) a=(b=4)+(c=6) a=(b=4)+(c=6) a=(b=10)/(c=2)

7、 a=(b=10)/(c=2)/表达式值为表达式值为5 5,a,b,ca,b,c值为值为5 5/ b=5;a=5/ b=5;a=5/表达式值表达式值1111,c=6,a=11c=6,a=11/表达式值表达式值1010,a=10,b=4,c=6a=10,b=4,c=6/表达式值表达式值5 5,a=5,b=10,c=2a=5,b=10,c=2例例: : a=12; a=12; a+=a-=a a+=a-=a* *a;a;/a=-264 /a=-264 等价于等价于a=a=a+(aa+(a=a-(a=a-(a* *a)a)例例: : intint a=2; a=2; a%=4-1; a%=4-1;

8、a+=a a+=a* *=a-=a=a-=a* *=3;=3; /a=0 /a=0 等价于等价于a=a=a+(aa+(a=a=a* *(a=a-(a=a(a=a-(a=a* *3)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%6d%6d %6d %6d %6d n,a,b,c,d,z);结果:结果: 106 47 -190 31 43.4 不同类型数据间的转换不同类型数据间的转换转换有两种

9、:转换有两种:隐式:计算机自动进行的转换隐式:计算机自动进行的转换显式:强制性转换显式:强制性转换一、隐式转换(一、隐式转换(4 4种)种)v运算转换运算转换-不同类型数据混合运算时不同类型数据混合运算时v赋值转换赋值转换-把一个值赋给与其类型不同的变量时把一个值赋给与其类型不同的变量时v输出转换输出转换-输出时转换成指定的输出格式输出时转换成指定的输出格式v函数调用转换函数调用转换-实参与形参类型不一致时转换实参与形参类型不一致时转换(1) 运算转换运算转换: :不同类型数据运算时先不同类型数据运算时先自动自动转换成同一类型转换成同一类型数据类型的级别数据类型的级别floatlongintb

10、itchar低低高高unsignedsigned转换规则:转换规则:当运算符两端的数据类型不同时,按当运算符两端的数据类型不同时,按“向高看向高看齐齐”的原则,对较低的类型提升。的原则,对较低的类型提升。10+a +i*f - d / l例例 int i; float d,f; long l;intintfloatfloatfloatfloatfloatfloat(2)赋值转换:)赋值转换:自动将自动将“=”右边的类型转换右边的类型转换为左边变量的类型。为左边变量的类型。实实整,舍弃小数。整,舍弃小数。例:例: int i; i=375.986; i=375intfloat,数值不变,但以浮点

11、形式存到变量中数值不变,但以浮点形式存到变量中。例:例:float f; f=36; f=36.000000 字符字符 整型,将字符的整型,将字符的ASCII码值放到整型码值放到整型量的低八位中,高八位为量的低八位中,高八位为0。 整型赋予字符型,只把低八位赋予字符变量。整型赋予字符型,只把低八位赋予字符变量。例例4 4:#include”stdio.h”main()main() intint a,ba,b=322,i;=322,i;float float x,yx,y=8.88;=8.88;char c1=k,c2;char c1=k,c2;a=y; x=b;a=y; x=b;i=c1; c

12、2=b;i=c1; c2=b;printf(%d,%f,%d,%c,a,x,i,c2);printf(%d,%f,%d,%c,a,x,i,c2); signedunsigned,原样照赋原样照赋例例5 #include”stdio.h” main() unsigned int a; int b=-1; a=b; printf(“%u”,a); 输出结果:输出结果:65535C二、显式转换(强制转换)二、显式转换(强制转换) 格式:格式:(类型名类型名)(表达式)表达式)例例 ( (int)(x+yint)(x+y) ) ( (int)x+yint)x+y (float)(3/2) (float

13、)(3/2) (int)3.6 (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精度损失问题精度损失问题较高类型向较低类型转换时可能发生较高类型向较低类型转换时可能发生v例:例: float f; f=6/7;问:问:f=? f=0.8571 f=0.0 改为:改为:f=6.0/7 或或 f=6/7.0或或

14、f=(float)6/7v类型转换时,只赞成低类型转换时,只赞成低高高 不赞成高不赞成高低低 只赞成有符号数只赞成有符号数无符号数无符号数 不赞成无符号数不赞成无符号数有符号数有符号数3.5 关系运算符和表达式关系运算符和表达式l运算符:运算符: = = !=l结合方向:自左向右结合方向:自左向右l优先级别:优先级别: = -= !=l与其它比:算术与其它比:算术关系关系赋值赋值例例 cca+ba+b /c( /c(a+ba+b) ) ab!=c /(ab)!=c ab!=c /(ab)!=c a=bc /a=(bc) a=bc /a=(bc /a=(bc) a=bc /a=(bc)l关系表达

15、式的值:是逻辑值,关系表达式的值:是逻辑值,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 结果为结果为10例例 注意区分注意区分“=”与与“=” int a=0,b=1; if(a=b) printf(“a equal to

16、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”,&x,&y); printf(“n x y xy 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

17、”,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 1ab!a!ba&ba|b真真假假真真假假假假假假真真真真3.6 逻辑运算符和表达式逻辑运算符和表达式l运算符:运算符:! & |l

18、逻辑运算真值表逻辑运算真值表 运算量运算量: : 0 0(假)(假) 非非0 0(真)(真) 表达式值表达式值: : 0 0(假)(假) 1 1(真)(真) 真假假假假假真真假假真真真假真真例例 a=x & xb&xy a=b|x=y !a|abl优先级:优先级:l结合方向:结合方向:! : 右右左左& : 左左右右| : 左左右右/ (a=x) & (xb)&(xy)/(a=b)|(x=y)/(!a)|(ab)l与其它比:单目与其它比:单目算术算术关系关系逻辑逻辑赋值赋值!&|例例 a=4;b=5; !a a&b a|b !a|b 4&

19、amp;0|2 53&2|8b)&(n=cd)求求 m=? n=?/m=0,n=1例例 a&b&c /只在只在a为真时,才判别为真时,才判别b的值;的值; 只在只在a、b都为真时,才判别都为真时,才判别 c的值的值v或表达式遇真结束或表达式遇真结束例例 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”,&x,&y)

20、; printf(“n x y !x x|y x&y”); printf(“n%5d%5d”,x,y); z=!x;printf(“%8d”,z); z=x|y;printf(“%8d”,z); z=x&y;printf(“%8d”,z); 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

21、 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 自增、自减运算符:自增、自减运算符:+ -l作用:使变量值加作用:使变量值加1 1或减或减1 1 i+ 或或 +i i=i+1 i- 或或 - i i=i-1l种类:种类:前缀:前缀:+i, - - i 先增先增1 1( (减减1 1),),再使用再使用i i值值后缀:后缀:i+ , i- - 先使

22、用先使用i i值值, ,再增再增1 1( (减减1 1)例例 j=3; k=+j; j=3; k=+j; j=3; k=j+; j=3; k=j+; j=3; j=3; printf(printf(“%d%d”,+j,+j); ); j=3; j=3; printf(printf(“%d%d”,j,j+); +); a=3;b=5;c=(+a) a=3;b=5;c=(+a)* *b; b; a=3;b=5;c=(a+) a=3;b=5;c=(a+)* *b;b; /k=4,j=4/k=4,j=4/k=3,j=4/k=3,j=4/4/4/3/3/c=20,a=4/c=20,a=4/c=15,a=

23、4/c=15,a=4l说明:说明:不能用于常量和表达式不能用于常量和表达式, ,如如5+5+,( (a+ba+b)+)+结合方向:结合方向: 自右向左自右向左优先级:优先级:- - + -+ - - -* * / % -+ - / % -+ - 例例 - -i+ i+ -(i+) -(i+) i=3; i=3; printf(printf(“%d%d”,-i,-i+); +); /-3/-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

24、=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); p

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论