版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1第3章 表达式和语句2本章主要内容o3.1 表达式o3.2 算术运算和赋值o3.3 算术类型转换o3.4 增量和减量o3.5 关系与逻辑运算o3.6 if 语句o3.7 条件运算符o3.8 逗号运算符o3.9 求值次序与副作用o作业3o理解表达式和语句的概念o能够使用表达式来描述语句和操作o掌握运算符的功能与特点o理解运算符的优先级和结合性o能够使用if和if/else语句来选择动作学习目标:43.1 表达式n表达式:一个序列,含操作符、操作数,和标点符号,完成一个计算。n可以嵌套 2+3+(6*sizeof(int)/235n操作符和操作数必须匹配,但对编译器有额外约定 例如:float
2、a=3.2; int b = a+12; /float与int做+操作n表达式中操作数需约定求值次序ch3.9n操作符有优先级,级别高者先操作 例如:2+3*6 中*优先级高于+n操作符有结合性,决定同优先级的操作次序 例如:b=5; a=b=3; /先做b=3,再做a=b o1.表达式概述53.1 表达式o2.左值和右值n左值是能出现在赋值表达式左边的表达式。左值表达式具有存放数据的空间,并且存放是允许的。 例如: int a=3;n右值只能出现在赋值表达式的右边。左值表达式也可以作为右值表达式。 例如:int a, b=6; const int c=5; a=b; /b是变量,所以是左值,
3、此处作为右值 a=8; /8是常量,只能作右值,不能作为左值 c=a; /c是常量,只能作右值6o3.优先级和结合性n操作符有单目,双目,三目之分n第2级都是单目运算符(优先级同级)n第14级是三目运算符(只有一个)n第15级是赋值运算符n注意:单目运算,三目运算,赋值运算为右结合,其余都是左结合n详见P35,表3-1 C+操作符的优先级与结合性。3.1 表达式7 C+操作符的优先级与结合性优先级 操作符 结合性 1 ( ) - : . 左右 2 ! + - + - & * (强制类型转换) sizeof new delete 右左 3 . * - * 左右 4 * / % 左右 5
4、+ - 左右 6 左右 7 = 左右 8 = != 左右 9 & 左右 10 左右 11 | 左右 12 & 左右 13 | 左右 14 ? : 右左 15 = *= /* += -= |= = %= &= = &= |= 右左 16 , 左右83.1 表达式o4.语句与块nC+语言中,除了控制语句、函数调用语句外,几乎所有的操作都是通过表达式进行的。 n语句以分号( ; ) 结束 。n由表达式组成的语句称为表达式语句,它由一个表达式后接一个分号“;”组成。p 例如:a=a+2;n块(或称复合语句)是指括在花括号 里的语句序列。从语法上来说,块可以被认为是单个语
5、句。块也可以嵌套。n注意:在块中定义的变量仅在块中有效。 int a = 2, b = 3, c = 4; coutab3)c=b+3; else c=d+6;n语句可以是空语句。n;103.2 算术运算和赋值o1.算术运算符:+ - * / % n+:加法或正号n-:减法或负号n*:乘法n/:除法n%:模(整除取余,操作符两边的操作数必须为整型数) 113.2 算术运算和赋值o说明:o(1)除法运算“/ ” ,两个整数相除,结果为整数 ,否则为实数。n5/2=2 5.0/2=2.5n5/-2=-2 2/-3=0o(2)求余运算“%”,或称求模 ,要求参与运算的两个操作数都是整型,其结果是两个
6、数相除的余数 。n5%2=1 4%2=0o(3)负值的求余运算结果的符号与运算符左边的操作数的符号一致。n5%-2=1 -5%2=-1 -5%-2=-1 n 2%-3=2 -2%-3=-2123.2 算术运算和赋值o2.赋值运算符 n= += -= *= /= %=n复合赋值运算符都是在赋值符“=”之前加上其他运算符而构成的。 a=a+6 与:a+=6等价 注意: a+=b+c 等价于:a=a+(b+c) (x=max(5,7)+=3; 等价于: x=max(5,7)+3; 133.2 算术运算和赋值o3.溢出 n发生溢出是由于一个变量被赋予一个超出其数据类型表示范围的数值。n数值溢出是不会引
7、起编译错误的,只要分母不为0就不会引起除0运行故障,但会使运行结果发生偏差。n例如:在16位机器上进行下面的操作: int weight=42896; 得到的结果为:-22640(42896的补码)。143.3 算术类型转换o字符型、整型、实型之间可以进行混合运算。其中字符型数据以ASC码的十进制数参与运算。运算时,不同类型的数据要先转换成同一类型,然后进行运算。oC+采用两种方法对数据类型进行转换:n一种是自动转换;另一种是强制转换。153.3 算术类型转换o自动转换 n转换总是朝表达数据能力更强的方向,并且转换总是逐个运算符进行的。n由于这种转换不会丢失有效的数据位,因而是安全的。n类型转
8、换由系统自动完成。n也称为隐式类型转换。例如:如果: int i=9; long l=123; float f=9.9; double d=9.9; 则:i+a+ i*f - d/5 运算结果为double型 163.3 算术类型转换charshortintlong intunsigned charunsigned shortunsigned intunsigned longfloatlong doubledouble 类型转换的方向类型转换的方向173.3 算术类型转换o强制转换n强制转换是在程序中通过指定数据类型来改变,将一个变量从其定义的类型人为地改变成为另一种类型。n由于这种转换可能会
9、丢失有效的数据位,因而是不安全的。n系统不会自动进行此类转换。n也称为显示类型转换。183.3 算术类型转换o强制转换 n功能:将一个表达式的值转换成某个类型n格式:(类型名)(表达式)n说明: 括号必须,但是,如果表达式是单个操作数,其括号可以省。 例如:(int)x (int)(x+y) 一般,系统对操作数自动进行类型转换,但如果: a%b 要求a和b都是整型,如果不是,必须先进行转换: (int)a%b (int)a%(int)b 转换后只得到一个中间变量,被转换的变量的类型不变。 193.4 增量和减量o自增: +n+i :先加1后使用n i+ :先使用后加1 例:i=3; j1=+i
10、; j1=4 相当于执行:i=i+1; j1=i; j2=i+; j2=3 相当于执行:j2=i; i=i+1; 由于前增量操作返回的值即修改之后的变量值,所以返回的仍然是一个左值。 例如: int a=3; +(+a); /ok: +a是左值。a的值是5 +(a +); /error: a+不是左值 由于后增量操作返回的值是原先a的值,而后a的值已经发生变化,故返回的不能是当前a,只能是过去的a值,不能是左值203.4 增量和减量o自减: -n-i :先减1后使用ni- :先使用后减1 例:i=3; j1=-i; j1=2 相当于执行:i=i-1; j1=i; j2=i-; j2=3 相当于
11、执行:j2=i; i=i-1; n前减量是左值,后减量不是左值。o注意:n前增量和后增量如果单独使用表现不出其区别;如:+i; i+;n只有将增量放在其它表达式中参与运算时才表现出区别;如:j=+i; j=i+;213.5 关系与逻辑运算o1.关系运算符和关系表达式n关系运算符和优先级 6种关系运算符: = = != 同级(7级) 同级(8级)n关系表达式:用关系运算符把操作对象按语法要求联系起来的式子n关系表达式的值 1代表“真” 0代表“假”n被连接的对象可以是常量、变量、表达式。n其中表达式可以是逻辑、赋值、关系表达式。223.5 关系与逻辑运算n关系表达式的值为逻辑值(真 / 假),可
12、以参加运算 1代表“真”n关系表达式的值 0代表“假” 例:如果:a=1 b=2 c=3 d=ab=ca+5 d=(ab)=(c(a+5) 结果:d=1 d=7/2+ac+1=bc-5 d=(7/2+a)(c+1)=(c(a-5) 结果:d=0233.5 关系与逻辑运算o说明n关系运算符“=”不要误写成赋值运算符“=” 。n注意“ac1,则,则acb永真永真。例:x=2; if (x=3) /与 if (x=3) 不同 x=4; coutxendl; / 4例:cout32) 3 & 2 | 8 4 - ! 0 1 1 1 3 0 1 1o注意:“acb”应该表示为:ac &
13、c13 & age17 (不能写成13age17)o判断年龄小于12或大于65?age65263.5 关系与逻辑运算o短路表达式na&b 只要a为假(0值),就不必判断b的值;只有a为真(非0值),才需判断b的值。例:int a=1,b=2,c=3,d=4; int m=2,n=2; (m=ab)&(n=cd); coutm“,”nendl; / 0 2273.5 关系与逻辑运算o短路表达式na|b 只要a为真(非0值),就不必判断b的值;只有a为假(0值),才需判断b的值。例:int a=1,b=2,c=3,d=4; int m=2,n=2; (m=ad); cout
14、m“,”nendl; / 1 2283.6 if 语句o1.if 语句的三种形式 if(表达式) 语句 if(表达式) 语句1 else 语句2 if(表达式1) 语句1 else if(表达式2) 语句2 if() else if() else if(表达式n) 语句n . else 语句n+1 else293.6 if 语句o2.if语句的嵌套n若“语句”之一是if语句,就是if语句嵌套 例如,输入两个整数,比较两个数的大小。 #include int main( ) int x,y; coutxy; if (x!=y) if (xy) coutyendl; else coutxyendl
15、; else coutx=yendl; 运行结果1:Enter x and y:5 8xy303.6 if 语句o3.解决二义性 else总是和离它最近的还没有配对的可见的if匹配。 例如,写程序段表达下面的含义: 1 x0 y= 0 x=0 -1 x0) y=1;else if (x=0) y=0;else y=-1;if (x=0) if (x0) y=1; else y=0;else y=-1;y=0;if (x=0) if (x0) y=1; else y=-1; 1 x0y= 0 x=0 -1 x0y= 0 x=0 -1 x=0) if (x0) y=1;else y=-1;y=0;
16、if (x=0) if (x0) y=1; else ;else y=-1;323.7 条件运算符o条件运算符“?:”是C+中唯一的三目运算符.n格式 : ? : n优先级比较低14级,仅高于赋值和逗号,右结合。n条件表达式的值:e1为真,e2的值为条件表达式的值; e1为假,e3的值为条件表达式的值o例:nnum = a b ? 10 : 8 ;if () else if () return else return 或或if ( a b ) num = 10 ; else num = 8 ;33例: x=34?4:5/2 x=(34)?4:(5/2) 输出a,b中的较大者;ab ? cout
17、a :coutnNum1nNum2nNum3;nMax = nNum1 nNum2 ? nNum2 : nNum1;nMax = nMax nNum3 ? nNum3 : nMax ;x=2343.7 条件运算符o在一个条件运算符的表达式中,如果后面两个表达式的值类型相同,均为左值,则该条件运算符表达式的值为左值表达式。例如:int x=5;long a,b;(x?a:b)=1; /ok:因为a和b都是左值(x?x:a)=2; /error:x和a不同类型。 /编译器将其理解为 (long)x 和 a(x=2?1:a)=3; /error:1不是左值o在C中,条件运算符是不能作左值的。353.
18、8 逗号表达式o逗号运算符n “ ,” :也称:顺序求值运算符n 作用:连接表达式n 优先级最低o逗号表达式n 格式:表达式1,表达式2,表达式nn 求解过程:先求表达式1,再求表达式2,最后求表达式n,整个表达式的值为表达式n的值363.8 逗号表达式例: 如果a=5,表达式 a=3*5,a*4 的值为 即:a=3*5,a*4 注意:表达式 a=3*5,a*4 与 a=(3*5,a*4) 的区别 如果a=5,表达式a=(3*5,a*4)的值为逗号表达式可以嵌套: 如果a=5,表达式 (a=3*5,a*4),a+5的值为 即:a=3*5,a*4 这时的a=15 所以:a+5 就等于602020
19、37例: 如果a=4: a=a*5,a*4,a=4?a/2:+a a=a*5,a*4,(a=4?a/2:+a) 执行结果:表达式a=a*5,a*4,a=4?a/2:+a的值为:21, a的值也是21如果:表达式是a=a*5,a*4,a=4?a/2:+a 则执行结果为10,a的值是10 如果 a=4: b=(a*5,a*4,a=4?a/2:+a) 执行结果:表达式b=(a*5,a*4,a=4?a/2:+a) 的值为:2, a的值是4, b的值是:23.8 逗号表达式383.8 逗号表达式o在C+中,逗号表达式的最后一个表达式为左值,则该表达式为左值。 例如:(a=1,b,c+1,d)=5; /ok:即d=5o在C中,逗号表达式是不能作左值的。39运算符优先级括号()+,-,sizeof !*, /, %+, - =, !=&|?:赋值运算=逗号运算,低低高高403.9 求值次序与副作用o 在表达式中,各操作数的求值次序并没
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 单位管理制度范例选集【人事管理篇】十篇
- 单位管理制度呈现大合集【人力资源管理】十篇
- 《行政职业能力测验》2024年公务员考试陕西省渭南市高分冲刺试卷含解析
- 2024年公务员培训总结
- 教育科技行业话务员工作总结
- 硕士研究之路
- 电子通信行业顾问工作总结
- 2024年员工三级安全培训考试题【培优B卷】
- 2023年-2024年项目部安全培训考试题答案研优卷
- 2024年安全教育培训试题附参考答案(典型题)
- 肺胀中医护理方案.ppt
- 压力管道安装作业指导书课件
- 采矿学课程设计_图文
- 装饰办公室工作总结
- 《管理学原理与方法》周三多第六版
- 物业接管验收必须具备的条件
- 六年级上册英语教案unit 5 What does he do人教
- 井盖及踏步97S147(97S501-1、2)
- 口内病例分析
- 压力管道内审记录(共5页)
- 堵盖与胶贴在车身堵孔方面的应用
评论
0/150
提交评论