练习
学完本章你应该掌握
- 能根据简单条件写出
if、if-else、if-else if-else三种常见判断结构。 - 能处理区间判断、非法输入和兜底分支,避免边界写错或漏掉异常情况。
- 能在合适场景下使用
switch完成枚举判断和区间判断,并理解default与fallthrough的作用。 - 能使用
if 初始化语句; 条件处理 map 查询等“先取值再判断”的写法,并知道变量作用域只在当前分支内有效。 - 能把本章知识迁移到成绩判断、星期转换、角色分流、资料查询等基础控制台场景。
简单
第 1 题:判断是否及格
编写一个程序,完成下面要求:
- 提示用户输入一个整数分数
- 如果分数大于等于
60,输出及格 - 否则输出
不及格
查看参考答案
| |
第 2 题:补全年龄区间判断
补全下面代码中的空白,让程序按照下面规则输出结果:
age <= 0输出未出生1 ~ 18输出未成年19 ~ 35输出青年- 其他情况输出
中年
| |
查看参考答案
补全后的代码如下:
| |
说明:写成 else if age <= 18 和 else if age <= 35 就可以了,因为前面的不满足时才会继续判断后面的分支。
第 3 题:把星期数字转成文字
编写一个程序,完成下面要求:
- 提示用户输入一个整数
week - 如果输入
1,输出周一 - 如果输入
2,输出周二 - 如果输入
3,输出周三 - 如果输入
4,输出周四 - 如果输入
5,输出周五 - 如果输入
6或7,输出周末 - 其他情况输出
输入错误
要求使用 switch 实现。
查看参考答案
| |
第 4 题:修正会重复输出的年龄判断
下面程序的目标是根据年龄输出一个结果,但它现在有逻辑问题。
请改正后让输入 12 时只输出一行 未成年。
| |
查看参考答案
一种可行的改法如下:
| |
说明:原程序用了多个并列 if,条件又没有互斥,所以一次输入可能命中多个分支。这里改成 if -> else if -> else 更合适。
第 5 题:写出 fallthrough 的输出结果
阅读下面代码,写出它的输出结果:
| |
查看参考答案
| |
说明:fallthrough 会直接进入下一个 case 执行,不会重新判断下一个 case 的条件。
一般
第 6 题:用 if 查询年龄表
编写一个程序,完成下面要求:
- 先准备一个 map:
| |
- 再读取一个姓名
- 使用
if 初始化语句; 条件的写法判断这个姓名是否存在于 map 中 - 如果存在,输出
阿斌 的年龄是 21 - 如果不存在,输出
没有找到 阿华 的年龄信息
其中姓名要替换成用户真正输入的内容。
查看参考答案
| |
说明:age 和 ok 是在 if 初始化语句里声明的,它们只在当前 if/else 代码块中可用。
第 7 题:用 switch {} 判断成绩等级
编写一个程序,完成下面要求:
- 读取一个整数分数
- 如果分数小于
0或大于100,输出分数非法 - 如果分数在
90 ~ 100,输出A - 如果分数在
80 ~ 89,输出B - 如果分数在
60 ~ 79,输出C - 其他情况输出
D
要求使用 switch {} 实现区间判断。
查看参考答案
| |
说明:switch {} 里每个 case 后面直接写条件,写区间判断时通常比多层 if-else 更整齐。
第 8 题:先校验姓名,再分配角色欢迎语
编写一个程序,完成下面要求:
- 先定义两个变量:姓名
name和角色role,值可以自行设置 - 如果
name是空字符串,输出姓名不能为空并结束程序 - 如果
role是admin,输出管理员,欢迎你 - 如果
role是teacher,输出老师,欢迎你 - 如果
role是student,输出同学,欢迎你 - 其他情况输出
未知角色
要求:
- 姓名校验使用
if - 角色分流使用
switch
查看参考答案
| |
说明:这道题把 if 和 switch 放在同一个小场景里,前者做输入校验,后者做状态分流。
进阶
下面两题会把 if 和 switch 放到更完整的输入处理场景里,重点考察分支顺序、边界判断和多知识点组合。
第 9 题:查询成绩并输出等级
已知有一份成绩表:
| |
请编写一个程序,完成下面要求:
- 读取一个姓名
- 先用
if 初始化语句; 条件判断这个姓名是否存在于成绩表中 - 如果不存在,输出
没有找到该学生 - 如果存在,再根据分数输出等级:
90 ~ 100输出A80 ~ 89输出B60 ~ 79输出C其他输出D - 最后输出一行完整结果,例如:
| |
查看参考答案
| |
说明:这道题先用 if 处理“有没有这个人”,再用 switch {} 处理“这个人的分数属于哪个区间”,是很常见的两段式判断。
第 10 题:快递费用判断
编写一个程序,完成下面要求:
- 读取两个输入:快递类型
kind和重量weight - 如果
weight <= 0,输出重量非法并结束程序 - 运费规则如下:
standard:
weight <= 1 时运费 8
其他情况运费 12
express:
weight <= 1 时运费 12
其他情况运费 18
其他快递类型输出 未知快递类型
- 如果类型合法,最后输出:
| |
要求:
- 先用
if处理重量非法 - 再用
switch判断快递类型
查看参考答案
| |
说明:这道题里 switch 先区分类型,进入具体类型后再用 if 做更细的条件判断,这是一种很常见的组合写法。