第5章 选择结构程序设计
表 达 式 非0(真) 语句
5.4.1 单分支if语句
例题5.1 输入一个整数,判断这个数是否是偶数。 解题思路: 首先定义一个内存变量x存储整数,然后使用表 达式(x%2==0)判断是否是偶数。
5.4.1 单分支if语句
程序: #include <stdio.h> int main() { int x; scanf("%d",&x); if(x%2==0) printf("%d是一个偶数。\n",x); } 程序运行结果:
5.2 关系运算符和关系表达式
5.2.1 关系运算符
算术运算符 高 <、<=、>、>= ==、!= 赋值运算符号 低
图5.1 关系运算符的优先级
5.2.2 关系表达式
用关系运算符把两个表达式连接起来的式 子称为关系表达式。例如: a<b,a+2>b+2,a+b>c+d,’A’>’B’, c=5>d=3,(a>b)>(c<d) 关系表达式的值也是一个逻辑值,即“真” 和“假”。由于在C语言中没有逻辑型数据, 所以用“1”代表“真”,用“0”代表“假”。
95 A 88 B 73 C 66 D 35 E
多分支条件语句
5.4.3 多分支if 语句
例题5.3 计算分段函数的值。
2 * x 2 / x y 2 x 2 x
x 10 10 x 0 0 x 10 x 10
解题思路: 首先定义一个内存变量x,输入x的值 后判断x的范围,然后根据分段函数计算 函数值。
多分支if语句首先判断表达式1的值,如果表达 式的值为真,则执行语句1,后面的语句再不执 行;如果表达式的值为假,则再判断表达式2的 值。如果表达式2的值为真,则执行语句2,后面 的语句再不执行;如果表达式2的值为假,则继 续判断表达式3的值。以此类推找到成立的条件 然后执行对应的语句。
5.4.3 多分支if 语句
5.4.3 多分支if 语句
程序: #include <stdio.h> int main() { float x,y; printf("请输入x的值:"); scanf("%f",&x); if(x<=-10) y=2*x; else if(x>-10&&x<=0) y=2/x; else if(x>0&&x<=10) y=2+x; else if(x>10) printf("y=%f\n",y); }
第5章 选择结构程序设计
本章重点: if语句;if„else语句;switch语句。 本章难点: 选择结构的嵌套。
5.1 为什么需要选择结构 5.2 关系运算符和关系表达式 5.3 逻辑运算符和逻辑表达式 5.4 用if语句实现选择结构 5.5 用switch语句实现选择结构 5.6 选择结构的嵌套 5.7 选择结构程序设计综合举例 5.8 本章小结
例子:
#include<stdio.h> int main() {double score; scanf("%lf",&score); if(score>=60) printf("OK\n"); else printf("Failed\n"); return 0; }
/* 86 OK */ /* 59 Failed */
例子:
#include<stdio.h> int main() {int i,m,n,res; for(i=1;i<=5;i++) {scanf("%d%d",&m,&n); res=m%n; printf("res=%d\n\n",res ); } return 0; }
/* 45 res=4
54 res=1
5.3 逻辑运算符和逻辑表达式
2. 逻辑与 逻辑与是二元运算,其运算符为“&&”。运算规 则:若参与逻辑与运算的两个操作数的值均为1 (逻辑真),则逻辑与的运算结果为1(逻辑真); 若参与逻辑与运算的两个操作数的值中有一个为0 (逻辑假),则逻辑与的运算结果为0(逻辑假)。 例如: int a=1,b=5; a&&b 运算结果为1,因为a和b的值均为逻辑真; (a>b)&&(a>0) 运算结果为0,因为a>b的运算结 果是逻辑假。
5.3 逻辑运算符和逻辑表达式
3. 逻辑或 逻辑或是二元运算,其运算符为“||”。运算规则: 若参与逻辑与运算的两个操作数的值均为0(逻辑 假),则逻辑与的运算结果为0(逻辑假);若参与 逻辑与运算的两个操作数的值中有一个为1(逻辑 真),则逻辑与的运算结果为1(逻辑真)。例如: int a=1,b=5; a||b 运算结果为1,因为a的值为逻辑真; (a>b)||(a>0) 运算结果为1,因为a>0的运算结果 是逻辑真。
5.3.2 逻辑表达式
“!” 高 算术运算 关系运算 “&&”和“||” 赋值运算 低
图5.2 运算符的优先级
5.4 用if语句实现选择结构
5.4.1 单分支if语句
0(假)
单分支if语句的形式为: if (表达式) 语句 单分支if语句首先判断表达式的值,如果 表达式的值为真,则执行后面的语句;如 果表达式的值为假,则不执行后面的语句。 这里的语句可以是一条简单的语句,也可 以是一条复合语句。
5.5 用switch语句实现选择结构
说明: 1. switch语句是多分支选择语句,其特点是可以根据一个表 达式的多种值,选择多个分支。虽然也可以用多分支的if语句 或嵌套的if语句实现,但如果分支较多,则会导致多分支if语句 和嵌套的if语句层次多,程序冗长且可读性降低。 2. switch后面的表达式的值可以是整型、字符型、枚举型等。 常量表达式的值必须互不相同,当表达式的值与某一个case后 面的常量表达式的值相同时,就执行该case后面的语句。如果 没有任何一个case后面的常量表达式的值与其相匹配时,则执 行default后面的语句。 3. 在执行switch语句时,根据表达式的值找到入口,也即对 应的case,执行完成对应的语句后,程序继续执行下一个case, 而不再继续判断。 4. 执行完一个case以后,如果要终止switch语句的执行,可以 用break语句来实现。
5.5 用switch语句实现选择结构
例题5.4输入考试成绩(百分制)打印出其对应的 等级。 小于60:不及格 大于等于60,且小于70 : 及格 大于等于70,且小于80 : 中等 大于等于80,且小于90 : 良好 大于等于90,且小于等于100:优秀 解题思路:首先要设计好switch后面的表达式, 因为考试成绩为0-100的实数,如果把每一个值都 用一个case列出来,那是不可能实现的。所以可以 把0-100的实数划分成0~60、60~70、70~80、 80~90、90~100、100进行处理。
5.5 用switch语句实现选择结构
程序: #include <stdio.h> int main() { float score; printf("请输入学生成绩:"); scanf("%f",&score); switch((int)(score/10)) { case 10: case 9:printf("优秀\n");break; case 8:printf("良好\n");break; case 7:printf("中等\n");break; case 6:printf("及格\n");break; case 5: case 4: case 3: case 2: case 1: case 0:printf("不及格\n");break; default:printf("输入有误!\n"); } }
5.3 逻辑运算符和逻辑表达式
1. 逻辑非 逻辑非是一元运算,其运算符为“!”。运算规则:若逻 辑非运算符后面的操作数的值为0(逻辑假),则逻辑非 的运算结果为1(逻辑真);若逻辑非运算符后面的操作 数的值为1(逻辑真),则逻辑非的运算结果为0(逻辑 假)。在C语言中进行逻辑判断时,数据的值为非0,则 认为是逻辑真;数据的值为0,则认为是逻辑假。例如: int a=1,b=5; !b 运算结果为0,因为b是非0值表示逻辑真,再进 行逻辑非运算后结果为0; !(a>b) 运算结果为1,因为a>b的运算结果是逻辑假, 再进行逻辑非运算后结果为真。
5.1 为什么需要选择结构
在前面介绍的顺序结构中,程序中的每条语句是 按照各个语句的先后顺序依次执行的,执行完一 条语句后再无条件地执行下一条语句,这就是顺 序结构。但在现实生活中,有许多问题用顺序结 构是无法解决的,需要用到选择结构。也就是说 执行完一条语句后不是无条件地执行下一条语句, 而是需要进行选择,要选择就需要条件的判断。 现实生活中很多问题都需要进行条件的判断
0(假) 表达式 1 0(假) 非 0 (真) 表达式 2 0(假) 非 0 (真) 表达式 3 非 0 (真) 表达式 4 非 0 (真) 0(假)
语句1
语句2
语句3
语句4
语句5
例子:
#include<stdio.h> int main() {double score; scanf("%lf",&score); if(score>=90) printf("A\n"); else if(score>=80) printf("B\n"); else if(score>=70) printf("C\n"); else if(score>=60) printf("D\n"); else printf("E\n")s=2 -11 3 res=-2 */