算术运算符与算术表达式.ppt_第1页
算术运算符与算术表达式.ppt_第2页
算术运算符与算术表达式.ppt_第3页
算术运算符与算术表达式.ppt_第4页
算术运算符与算术表达式.ppt_第5页
免费预览已结束,剩余29页可下载查看

下载本文档

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

文档简介

3.7 算术运算符与 算术表达式,运算符: 运算的符号表示。 c语言有丰富的运算功能,先简述之,3.7.1. c运算符(共有13类),1. 算术运算符 +, , , /, % , 等,3. 逻辑运算符 !, &, ,2. 关系运算符 , =, =, !=,4. 位运算符 , , , , &.,5. 赋值运算符 =,6. 条件运算符 ?,7. 逗号运算符 ,8. 指针运算符 *, &,11. 分量运算符 , ,12. 下标运算符 ,13. 其它运算符 如函数的调用( ),9. 求字节数运算符 size of,10. 强制类型转换运算符 (类型),3.7.2 算术运算符和算术表达式,一、基本算术运算符,+ 加法,正值。 如: 3+6, +3, 减法,负值。 如: 6 4, 5, 乘法。 如: 38,/ 除法。 如: 8 / 5,% 求余。 如: 7 % 4 的值为3,注: 两个整型数据相除 (结果取整)。 5/ 3 1 使用时千万注意 int / int 可能会出现数据丢失。,运算中,有一个 float, 则结果为double型。,二、算术表达式及算术运算符的优先级与结合性,运算对象: 常量、变量、函数等,优先级: ( ), , /, %, +, ,算术表达式: 用算术运算符和括号将运算对象连接起来,且符合c语法规则的式子。,运算结合方向:1. 自左向右,为左结合性。 2. 自右向左,为右结合性。,提示:关于运算符的优先级和结合方向详见附录三。,若在运算量的两侧的运算符有相同的优先级,则按它们的结合方向顺序处理。,三、可利用强制类型转换运算符将一个算术表达式转换为所需类型,形式: (类型名) (表达式),例如: (double) a 将a转换为double,(int) (x+y) 将x+y转换为int,(float) (5%3) 将5%3转换为float,注: 1. 括号不能省略。 否则: intx 会理解为变量intx.,又如: (int) (x+y) 若省略: (int)x+y会变成只将x转成整型.,2. 转换后的类型数据由系统分配一个中间变量存放,而原变量类型不变。 若有: float x;,则: (int)x; x本身仍为实型,而(int)x由一个中间变量(整) 存放x的整数部分。,例: /*exp7.c*/ #include main( ) float x,y; int m,n; x=3.6; m=36; n=(int)x; y=(float)m; printf(“x=%f,y=%f,m=%d,n=%dn“,x,y,m,n); ,运行结果: x=3.600000,y=36.000000,m=36,n=3,总结以上类型转换,有二种: 1. 强制,另: 强制类型转换运算优先于算术运算符.,2. 系统自动,如: 若x为float, 则x%3不合法。 但可用(int)x%3来解决。(附录iii介绍了优先级),四、自增,自减运算符,例如: 若有: int i = 3;,+ + 自增1, 自减1,+i: 先使i值+1,再使用i值;,i+: 先使用i值,再使i值+1.,则: j= +i; 结果为: j=4, i=4. 相当于 i=i+1; j=i;,则: j=i+; 结果为: j=3, i=4. 相当于 j=i; i=i+1,同理: i, i ,均使i值1,但:, i: 先使i值1,再使用i值;,i : 先使用i值,再使i值1,例如: int i = 3 , j;,则: j= i; 结果为: j=2, i=2. 相当于 i=i1; j=i;,则: j=i ; 结果为: j=3, i=2. 相当于 j=i; i=i1;,1. +和 运算法只能用于变量,不得用于常量和表达式.,如 5+ +, (a+b)+ +均为不合法.,几点注意:,2. +, ,的结合性为从右至左,而一般算术运算符为从左至右。如:,i+ “和“+ +“为同一优先级.,i+相当于(i+),例: /*exp9.c*/ #include main( ) int i=3,j; j=-i+; printf(“i=%d,j=%dn“,i,j); ,运行结果:i=4,j= -3,1. 要慎用+、 运算符。,五、有关表达式使用中的问题说明,对于表达式(i+)+(i+)+(i+) ; 我们可能会认为应从左至右: 3+4+5=12,但turbo c. msc 都是先取三个原值,例:/*exp8.c*/ #include main( ) int i=3,j; j=(i+)+(i+)+(i+); printf(“i=%d,j=%dn“,i,j); ,实际运行结果:i=6,j=9,解释:先对i进行3次自加,为6,然后三个i相 加为18,而i为6。,相加: i+i+i=9 i6,如果表达式j=(i+)+(i+)+(i+);改为: j=(+i)+(+i)+(+i);,则运行结果: i=6,j=18,2. 在表达式中,有的运算符为一个字符,有的为两个字符。,一般地: 自左至右尽可能多地将若干字符组成一个运算符。,如: i+j, 究竟理解为(i+)+j还是i+(+j)?,例: /*exp1.c*/ #include main( ) int i=3,j=3,m; m=i+j; printf(“i=%d,j=%d,m=%dn“,i,j,m); ,运行结果:i=4,j=3,m=6,3. 在函数调用时,如:,printf(“%d, %d“, i, i+);,若i=3, 若参数计算从左至右, 则输出 3, 3,若从右至左, 则输出4, 3,上述问题看似复杂,最好上机实践.,3.8 赋值运算符和 赋值表达式,符号“ = “为赋值运算符。,2. 整型数据赋给实型变量,数值不变,但按实数形式存放.,1. 将实型数据(无论单,双精度)赋给整型变量时,舍弃小数.,赋值时,两边类型若不一致,则按以下规则转换:,4. 将intlong int, 进行符号扩展。 即: 符号扩展, 低16位long 的低16位。,5. long int int 则高16位截断。,3. 字符型数据赋给整型变量时:,(2)字符带符号整型变量,则字符高位扩展。,(1)字符无符号整型变量,则存入低8位,高8位补零。,6. 将unsigned int 型long int高位补0。,而位数相同部分赋值 unsigned int int unsigned long long unsigned short short,原值传送,但数据大小不能超值。 如: unsigned int a=65535; int b; b=a; 则越界。,7. 非unsigned 型转换成长度相同的unsigned型数据,原样传送(包括符号位),一、复合赋值运算符:在“ “号之前加一个其它运算符。,c语言规定:凡是二目运算符均可构成复合运算符。,例: a+=3; 相当于 a=a+3 x=y+8; 相当于 x=x (y+8) x%=3; 相当于x=x% 3,一般形式: ,二、赋值表达式,例: x=10 为一赋值表达式 其中又可以是一个赋值表达式。,例: x=(y=10) 相当于 y=10;x=y 由于赋值号为右结合性,于是“ ( ) “可省略, 即为:x=y=10;,例: a + = a =aa (设a12),又: a=5+(c=6) c=6, a=11 a=(b=4)+(c=6) b=4, c=6, a=10 a=(b=10)/ (c=2)b=10,c=2, a=5,进一步,还可用复合赋值运算符作下列运算:,步骤: aa144. a =a a a=a a a=12 144= 132 a + = 132 a = a+(132) = 264,3.9 逗号运算符和逗号表达式,一般形式: 表达式1, 表达式2,其计算规则: 先计算表达式1,再计算表达式2,最后值为表达式2的值。,例:a=35, a 4,则: 先计算3 5, a15, a 4=60,结果为60。,又如: (a=35, a 4), a+5,扩展形式: 表达式1, 表达2, ,表达式n,结果为20(作为逗号表达式的值), a+5=20, 3 5=15a, a 4=60 (此时a值仍未变),结果为表达式n的值,注意: x=(a=3, 63) 赋值表达式, x的值18;, x=a=3, 6 a 逗号表达式, x的值3.,逗号表达式主要用于某些语句中需一次计算多个表达式值的情况。如在循环语句中。,函数调用中的实参之间虽然用的是逗号间隔,但不是逗号表达式。 如: printf (“%d, %d, %d“, a, b, c);,3.10 各类数值型数据间的 混合运算,c语言允许双精度、单精度、整型及字符数据之间混合运算 10+a+1.58765.1234 b 是允许的。,但有一个规则:先转换成同一类型,再计算。,double float,高低,图中“ ” 表示必定转换。如a + b,先转换为int。结果为 int。,转换方法:,long,unsigned,int char, sho

温馨提示

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

评论

0/150

提交评论