表达式与基本程序控制结构

上传人:tia****nde 文档编号:68164544 上传时间:2019-01-10 格式:PPT 页数:40 大小:1,011KB
返回 下载 相关 举报
表达式与基本程序控制结构_第1页
第1页 / 共40页
表达式与基本程序控制结构_第2页
第2页 / 共40页
表达式与基本程序控制结构_第3页
第3页 / 共40页
表达式与基本程序控制结构_第4页
第4页 / 共40页
表达式与基本程序控制结构_第5页
第5页 / 共40页
点击查看更多>>
资源描述

《表达式与基本程序控制结构》由会员分享,可在线阅读,更多相关《表达式与基本程序控制结构(40页珍藏版)》请在金锄头文库上搜索。

1、第4章 C+表达式与基本程序控制结构,41 运算符与表达式 运算符是指用来表示在数据上执行某些特定操作的符号。参与运算的数据称为操作数。(可以分别称为单目、双目和三目运算符)。 表达式是指用运算符和圆括号把常量、变量和函数等运算成分连接起来的有意义的式子。单个常量、变量和函数也可以看成是一个表达式。,例如: 98.56 , (98.56) , x , 876-78 ,3*(2.5+5) 都是表达式,,基本运算符,基本运算符是指完成算术运算、关系运算、逻辑运算、位运算的运算符。,4.1.1 算术运算 5.3%2错,C+中有如下单目运算符: + - (正负号) C+中有如下双目运算符: + - *

2、 / % 5 / 2 5.0 / 2 8 5 ? 运算符%的操作数只能是整型或字符型。,当赋值运算符的两边出现相同的变量时,C+还提供了一个简洁的表达方式:x =。其中的x可为 +、-、*、/、等。 假定e1和e2是表达式,那么 e1 = (e1) x (e2) 就等价于 e1 x = e2 例如,表达式 a = a + 9 可以用+ =写成如下形式: a + = 9 注意围绕 e2 的括号。例如,表达式 y - = x + 1 实际上是 y = y - ( x + 1 ),+ + 和 - - 运算符 增1运算符和减1运算符分别对其操作数进行加1和减1操作,它们既可以用在变量前,作为前缀运算符

3、,例如 int m , n ; + m ; - n ; 又可用在变量后,作为后缀运算符。例如: m + ; n - ; 在两种情形下,m的值都将加1而n的值都将减1。 前缀增(减)1运算符在使用变量的值之前就使变量值加1或减1, 后缀增(减)1运算符在使用变量的值之后才使变量值加1或减1。 例如,若n的值为5,那么 x = n + ; 先将n的值5赋给x,即x的值为5,再将 n的值加1,则n为6。而 x = + n ; 先将n的值加1得到6,再将n的值赋给x,则x和n的值都为6。,postincrement & preincrement,4.1.2 关系运算 C+的关系运算符都是二元的,有、=

4、、= 4 的值为1,而表达式 67 != 67 的值为0。,例4.1 关于关系运算的一个例子。 # include void main( ) double x = 45.3 , y ; cout y ; cout ( x y ) endl ; 例4.1执行后,若输入的y的值是小于45.3的,则得到的结果是1,否则得到0。,4.1.3 逻辑运算 C+的逻辑运算符有三个:一元运算符!(逻辑非)和二元运算符 x = 16 时,此表达式的值为0。,! 运算符用在表达式的前面,表示取表达式的非。若表达式值为0,取非以后为1; 若表达式值为非0,取非以后为0。 例如: !(32) 的值为0,因为(32)的

5、值为1。,C+在计算逻辑表达式的值时,若从左到右计算到某处就已经能够确定表达式的值,则不再继续后面部分的求值。 例如,形如 e1 & e2 的表达式,在已求得表达式e1的值为0的情况下,已经能够确定整个逻辑表达式的值为0,C+就不再对e2求值。 同样,形如 e1 | e2 的表达式,如果已经求得e1的值为1,则整个表达式的值一定为1,C+就不再对e2求值。,4.1.4 条件运算符 条件运算符?:是C+中唯一的一个三元运算符。 条件运算符的表达式具有如下形式: e1 ? e2 : e3 其中e1、e2、e3皆为表达式。 条件运算执行的操作是:先计算表达式e1的值,如果为非0,则计算表达式 e2

6、的值并把它作为整个表达式的值; 而如果e1的值为0,则计算表达式e3的值,并用它作为整个表达式的值。 例如,表达式 ( x y ) ? 10 : 20 如果x的值大于y的值,则表达式的值为10,否则表达式的值为20。 又如,在语句 max = ( a b ) ? a : b ; 中,max将赋值为a、b中较大的数。,4.1.5 运算符的优先级和结合性 当一个表达式中有多个运算符时,运算符的优先级和结合性就决定了表达式中各运算的先后顺序。优先级相同时,由结合性决定运算次序。 运算符的结合性分为左结合(从左到右计算)和右结合(从右到左计算)。 例如,运算符+和-优先级相同、为左结合,因此表达式 4

7、5+89-23 按从左到右的顺序计算,先做加法再做减法。 而赋值运算符=是右结合的,因此表达式 x = y = 78 的运算次序为:先将78赋给y,再将y赋给x。,表4.1 C+常用运算符的优先级和结合性,C+各运算符的优先级总的来说有如下规律(按优先级从高到低): 一元二元(除了赋值)三元赋值逗号; 二元运算符又有如下规律: 算术关系逻辑; 逻辑运算符有如下规律: ! & |。,请分析以下表达式的求值次序。假定有 int x = 5 , y = 4 , z = 6 ; char a = s , b = t ; int w = 2 ; 表达式 表达式的值 z / y z / 4.0 z / y

8、 % z / x a b | y z a != b & z 6 a = b & ! ( y z ) a = b & ! y z x + 1 +z x + 1 z+ -x -y | x + y z & z % 3 = 0 ( x+ , x += y , x + y ),1,1.5,0,1,0,0,1,1,0,1,14,42 基本程序控制结构 按照结构化程序设计的思想,程序由三种单入口、单出口的基本结构组成:顺序结构、选择结构、循环结构。C+的控制流就是这三种基本结构组成的。,4.2.1 顺序结构 顺序结构的程序是指程序中的所有语句都是按书写顺序逐一执行的,只有顺序结构的程序功能有限。,例4.2

9、计算球的体积 。已知球的体积公式为: 4R3 V= 3 # include void main( ) float radius , bulk ; cout radius ; / 输入半径 bulk = (4*3.1416* radius* radius* radius)/3 ; cout “bulk = “ bulk endl ; / 输出体积 ,4.2.2 选择结构 选择结构也称为分支结构,用于处理在程序中出现了两条或更多执行路径可供选择的情况。选择结构可以用选择语句来实现。选择语句包括 if 语句和 switch 语句。 1If 语句 if语句有两种格式。 格式一:if (条件表达式) 语

10、句,功能:对条件表达式求值,若值为真(非0)则执行它后面的语句; 否则什么也不做。 若需要执行的语句用单条语句写不下,就应该用复合语句。,例4.3 将两个数排序输出 。 # include void main( ) float a , b , ls ; cout a b ; if ( a b ) ls = a ; / 以下三句的功能为交换a、b的值 a = b ; b = ls ; cout a “ “ b endl ; ,格式二 if (条件表达式) 语句1 else 语句2 格式二的if语句完成的功能:对条件表达式求值,若值为真(非0)执行其后的语句1; 否则执行else后面的语句2。即根

11、据条件表达式是否为真分别作不同的处理。 下面用格式二的if语句改写例4.3。,例4.4 对例4.3的改写 。 # include void main( ) float a , b , ls ; cout a b ; if ( a b ) cout a “ “ b endl ; /先打印a再打印b else cout b “ “ a endl ; /先打印b再打印a ,上一节介绍的条件运算符也可以用if语句来改写。例如: y = ( a b ) ? a : b ; 可以用下面这个if语句来代替: if ( a b ) y = a ; else y = b ;,条件表达式取值 false: 0 t

12、rue: 所有非0值,例4.5 某单位向职工按月发放医疗补贴的具体方案如下:职工工龄在10年以下的,医疗补贴为其基本工资的10% ; 工龄在10年以上20年以下的,医疗补贴为其基本工资的15% ; 工龄在20年以上30年以下的,医疗补贴为其基本工资的20% ; 工龄在30年以上的,医疗补贴为其基本工资的30%。输入某职工的工龄及基本工资,计算他每月应得的医疗补贴。,# include void main( ) int seniority ; double wages , allowance ; cout seniority ; /输入工龄 cout wages ; /输入基本工资 if ( s

13、eniority 10 ) / 工龄在10年以下 allowance = wages * 0.1 ; else if ( seniority 20 ) / 工龄在10年19年 allowance = wages * 0.15 ; else if ( seniority 30 ) / 工龄在20年29年 allowance = wages * 0.2 ; else allowance = wages * 0.3 ; / 工龄在30年以上 cout “The allowance is : “ allowance endl ; ,if语句中也可以包含if 语句,这就构成了if语句的嵌套。,例4.5也

14、可以不使用嵌套的if语句。借助逻辑运算符,用几个并列的if语句来完成例4.5的功能:,例4.6 对例4.5的改写。 # include void main( ) int seniority ; double wages , allowance ; cout seniority ; cout wages ; if ( seniority = 10 ,二义性原与最近匹配原则 在将两种格式的if语句混合起来进行嵌套时,要注意正确理解其含义。请看下面的语句: x = 9 ; if ( x 2 ) if ( x 2 ) if ( x 2 ) if ( x 4 ) x = 35 ; else x = 78

15、 ; 当x2或者x4时,这两种理解会导致两个不同的答案。这就叫产生了二义性。 在绝大多数的语言中,包括C+,都采用最近匹配原则来解决这个问题。所谓最近匹配原则就是每个else必须与离它最近的那个没有匹配的if相匹配。按照这个原则,上面的第二种理解是正确的。,2switch语句 switch语句又称为开关语句,其格式如下: switch (表达式) case 常量表达式1 : 语句序列1 break ; case 常量表达式2 : 语句序列2 break ; case 常量表达式n : 语句序列n break ; default : 语句序列n+1 break ; ,其中,switch后面的表达式的类型必须与case后面的常量表达式的类型一致,而且只能是字符型、整型或枚举型(注意不能是浮点型); case后面的表达式必须是常量表达式,不能含有变量 ; 同一个switch中不能有重复的常量表达式。,switch语句执行的过程如下:先计算switch后面的表达式的值,然后拿它与各case后面的常量表达式比较。当遇到某个case中的常量表达式的值与它相等时,就

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号