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

下载本文档

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

文档简介

1、2021/3/111 基本运算符和表达式基本运算符和表达式 表达式表达式 算术运算符和表达式算术运算符和表达式 赋值运算符赋值运算符 不同数据类型间的转换不同数据类型间的转换 关系运算符和表达式关系运算符和表达式 逻辑运算符和表达式逻辑运算符和表达式 自增和自减运算符自增和自减运算符 逗号运算符和表达式逗号运算符和表达式 条件运算符和表达式条件运算符和表达式 求字节运算符求字节运算符 2021/3/112 学习重点学习重点 熟悉几种常用的运算符熟悉几种常用的运算符 掌握运算符的运算规则掌握运算符的运算规则 3. 掌握表达式求值掌握表达式求值 2021/3/113 3.1 表达式表达式 一、一、

2、 表达式的概念表达式的概念 表达式是由运算符连接常量、变量、函表达式是由运算符连接常量、变量、函 数所组成的式子。数所组成的式子。 每个表达式都有一个值每个表达式都有一个值 和类型。和类型。 2021/3/114 二、二、 运算符的种类:运算符的种类: 据运算对象的个数分有三种:据运算对象的个数分有三种: 单目、双目、三目单目、双目、三目 2021/3/115 C 运运 算算 符符 算术运算符:(算术运算符:(+ - + - * * / % + - / % + -) 关系运算符:(关系运算符:( = != = !=) 逻辑运算符:(!逻辑运算符:(! printf(%f,%fn,20.0/7,

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

4、; d=func(); c=d+2; c=d+2; a+=ba=a+b a-=ba=a-b a*=ba=a*b a/=ba=a/b a%=ba=a%b 2021/3/1110 说明说明: : 结合方向:结合方向:自右向左自右向左 左侧必须是变量,不能是常量或表达式左侧必须是变量,不能是常量或表达式 优先级:比算术低优先级:比算术低 例例 3=x-23=x-2* *y;y; a+b=3;a+b=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)

5、 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=a-(aa=a+(a=a-(a* *a)a) 例例: int a=2; : int a=2; a%=4-1;

6、a%=4-1; 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) 2021/3/1111 例例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 4 202

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

8、据运算时先不同类型数据运算时先自动自动转换成同一类型转换成同一类型 数据类型的级别数据类型的级别 float long int bit char 低低 高高 unsigned signed 2021/3/1114 转换规则:转换规则: 当运算符两端的数据类型不同时,按当运算符两端的数据类型不同时,按“向高看向高看 齐齐”的原则,对较低的类型提升。的原则,对较低的类型提升。 10+a +i*f - d / l 例例 int i; float d,f; long l; int int float float float float float float 2021/3/1115 (2)赋值转换:)

9、赋值转换:自动将自动将“=”右边的类型转换右边的类型转换 为左边变量的类型。为左边变量的类型。 实实整,舍弃小数。整,舍弃小数。 例:例: int i; i=375.986; i=375 intfloat,数值不变,但以浮点形式存到变量中数值不变,但以浮点形式存到变量中 。 例:例:float f; f=36; f=36.000000 2021/3/1116 字符字符 整型,将字符的整型,将字符的ASCII码值放到整型码值放到整型 量的低八位中,高八位为量的低八位中,高八位为0。 整型赋予字符型,只把低八位赋予字符变量。整型赋予字符型,只把低八位赋予字符变量。 例例4 4: #include”

10、stdio.h” main()main() int a,b=322,i;int a,b=322,i; float x,y=8.88;float x,y=8.88; char c1=k,c2;char c1=k,c2; a=y; x=b;a=y; x=b; i=c1; c2=b;i=c1; c2=b; printf(%d,%f,%d,%c,a,x,i,c2);printf(%d,%f,%d,%c,a,x,i,c2); 2021/3/1117 signedunsigned,原样照赋原样照赋 例例5 #include”stdio.h” main() unsigned int a; int b=-1;

11、 a=b; printf(“%u”,a); 输出结果:输出结果: 65535 C 2021/3/1118 二、显式转换(强制转换)二、显式转换(强制转换) 格式:格式:(类型名类型名)(表达式)表达式) 例例 (int)(x+y)(int)(x+y) (int)x+y (int)x+y (float)(3/2) (float)(3/2) (int)3.6 (int)3.6 说明:强制转换得到所需类型的中间变量,说明:强制转换得到所需类型的中间变量, 原变量类型不变原变量类型不变 例例6 #include”stdio.h” main() float x; int i; x=3.6; i=(int

12、)x; printf(“x=%f,i=%d”,x,i); 结果:结果:x=3.600000,i=3 精度损失问题精度损失问题 较高类型向较低类型转换时可能发生较高类型向较低类型转换时可能发生 2021/3/1119 v例:例: float f; f=6/7; 问:问:f=? f=0.8571 f=0.0 改为:改为:f=6.0/7 或或 f=6/7.0或或 f=(float)6/7 v类型转换时,只赞成低类型转换时,只赞成低高高 不赞成高不赞成高低低 只赞成有符号数只赞成有符号数无符号数无符号数 不赞成无符号数不赞成无符号数有符号数有符号数 2021/3/1120 3.5 关系运算符和表达式关

13、系运算符和表达式 l运算符:运算符: = = != l结合方向:自左向右结合方向:自左向右 l优先级别:优先级别: = -= != l与其它比:算术与其它比:算术关系关系赋值赋值 例例 ca+b /c(a+b)ca+b /c(a+b) ab!=c /(ab)!=c ab!=c /(ab)!=c a=bc /a=(bc) a=bc /a=(bc /a=(bc) a=bc /a=(bc) l关系表达式的值:是逻辑值,关系表达式的值:是逻辑值,1(真真) 0(假假) 例例 int a=3,b=2,c=1,d,f; ab (ab)=c b+cb f=abc /表达式值表达式值1 /表达式值表达式值1

14、/表达式值表达式值0 /d=1 /f=0 2021/3/1121 注意:注意: 例例 若若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 2021/3/1122 例例 注意区分注意区分“=”与与“=” int a=0,b=1; if(a=b) printf(“a equal to b”); else printf(“a not equal to b”); 2021/3/1123 例例7: #include”

15、stdio.h” main() int x,y,z; printf(“input data x,y:n”); scanf(“%d%d”, 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”,z); printf(“n”); 2021/3/1124 结果结果1: input data x,y: 5 3 回车回车 x

16、 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 2021/3/1125 ab!a!bab=5; !a a printf(“input data x,y:n”); scanf(“%d%d”, printf(“n x y !x x|y x printf(“n%5d%5d”,x,y)

17、; z=!x;printf(“%8d”,z); z=x|y;printf(“%8d”,z); z=xprintf(“%8d”,z); printf(“n”); 2021/3/1130 结果结果1: input data x,y: 12 8 回车回车 x y !x x|y x k=+j; j=3; k=+j; j=3; k=j+; j=3; k=j+; j=3; printf( j=3; printf(“%d%d”,+j); ,+j); j=3; printf( j=3; printf(“%d%d”,j+); ,j+); a=3;b=5;c=(+a) a=3;b=5;c=(+a)* *b; b;

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

19、%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=6 2021/3/1134 例例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

20、,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 2021/3/1135 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 2021/3/1136 例例10: #include”stdio.h” main() int x,y=7; float z=4; x=(y=y+6,y/z); prin

温馨提示

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

评论

0/150

提交评论