第三讲运算符和表达式PPT课件_第1页
第三讲运算符和表达式PPT课件_第2页
第三讲运算符和表达式PPT课件_第3页
第三讲运算符和表达式PPT课件_第4页
第三讲运算符和表达式PPT课件_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

第三讲运算符和表达式,主讲:周春容,2,第三章运算符和表达式,第三讲运算符和表达式,3,学习运算符应注意:运算符功能与运算量关系要求运算量个数要求运算量类型运算符优先级别结合方向结果的类型,第三讲运算符和表达式,4,3.1算术运算3.2赋值运算3.3自增、自减运算3.4关系运算与逻辑运算3.5条件运算3.6逗号运算3.7位运算3.8类型转换,第三讲运算符和表达式,5,3.1算术运算3.1.1算术运算符基本算术运算符:+-*/%结合方向:从左向右优先级:-*/%-+-(2)(3)(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=-11%10=15%1=05.5%2(),第三讲运算符和表达式,6,3.1.2算术表达式及其书写特点算术表达式是用算术运算符、圆括号将运算对象连接起来的符合C语言的语法规则的式子。其中,运算对象可以是常量、变量、表达式、函数等等。书写时注意以下几点:C表达式中的乘号不能省略。例如:数学式b2-4ac相应的C表达式应写成:b*b-4*a*cC表达式中只能使用系统允许的标识符。例如:数学式r2相应的C表达式应写成:3.14159*r*rC表达式中的内容必须书写在同一行,不允许有分子分母形式,必要时要利用圆括号保证运算的顺序。例如:c+d相应的C表达式应写成:(a+b)/(c+d)C表达式不允许使用方括号和花括号,只能使用圆括号来帮助限定运算顺序。可以使用多层圆括号,但左右括号必须配对,运算时从内层圆括号开始,由内向外依次计算表达式的值。,第三讲运算符和表达式,7,3.2赋值运算3.2.1-3.2.2赋值运算符、赋值表达式简单赋值运算符:=赋值表达式格式:变量标识符=表达式作用:将赋值号右边的表达式计算出来,将其值赋给左边的一个变量。,复合赋值运算符种类:+=-=*=/=%=d=func();c=d+2;,第三讲运算符和表达式,8,3.2.3赋值运算符的优先级和结合性优先级:14结合方向:自右向左左侧必须是变量,不能是常量或表达式,每个表达式都有一个值(当然每个值都有所属的类型):赋值表达式的值与变量值相等,且可嵌套,赋值转换规则:使赋值号右边表达式值自动转换成其左边变量的类型,例3=x-2*y;a+b=3;,例floatf;inti;i=10;f=i;则f=10.0,例inti;i=2.56;/结果i=2;,例:a=b=c=5a=(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,第三讲运算符和表达式,9,例:a=12;a+=a-=a*a,例:inta=2;a%=4-1;a+=a*=a-=a*=3;,/a=-264等价于a=a+(a=a-(a*a),/a=0等价于a=a+(a=a*(a=a-(a=a*3),第三讲运算符和表达式,10,不同类型数据间的转换隐式转换什么情况下发生运算转换-不同类型数据混合运算时赋值转换-把一个值赋给与其类型不同的变量时输出转换-输出时转换成指定的输出格式函数调用转换-实参与形参类型不一致时转换运算转换规则:不同类型数据运算时先自动转换成同一类型,第三讲运算符和表达式,11,第三讲运算符和表达式,12,显式转换(强制转换)一般形式:(类型名)(表达式)例(int)(x+y)(int)x+y(double)(3/2)(int)3.6说明:强制转换得到所需类型的中间变量,原变量类型不变,例main()floatx;inti;x=3.6;i=(int)x;printf(“x=%f,i=%d”,x,i);结果:x=3.600000,i=3,精度损失问题,13,3.3自增、自减运算3.3.1-3.3.2自增、自减运算符、表达式、结合性、优先级作用:使变量值加1或减1种类:前置+i,-i(先执行i+1或i-1,再使用i值)后置i+,i-(先使用i值,再执行i+1或i-1),例j=3;k=+j;等价于:j+;k=j;j=3;k=j+;等价于:k=j;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,第三讲运算符和表达式,14,每个表达式都有一个值(当然每个值都有所属的类型):(i+)中表达式(i+)的值是变量i在+之前的值;但i+的值已经增1;(+i)中表达式(+i)的值是变量i在+之后的值;,+-不能用于常量和表达式,如5+,(a+b)+-结合方向:自右向左优先级:-+-*/%-+-(2)(3)(4),例-i+-(i+)i=3;printf(“%d”,-i+);/-3,例-i+i=3;printf(“%d”,-i+);,第三讲运算符和表达式,15,3.3.3使用自增、自减运算符的注意事项,对于形如a+b的表达式,C语言的编译系统在处理时尽可能多的自左至右将若干个字符结合成一个运算符。因此,a+b被理解为(a+)+b,而不是a+(+b)。为避免产生误解,建议将此表达式写成(a+)+b的形式。例如,x=i+i+i+;应被理解为z=(i+)+(i+)+(i+);,自增、自减运算符使得C的表达式灵活、简洁,但有时候会使初学者迷惑,若使用不当,会产生意外的后果。这就需要在使用时尤其注意。,当一个表达式中,含有若干个子表达式时,ANSIC没有规定运算符和运算对象的计算次序,因此不同编译系统处理的顺序可能不同。,例如,x=a*b+c%d无所谓;例如,a=3;y=a*+a;不同的编译系统有两种处理方式,结果不同:,A)按从左到右的顺序处理为:先取a的值3,再计算+a,a的值自增为4,子表达式+a的值也为4,所以相乘的结果为12;B)按从右到左的顺序处理为:先计算+a,a的值自增为4,子表达式+a的值也为4,再取a的值为4,所以相乘的结果为16。,第三讲运算符和表达式,16,在一个表达式中,出现对同一个变量的多次自增、自减运算时,有的编译系统按从左到右的次序处理,而有些系统一次性的处理这些运算是从右到左(如TURBOC2.0系统)。请看下列程序的输出结果。,main()inti=6,k=6,a,b;a=(i+)+(i+)+(i+);b=(+k)+(+k)+(+k);printf(ni=%d,k=%d,i,k);printf(na=%d,b=%d,a,b);,若按从左到右的次序处理,预期的运行结果为:i=9,k=9a=21,b=24,TC2.0程序的运行结果如下:i=9,k=9a=18,b=27,第三讲运算符和表达式,17,在调用函数时,对于实参的求值顺序,ANSIC也没有规定。有的系统按从左到右的顺序求值,有的相同按从右到左的顺序求值。,例3.2】main()inti=5;printf(n%d,%d,i,+i);,若按从左到右的次序处理,预期的运行结果为:5,6,TC2.0程序的运行结果如下:6,6,第三讲运算符和表达式,18,编写程序时,应注意把可读性放在第一位,避免编写晦涩难懂、容易引起误解的程序。尤其在使用自增、自减运算符时,尽量不要使用易于误解的表达方式。为了清晰的表达编程者的意图,可以将一个复杂的语句分解成多个简单的语句。,例如,A)y=a*+a;可改写为b=+a;y=a*b;,B)printf(n%d,%d,i,+i);可改写为k=i;printf(n%d,%d,k,+i);,a=(i+)+(i+)+(i+);可改写为:x=i+;y=i+;z=i+;a=x+y+z;,第三讲运算符和表达式,19,关系运算符和关系表达式关系运算符种类:=!=结合方向:自左向右优先级别:,例ca+b/c(a+b)ab!=c/(ab)!=ca=bc/a=(bc),关系表达式的值:是逻辑值“真”或“假”,用1和0表示,例inta=3,b=2,c=1,d,f;ab(ab)=cb+cbf=abc,/表达式值1,/表达式值1,/表达式值0,/d=1,/f=0,第三讲运算符和表达式,20,关系运算注意:,例若a=0;b=0.5;x=0.3;则a78在C中是允许的,值为,0,例inti=1,j=7,a;a=i+(j%4!=0);则a=,2,例a0结果为A100结果为,1,0,第三讲运算符和表达式,21,关系运算注意:,例注意区分“=”与“=”inta=0,b=1;if(a=b)printf(“aequaltob”);elseprintf(“anotequaltob”);,第三讲运算符和表达式,22,逻辑运算符和表达式逻辑运算符种类:!b=5;!aa,例(a=b)?Y:N(x%2=1)?1:0(x=0)?x:-x(c=ax0,表达式值为axy?1:1.5/xy,值为1.0;xy,值为1.5,第三讲运算符和表达式,27,逗号运算符和表达式形式:表达式1,表达式2,表达式n结合性:从左向右优先级:15逗号表达式的值:等于表达式n的值用途:常用于循环for语句中,例a=3*5,a*4a=3*5,a*4,a+5例x=(a=3,6*3)x=a=3,6*a例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,/赋值表达式,表达式值18,x=18,/逗号表达式,表达式值18,x=3,/1,2,3,/3,2,3,第三讲运算符和表达式,28,逗号运算符和

温馨提示

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

评论

0/150

提交评论