运算符和表达式.ppt

上传人:本田雅阁 文档编号:2753590 上传时间:2019-05-11 格式:PPT 页数:35 大小:216.02KB
返回 下载 相关 举报
运算符和表达式.ppt_第1页
第1页 / 共35页
运算符和表达式.ppt_第2页
第2页 / 共35页
运算符和表达式.ppt_第3页
第3页 / 共35页
运算符和表达式.ppt_第4页
第4页 / 共35页
运算符和表达式.ppt_第5页
第5页 / 共35页
点击查看更多>>
资源描述

《运算符和表达式.ppt》由会员分享,可在线阅读,更多相关《运算符和表达式.ppt(35页珍藏版)》请在三一文库上搜索。

1、第3章 运算符和表达式,第3章 运算符和表达式,3.1 算术表达式 3.2 赋值表达式 3.3 关系表达式 3.4 逻辑表达式 3.5 条件表达式 3.6 逗号表达式 3.7 多种类型混合运算,学习目标,学会使用常用的运算符 学会正确书写C表达式 掌握运算符的优先级、结合性和运算对象数目 理解表达式的求解过程 了解隐式类型转换和强制类型的转换,第3章 运算符和表达式,学习运算符应注意: 运算符功能 与运算量关系 要求运算量个数、 要求运算量类型 运算符优先级别 优先级高(级别数值小)者先运算 结合方向(优先级相同时) 左结合:运算对象先参加左边的运算,结果再参加右运算。 右结合:运算对象先参加

2、右边的运算,结果再参加左运算。 结果的类型,3.1 算术表达式,3.1.1 算术表达式 表达式:常量,变量,函数,运算符组成的有意义的式子。 基本算术运算符: + - * / % 结合方向:从左向右 优先级: - -* / % - + - (2) (3) (4) 说明: “-”为单目运算符时,右结合性 两整数相除,结果为整数 %要求两侧均为整型数据,例 5/2 得 2 -5/2.0 得 -2.5,例 5%2 得 1 -5%2 得 -1 1%10 得 1 6%2 得 0 5.5%2 (),写成C表达式:1.0/2*(a*x+(a+x)/4/x),写成C表达式:(a+b)/(c+d*e/(f+g*

3、h),作用:使变量值加1或减1 种类: 前缀+i, -i (先执行i+1或i-1,再使用i值) 后缀i+,i- (先使用i值,再执行i+1或i-1) 说明: + - 不能用于常量和表达式,如5+,(a+b)+ + -结合方向: 自右向左 优先级:- + - -* / % -+ - (2) (3) (4),3.1.2 自增、自减运算,例 3.1 注意下列程序运行后变量x与y的区别。 #include void main() int a=2,b=2,x,y; x=-a+2; / 前缀运算 y=b-+2; / 后缀运算 printf(“x=%d y=%dn”,x,y); printf(“a=%d b

4、=%dn”,a,b); ,程序运行: x=3 y=4 a=1 b=1,赋值运算 符号:= 赋值表达式:变量=表达式 作用:将一个数据(常量或表达式)赋给一个变量 赋值语句 变量=表达式; 复合赋值运算 种类:+= -= *= /= %= = &= = |= 含义: 变量 op= 表达式 变量 = 变量 op 表达式,3.2 赋 值 表 达 式,例 a=3; d=func(); c=d+2;,的左边必须是一个变量,3.2 赋 值 表 达 式,说明: 结合方向:自右向左 优先级: 14 左侧必须是变量,不能是常量或表达式 赋值表达式的值与变量值相等,且可嵌套 赋值时的类型转换 赋值转换规则:使赋值

5、号右边表达式值自动转换成其左边变量的类型 例如:“double z;”,语句“z=23;”执行后,z的值是实数23.0 例如:“int x=3;”,语句“x+=1.999;”执行后,x的值是4,例 3.2 赋值运算符的使用。 #include void main() int a=5,b=5,c=5; a-=2; / 表示a=a-2 b*=a+3; / 表示b=b*(a+3) c/=a-1; / 表示c=c/(a-1) printf(“a=%d,b=%d,c=%dn“,a,b,c); ,程序运行: a=3,b=30,c=2,3.3 关系表达式,关系运算符 种类:= != 结合方向:自左向右 优先

6、级别:,程序运行: no,x!=y,例 3.3 分析下面程序的运行结果。 #include void main() float x,y=0.3; y=y*11; x=3+0.3; if(x=y) printf(“ok,x=y“); / 若x与y相等,输出ok,x=y else printf(“no,x!=y“); / x与y不相等,则输出no,x!=y ,改为fabs(x-y)1e-6,3.3 关系表达式,关系表达式:用关系运算符将两个表达式连接起来的式子。 关系表达式格式:表达式 关系运算符 表达式 关系表达式的值: 1 关系成立,0 关系不成立,例 3.4 若有int x=2,y=3,z=

7、5;,计算下列关系表达式的值。 (1)x%2= =0 表达式值是1。“x%2”值为0,再计算“0= =0”结果为1。 (2)z=x1=y2=1=”与“=1”其值是1,得“z=11”,再计算“11”为0,故z及表达式的计算结果为0。 (3)853 表达式值是1。先计算“85”其值为0,再计算“03”,值为1,表达式的值为1。,3.4 逻辑表达式,逻辑运算是判断运算对象的逻辑关系,运算对象为关系表达式或逻辑量。 运算量: 0表示“假”,非0表示“真”。运算结果: “假”为0,“真”为1 逻辑运算种类: !(逻辑非) &(逻辑与) |(逻辑或) 逻辑非的一般形式:! 表达式 功能:单目运算符,其结果

8、为运算对象逻辑值取“反”。若表达式值为0,则“!表达式”值为1;否则,“!表达式”值为0。 例如:!x,作用是判别x是否为0,x为0时,值为1;否则值为0,与x=0等价。,3.4 逻辑表达式,逻辑运算种类: !(逻辑非) &(逻辑与) |(逻辑或) 逻辑与的一般形式:表达式 & 表达式 功能:若参加运算的两个表达式值均为非0,则结果为1;否则结果为0。 例如:判断“c是一个大写字母”的逻辑表达式: c=A&c=A&c=a&c=z,优先级:,结合方向:,3.4 逻辑表达式,例 3.5 设“int a=2,b=3; char c=A;float x=3.6,y=4.4”,写出下列表达式的值。 (1

9、)ab|!(cA)&xy 代入各变量值:0|!(0)&0即 0|1&0 亦即 0|0,结果为0。 (2)ab&!c5|y*2x 按照运算顺序加括号,改写作“(ab)&(!c)5)|(y*2)x)”,代入各变量值后为“(1&(05)|(8.83.6)”,又可以写作“(1&1)|1”,计算结果为1。,例 3.6 根据下列条件,写出C的逻辑表达式。 (1)条件“长度分别为a、b、c的三条线段能够组成三角形”。 逻辑表达式: a+bc&a+cb&b+ca (2)条件“|x|是一个两位数”。 逻辑表达式: x=10&x=99&x=10 (3)条件“y年是润年”。 逻辑表达式: y%4=0&y%100!=

10、0|y%400=0,例 3.6 根据下列条件,写出C的逻辑表达式。 (4)条件“x、y 落在圆心在(0,0)半径为1的圆外、中心点在(0,0)边长为4的矩形内”。 逻辑表达式: x*x+y*y1&x=2&x=2&y=2,注意,逻辑表达式的特性: 逻辑表达式求解时,并非所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符,例 a (m=ab)&(n=cd),/结果m=0,n=1,例 3.7 分析下面程序的运行结果。 #include void main() int x,y,z,m; x=y=z=0 ; / 给变量x、y、z赋值0 m=(x=1) ,程序运行

11、: m=1 x=1 y=1 z=0,3.5 条件表达式,条件运算符:?: 条件表达式的一般形式: 表达式1 ? 表达式2 : 表达式3 执行过程,例 求 a+|b| printf(“a+|b|=%dn”,b0?a+b:a-b);,条件运算符可嵌套 如 x0?1:(x0?-1:0) 优先级: 13,结合方向:自右向左 如 ab?a:cd?c:d ab?a:(cd?c:d) 表达式1、表达式2、表达式3类型可不同,条件表达式值取较高的类型,功能:相当于条件语句,但不能取代一般if语句,例 3.8 用条件表达式计算。 (1)求变量t的符号。 f=t=0?1:1 (2)求三个变量x、y、z的最大值。

12、s=(s=xy?x:y)z?s:z (3)将字符变量ch若为小写字母则改为大写字母,其余字符不变。 ch=(ch=a,例 3.9 下列程序输入变量a、b、c 后,按值从大到小输出。 #include void main() int a,b,c,m,n,k; scanf(“%d%d%d“, ,程序运行: 5 8 7 7 5 8,表达式一般形式:表达式1,表达式2, ,表达式n 结合性:从左向右 优先级: 15 逗号表达式的值:等于表达式n的值 用途:常用于循环for语句中,例: #include main() int x,y=7,a,b,c; float z=4; x=(y=y+6,y/z);

13、c*=(a=b=1,c=2,b+=a,b*5); printf(“x=%dn“,x); printf(“a=%d,b=%d,c=%d”,a,b,c); ,运行结果: x=3 a=1,b=2,c=20,3.6 逗号表达式,3.7.1 运算符优先级 规定了在表达式求解过程中,当运算对象的左右都有运算符时运算的先后次序,即运算对象先做优先级高的运算。 如:46*8,先做“*”运算,其结果再做“”,因“*”优先级高于“”。 C语言的运算符有15种优先级,运算级别高的运算先计算,再进行运算级别低的运算。表达式中可通过增加括号来改变运算顺序。,3.7 多种类型混合运算,表3.2 部分运算符的优先级与结合性

14、,3.7.2 运算符结合方向 规定了在表达式求解过程中,若运算对象其左右运算符优先级相同时的运算方向。 结合性有两种:从左到右计算为左结合、从右到左计算为右结合。 如:表达式1.0*5/2,计算结果为2.5;表达式5/2*1.0,计算结果为2.0。,3.7 多种类型混合运算,3.7.3 混合运算的类型转换 算术运算中的类型转换 隐式转换 运算转换规则:不同类型数据运算时先自动转换成同一类型,转换规则如下:,3.7 多种类型混合运算,3.7.3 混合运算的类型转换,3.7 多种类型混合运算,规则2:相同类型(除char、short、float型外)的操作数作算术运算的结果为同一类型。 如: 5/

15、2 结果为2,5/2结果为2。,如: 2.0f+5/2*3,原表达式相当于2.0f+(5/2)*3),结果为8.0,类型是double型。,各类型的级别高低如下: charshortintunsignedlongunsigned longfloatdouble,3.7.3 混合运算的类型转换 强制类型转换运算 一般形式:(类型名)(表达式) 例 (int)(x+y) (int)x+y (double)(3/2) (int)3.6 说明:强制转换得到所需类型的中间变量,原变量类型不变,3.7 多种类型混合运算,例 3.10 强制类型转换举例。 (1)计算实型变量x的整数部分与y的小数部分之和。 写作:(int)x+y-(int)y (2)实型数据d保留3位小数(不四舍五入)。 写作:(int)(d*1000)/1000.0 (3)求整型变量k的右边第n位上的数字。 写作:k/(int)pow(10,n1)%10,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1