第5章选择结构程序设计.ppt

上传人:本田雅阁 文档编号:3472138 上传时间:2019-08-31 格式:PPT 页数:39 大小:275.52KB
返回 下载 相关 举报
第5章选择结构程序设计.ppt_第1页
第1页 / 共39页
第5章选择结构程序设计.ppt_第2页
第2页 / 共39页
第5章选择结构程序设计.ppt_第3页
第3页 / 共39页
第5章选择结构程序设计.ppt_第4页
第4页 / 共39页
第5章选择结构程序设计.ppt_第5页
第5页 / 共39页
点击查看更多>>
资源描述

《第5章选择结构程序设计.ppt》由会员分享,可在线阅读,更多相关《第5章选择结构程序设计.ppt(39页珍藏版)》请在三一文库上搜索。

1、第五章 选择结构程序设计,本章内容: 1.关系运算符和关系表达式 2.逻辑运算符和逻辑表达式 3.if语句的使用 4.条件运算符和条件表达式 5.switch语句的使用 6.程序举例,选择结构-根据某些条件决定执行或不执行某组操作,关系运算符和表达式,1.关系运算符及优先次序 比较两个量的运算符称为关系运算符。 在语言中有以下关系运算符: 大于 = 大于或等于 = = 等于 != 不等于 关系运算符的优先级别: (1) 、=、=优先级相等,= =、!=优先级相等, 前者高于后者。 (2) 关系运算符的优先级低于算术运算符。 (3) 关系运算符的优先级高于赋值运算符。,关系表达式的一般形式为:

2、表达式1 关系运算符 表达式2 例如:a+bc-d x3/2 a+10的值为“真”,即为1。 (a=3)(b=5)由于35不成立,其值为0。 关系表达式是表达式,因此也允许出现嵌套的情况。 如:a(bc), a!=(c=d)等。,2.关系表达式,1.逻辑运算符 语言中提供了三种逻辑运算符 ! 非运算 & 与运算 | 或运算 运算符& 、运算符| 均为双目运算符,具有左结合性。 非运算符!为单目运算符,具有右结合性。 1)逻辑运算符优先级如下: (1) ! 高于 & 高于 | (2) &, | 低于关系运算符,!高于算术运算符(*, / ),逻辑运算符和表达式,按照运算符的优先顺序可以得出: a

3、b & cd 等价于 (ab) & (cd) !b=c|dc & x+yc) & (x+y)b),逻辑运算符,2)逻辑运算的值: 逻辑运算的值也为“真”和“假”两种,用“1”和“0 ”来表示。 反过来在判断一个量是为“真”还是为“假”时,以“0”的数值代表“假”,以非“0”的数值代表“真”。,(1)与运算& 参与运算的两个量都为真时(非0),结果才为真(值为1),否则为假(值为0)。 例如:50 & 42,由于50为真,42也为真,其结果也为“真”,表达式的值为1。,3)逻辑运算的规则:,(2)或运算| 参与运算的两个量只要有一个为真(非0),结果就为真(值为1)。 两个量都为假(值为0)时,

4、结果为假(值为0)。 例如:50 | 58, 结果也就为真(值为1)。,(3)非运算! 参与运算量为真(非0)时,结果为假(值为0);参与运算量为假(值为0)时,结果为真(值为1)。 例如:!(50)的结果为假,即为0。,2.逻辑表达式 逻辑表达式的一般形式为: 表达式 & 表达式 表达式 | 表达式 !表达式 逻辑表达式的值:各种逻辑运算的最后值,以“1”和“0”分别代表“真”和“假”。,3)逻辑运算的规则:,main() char c=k; int i=1,j=2,k=3; float x=3e+5,y=0.85; printf(“%d,%dn“, !x*!y, !x); printf(“

5、%d,%dn“, x|i ,分析下段程序的输出结果,0,0 1,0 0,1,在逻辑表达式的求解中,并不是所有的逻辑运算符都执行,只有在必须执行下一个逻辑运算符才能求出表达式的值时,才执行下一个运算符。 (1) 表达式1 & 表达式2 & a+b0 & b+ (a=1,b=-2) 如果:表达式1的值是0,无论表达式2的值是什么,整个表达式的值都为0,因此表达式2就不计算了。 (2)表达式1 | 表达式2 | a+b0 | b+ ( a=1,b=2 ) 如果:表达式1的值是1,无论表达式2的值是什么,整个表达式的值都为1,因此表达式2就不计算了。,说 明:,(3)若a1,b2,c3,d=4,m和n

6、原值为1 (m=ab) & (n=cd) 则m0,而n仍保持原值 (4) c & d 逻辑运算符两侧,可以是任意类型的数据类型,说 明:,1.if语句有三种基本形式 1)第一种形式,基本形式: if (表达式) 语句; 如果表达式的值为真,则执行其后语句,否则不执行该语句。,if 语句,void main() int a,b,max; scanf(“%d,%d“, ,if(表达式) 语句1; else 语句2; 如果表达式的值为真,则执行语句1,否则执行语句2 。,void main() int a, b; scanf(“%d,%d“, ,例:,2)第二种形式,if-else形式,前二种形式的

7、if语句一般都用于两个分支的情况。 当有多个分支选择时,可采用if-else-if语句,其一般形式为: if(表达式1) 语句1; else if(表达式2) 语句2; else if(表达式m) 语句m; else 语句n;,3)第三种形式,if-else-if形式,void main() int result; printf(“input your result: “); scanf(“%d”, ,例 如:,在三种形式的if语句中,在if关键字之后均为表达式。该表达式通常是逻辑表达式或关系表达式,但也可以是其它表达式,如赋值表达式等,甚至也可以是一个变量。,注 意 :,例如: if(a=5

8、) 语句; if(b) 语句; 只要表达式的值为非0,即为“真”。 但是在 if(a=5) ;中表达式的值永远为非0,所以其后的语句总是要执行的,但在语法上是合法的。,又如,问下面程序段的输出结果? : int b,a=10; scanf(“%d“,注 意 :,(2) 在if 语句中,条件判断表达式必须用括号括起来,即使是一个变量的最简单表达式,也要用括号括起来;在语句之后必须加分号。,(3) 在if 语句的三种形式中,所有的语句应为单个语句,如果要想在满足条件时执行一组(多个)语句,则必须把这一组语句用 括起来组成一个复合语句。,注意:,例如:交换两个变量 if (ab) t= a; a=b

9、; b=t; ,当if语句中包含if语句时,则构成了if 语句嵌套的情形。 其一般形式可表示如下:,if (表达式1) if (表达式2) 语句1; else 语句2;,2. if 语句的嵌套,if(表达式1) if (表达式2) 语句;,在嵌套内的if语句可能又是if-else型的,这将会出现多个if和多个else重叠的情况,这时要特别注意if和else的配对问题。,if (x=1) if(x5) x+; else x-; 其中的else究竟是与哪一个if配对呢?,语言规定,else 总是与它前面最近的if配对,例 如:,例:,如果要使else与第一个if配对,则可加括号 来实现。,例5.3

10、 Pg.95,main() int x,y; scanf(“%d“, ,条件运算符为 ? : 三目运算符,即有三个参与运算的量。 由条件运算符组成条件表达式的一般形式为: 表达式1 ? 表达式2 : 表达式3 其求值规则为:如果表达式1的值为真,则以表达式2 的值作为条件表达式的值,否则以表达式2的值作为整个条件表达式的值。,条件运算符和条件表达式,条件表达式通常用于赋值语句之中。 例如条件语句: if(ab) max=a; else max=b; 可用条件表达式写为 max=(ab)?a:b; 执行该语句的语义是:如ab为真,则把a 赋予max,否则把b 赋予max。,条件运算符和条件表达式

11、,条件运算符的运算优先级 低于关系运算符和算术运算符,高于赋值符。 因此 max=(ab)?a:b可以去掉括号而写为 max=ab?a:b 条件运算符? :是一对运算符,不能分开单独使用。 条件运算符的结合方向是自右至左。 例如:ab?a:cd?c:d 应理解为 ab?a:(cd?c:d) 条件表达式常常用在只执行单个的赋值语句时,不但使程序简洁,也提高了运行效率。,注意以下几点:,例. 输入一个字符,若为大写字母,是则转换成小写,否则不转换,main() char ch; scanf(“%c“, ,1.switch语句使用的一般形式为:,switch(表达式) case 常量表达式1: 语句

12、1; case 常量表达式2: 语句2; case 常量表达式n: 语句n; default : 语句n+1; ,switch语句,先计算表达式的值,并逐个与其后的常量表达式值相比较; 当表达式的值与某个常量表达式的值相等时,即执行其后的语句; 然后不再进行判断,继续执行后面所有case后的语句; 如表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句。,语句的执行过程:,void main() char grade; printf(“input your mark: “); scanf(“%c“, ,程序运行时输入 A ,其输出结果是什么?,例 如,在switch语

13、句中,“case 常量表达式”只相当于一个语句标号,表达式的值和某标号相等则转向该标号执行,但不能在执行完该标号的语句后自动跳出整个switch 语句,将继续执行所有后面case语句的情况。 为了避免上述情况,语言还提供了一种break语句,专用于跳出switch语句。 break 语句使用形式为: break; 在每一case语句之后增加break 语句, 使每一次执行之后均可跳出switch语句,从而避免输出不应有的结果。,说 明,switch(表达式) case 常量表达式1: 语句1; break; case 常量表达式2: 语句2; break; case 常量表达式n: 语句n;

14、break; default : 语句n+1; ,使用switch语句的通常形式为:,void main() char grade; printf(“input your mark: “); scanf(“%c“, ,例题修改如下:,1.在case后的各常量表达式的值不能相同,否则会出现错误。 2.在case后,允许有多个语句,可以不用 括起来。 3.各case和default子句的先后顺序可以变动,而不会影响程序执行结果。 4.default子句可以省略不用。 5.若判断的是一个区间,要将区间转换成单个值,见例5.7。,注意以下几点:,s250km 没有折扣 250=s500 2%折扣 50

15、0=s1000 5%折扣 1000=s2000 8%折扣 2000=s3000 10%折扣 3000=s 15%折扣,将区间转换成常量 if (s=3000) c=12 else c=s/250,switch (c) case 0: d=0;break; case 1: d=2;break; case 2: case 3: d=5;break; case 7: d=8;break; case 11: d=10;break; case 12: d=15;break; ,例5.7 计算运输公司的运费,s为路程,例 , 判断某一年是否闰年,void main() int year,leap; sca

16、nf(“%d”,闰 年: 能被4整除,但不能被100整除 能被4整除,又能被400整除,if (year%4!=0) leap=0; else if (year%100!=0) leap=1; else if (year%400!=0) leap=0; else leap=1;,if (year%4=0,if (year%4=0) if (year%100=0) if (year%400=0) leap=1; else leap=0; else leap=1; else leap=0;,判断闰年的不同实现方式,void main() float a,b,s; char c; printf(“input expression: a+(-,*,/)b n“); scanf(“%f%c%f“, ,计 算 器 程 序,用户输入运算数和四则运算符, 输出计算结果,1.关系表达式和逻辑表达式是两种重要的表达式,主要用于条件执行的判断。 2.语言提供了多种形式的条件语句以构成分支结构。 (1)if语句主要用于单向选择。 (2)if-else语句主要用于双向选择。 (3)if-else-if语句和switch语句用于多向选择。 这几种形式的条件语句一般来说可以互相替代。,本章小结,课本Pg.104 5.3 5.5 5.6,作 业,

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

当前位置:首页 > 其他


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