第四章 选择结构程序设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
说明: 对于选择结构所有的分支都要验证,且要注意边际值的验证。 常用缩进的方式书写多分支语句,使语句的结构更加清晰,以便阅读。
4、if语句的嵌套
在if语句中又包含一个或多个if语句,称if语句的嵌套。 if语句的嵌套常见形式如图4-19所示:
图4-19(1)总体来说,是一条双分支语句。当①表达式为“1”(真)时,执行上面②内 嵌if...else...语句;当①表达式为“0”(假)时,执行下面②内嵌if...else...语句。 图4-19(2)总体来说,是一条单分支语句。当①表达式为“1”(真)时,执行下面②内 嵌if...else...语句,当②表达式为“0”(假)时,执行下面③内嵌if...else...语句。 if与else的配对原则是: else子句总是和它上面的且最近的那个if配对。我们常用符号“〔”来画语句的嵌套关系, 分析语句的层次结构,以便阅读。
2. 逻辑表达式 用逻辑运算符将关系表达式或逻辑量(0、1)连接起来的式子就是逻辑表 达式。 如:a>b&&x>y、0&&1、2||9&&0、4-!3&&'c'、'a'||'b'、3.5&&4.8等 都是逻辑表达式。
3、逻辑表达式的值 逻辑表达式的值也是一个逻辑值,即“真”或“假”。为“真”,值 为“1”; 为“假”,值为“0”。当运算对象取不同的逻辑值时,逻辑运算真值表如 表 表4-1 逻辑运算真值表 4-1所示。
例4.7 判别某一年year是否闰年。 闰年的条件是符合下面二者之一: ①能被4整除,但不能被100整除。 ②能被4整除,又能被400整除。 #include <stdio.h> void main( ) { int year; scanf("%d",&year); if (year%4==0&&year%100!=0||year%400==0) printf("%d是闰年。\n",year); else printf("%d不是闰年。\n",year); }
如:if (x>=60) printf("PASS!\n"); else printf("NO!\n"); 这是一条双分支if...else...语句,如果学生成绩及格,输出 “PASS!”,否则输出“NO!”。
需要强调的是: ① else是if的子句,不能单独使用, 只能和if配对使用; ② if...else...语句是一条双分支语句,虽然表面看起来有两个 “;”,但是同一时刻只能执行其中一个“;”的语句。
如:if (x>0) y=1; else if (x==0) y=0; else y=-1; printf("x=%d,y=%d\n",x,y); 这是一条多分支if...else if语句。如果“x>0”,执行“y=1;”;否则如果“x==0”, 执行“y=0;”;否则执行y=-1;。最终,输出x和y值。
第四章 选择结构程序设计
一、关系运算符与关系表达式 二、逻辑运算符与逻辑表达式 三、if语句 四、switch语句 五、程序举例
前一章学习了顺序结构程序设计,顺序结构是顺序执行每个操作,直到 程序结束;本章将学习选择结构程序设计,选择结构是根据条件选择不同的操 作,若条件成立执行一种操作,若条件不成立执行另外一种操作,并不是全部 操作都被执行。而程序中的条件的表示和判断,要用C语言中的关系运算和逻 辑运算来实现。
例4.4 求两数中的大数(用单分支if语句编程)。 #include <stdio.h> void main( ) { int a,b,max; scanf("%d%d",&a,&b); max=a; if (max<b) max=b; printf("两数中的大数是:%d\n",max); }
说明: 图4-3是常用运算符的优先级。 C语言编译系统在给出逻辑运算结果时,以 “1”代表“真”,以“0”代表“假”;但在 判断 一个量是否为“真”时,以“非0”代表 “真”, 以“0”代表“假”。 逻辑运算符两侧的运算对象可以是任何类型
【例4-3】求逻辑表达式的值。 #include <stdio.h> void main( ) { int a=1,b=2,c=3,d=4,m=1,n=1; printf("%d,%d,%d\n",(m=a>b)&&(n=c>d),m,n); printf("%d,%d,%d\n",(m=d>c)||(n=c>d),m,n); }
a 1 1 0 0
b 1 0 1 0
!a 0 0 1 1
!b 0 1 0 1
a&&b 1 0 0 0
a||b 1 1 1 0
【例4-2】求逻辑表达式的值。 #include <stdio.h> void main( ) { int a=1,b=2,x=3,y=4; printf("%d\n",a>b&&x>y); printf("%d\n",0&&1); printf("%d\n",2||9&&0); printf("%d\n",4-!3&&'c'); printf("%d\n",'a'||'b'); printf("%d\n",3.5&&4.8); }
二、逻辑运算符与逻辑表达式
1. 逻辑运算符 程序中单一的条件,如“x>10”用关系表达式表示,而很多复杂的条件 是 无法仅用关系表达式表示的,这就需要用到逻辑运算。如:判断某人是一 位年长男性吗?就要从性别和年龄两个方面作出判断,即用“sex=='M' && age>60”的形式来表示,这就是用逻辑运算将两个条件组合起来,其“&&” 就是逻辑运算符。 C语言提供3种逻辑运算符: ! : 逻辑非,是单目运算符,优先级是2。 如:!3 && : 逻辑与,是双目运算符,优先级是11。如:0&&1 || : 逻辑或,是双目运算符,优先级是12。如:'a'||'b'
说明: 定义变量max存放最大值。首先,将一个数a认为是最大,执行max=a;,然后 将另一个数b和认为最大的max进行比较,若max<b成立,则说明b比a大,执 行max=b;,若max<b不成立,说明max中的值就是最大,最终输出max中的 最大值。这是C语言中两数比较的最基本的思想。
Βιβλιοθήκη Baidu
例4.5 三个数由小到大排列。(用单分支if语句编程) 解此题的算法比上一题稍复杂些,可以用伪代码写出算法: ① if a>b 将a和b交换; ② if a>c 将a和c交换; ③ if b>c 将b和c交换。 然后顺序输出a、b、c即可,其交换过程如图4-8所示。 #include <stdio.h> void main( ) { int a,b,c,t; scanf("%d,%d,%d",&a,&b,&c); if (a>b) { t=a;a=b;b=t; } if (a>c) { t=a;a=c;c=t; } if (b>c) { t=b;b=c;c=t; } printf("三个数由小到大排列:%d,%d,%d\n",a,b,c); }
3、多分支if…else if语句
多分支if...else if语句的一般形式是: if ( 表达式1 ) 语句1; else if ( 表达式2 ) 语句2; else if ( 表达式3 ) 语句3; else if ( 表达式4 ) 语句4; ... else if ( 表达式n ) 语句n; else 语句n+1; 其语句功能:如果表达式1的值为“1”(非零),则执行语句1;否则如 果表达式2的值为“1”(非零),则执行语句2;否则如果表达式3的值 为“1”(非零),则执行语句3;否则如果表达式4的值为“1”(非零), 则执行语句4;……;否则如果表达式n的值为“1”(非零),则执行语 句n;否则执行语句n+1;。 多分支if...else if语句的流程如图4-17所示。
2. 关系表达式 用关系运算符将两个表达式连接起来的式子,称关系表达式。 如:3>2、x+y>x+z、x>y==z、z=x>y、'c'<'d'等都是关系表达式。 3. 关系表达式的值 关系表达式的值是一个逻辑值,即“真”或“假”。若关系成立,为 “真”, 值为“1”;若关系不成立,为“假”,值为“0”。 【例4-1】求关系表达式的值。 #include <stdio.h> void main( ) { int x=1,y=2,z=3; printf("%d\n",3>2); printf("%d\n",2>3); printf("%d\n",x+y>x+z); printf("%d\n",x>y==z); printf("%d\n",z=x>y); printf("%d\n",'c'<'d');
说明: 三个数比较大小,是建立在两数比较的基础上。今后,还会学习更多的数比较大小, 虽然数多了,但仍是建立在两数比较的基础上,这是C语言中数值比较的基本思想。 对于选择结构必须验证每个分支。 此例是三数比较大小的典型算法。 思考:若三个数由大到小排列,程序应当怎样修改呢? 2、双分支if…else…语句 双分支if…else…语句的一般形式是: if ( 表达式 ) { 语句1; } else { 语句2; } 其语句功能:根据表达式的值,决定执行哪个分支语句。如果表达式的值为“1” (非零),则执行语句1;如果表达式的值为“0”(假),则执行语句2。 双分支if...else...语句相当于我们常说的“如果……就……否则……”,其流程如 图4-12所示。
说明: C语言里由“&&”、“||”构成的逻辑表达式在某些情况下会产生“短路”现象。
如:a&&b&&c 只要a为假,就不必判别b和c;如果a为真、b为假,就不必判别c。 再如:a||b||c 只要a为真(非0),就不必判别b和c;只有a为假,才判别b;只有a和 b都为假,才判别c。
三、if语句
#include <stdio.h> void main( ) { float g,k; //购买商品金额、实际付款金额 printf("请输入购买商品金额(元):"); scanf("%f",&g); if (g>=5000) k=g*0.8; else if (g>=3000) k=g*0.9; else if (g>=1000) k=g*0.95; else k=g; printf("实际付款金额是:%.1f\n",k); }
【例4-8】某商场实施店庆打折活动,活动细则如下: (1)购买商品总额<1000元,不打折。 (2)购买商品总额≥1000元,打9.5折; (3)购买商品总额≥3000元,打9折; (4)购买商品总额≥5000元,打8折。 编写程序,实现从键盘输入顾客购买商品的总额,输出顾客实际付款金额。 (用多分支if...else if语句编程)
一、关系运算符与关系表达式
1. 关系运算符 C语言提供6种关系运算符: < : 小于 <= : 小于等于 > : 大于 >= : 大于等于 == : 等于 != : 不等于 其中:“<、<=、>、>=”优先级是6,“==、!=”优先级是7,结合性都是从左 至右。 关系运算符对其左右两侧的值进行比较。若关系成立,表示满足条件;若关系 不成立,表示不满足条件。 如:3>2,关系成立,表示满足条件。 再如:2>3,关系不成立,表示不满足条件。
例4.6 求两数中的大数(用双分支if...else...语句编程)。 #include <stdio.h> void main( ) { int a,b,max; scanf("%d%d",&a,&b); if (a>b) max=a; else max=b; printf("两数中的大数是:%d\n",max); }
选择结构有三种形式:单分支结构、双分支结构和多分支结构。C语言分别为 这三种结构提供了相应的语句,if语句是实现选择结构的语句之一。 1、单分支if语句 单分支if语句的一般形式是: if ( 表达式 ) { 语句; }
其语句功能:根据表达式的值,决定是否执行语句。如果表达式的值为“1” (非零),则执行语句;如果表达式的值为“0”(假),则直接跳过此判断语 句,继续执行后面的程序。 单分支if语句相当于我们常说的“如果……就……”,其流程如图4-5所示。 如:if (x>=60) printf("PASS!\n"); 这是一条单分支if语句,如果学生成绩及格,输出“PASS!”,否则不做处理。