选择结构综合练习 —— 涵盖if、if嵌套、switch全部考点
综合练习 · 题目分布
分析if-else条件判断程序的输出
成绩等级转换switch填空
找出并修正if嵌套中的错误
分析switch穿透效应的输出
BMI指数分级填空
修正switch语句中的错误
if与switch转换设计题
第1题 · 程序分析结果题
| 条件 | 判断 | 结果 |
|---|---|---|
| a>5 && b<15 | 10>5✓ && 20<15✗ | 假 |
| a>5 && b>=15 | 10>5✓ && 20≥15✓ | 真 |
① 第一个条件 a>5 && b<15 中,b=20不小于15,为假
② 进入 else if,条件为真
③ 执行 c=b-a=20-10=10
第2题 · 程序填空题
将成绩除以10取整,把0~100映射到0~10的case值。如95→9,82→8。
case 8输出"B"后需要break跳出,否则会穿透到case 7输出"C"。
score/10结果为0~5时(即60分以下),用default输出"E"。
第3题 · 程序改错题
问题:if(a>b)没有花括号,导致else与内层if(a>c)配对
改正:添加花括号明确配对关系
if(a>b) { if(a>c)...else... } else {...}
问题:else本意与if(a>b)配对,实际与最近的if(a>c)配对
改正:用花括号将内层if-else括起,使外层else正确配对
第4题 · 程序分析结果题
| 步骤 | 操作 | y值 | break? |
|---|---|---|---|
| 初始 | x=3, y=0 | 0 | — |
| ① | 匹配case 3: y+=3 | 3 | 无 |
| ② | 穿透→case 4: y+=4 | 7 | 有 |
| ③ | break跳出switch | 7 | — |
第5题 · 程序填空题
BMI计算公式:体重÷身高²。注意使用浮点除法。
BMI<18.5为偏瘦,18.5~24正常,24~28偏胖,≥28肥胖。
| BMI范围 | 等级 |
|---|---|
| < 18.5 | 偏瘦 |
| 18.5 ~ 23.9 | 正常 |
| 24 ~ 27.9 | 偏胖 |
| ≥ 28 | 肥胖 |
第6题 · 程序改错题
分析:switch(day)语法本身正确,但应检查输入范围
修正:在switch前添加范围检查
if(day<1||day>7){printf("无效");return 0;}
或依赖default处理(非必须修正,看题目要求)
问题:case 1输出"Monday"后没有break,会穿透到case 2
改正:添加break语句
case 1: printf("Monday\n"); break;
第7题 · 程序设计题
某快递公司收费规则:重量w(kg)≤1kg收费10元;1kg<w≤5kg收费15元;5kg<w≤10kg收费20元;w>10kg收费25元。
要求:先用if-else if语句实现,再将if-else if转换为等价的switch语句实现。
全部题目 · 答案汇总
| 题号 | 题型 | 考点 | 答案 | 关键点 |
|---|---|---|---|---|
| 1 | 程序分析结果 | if-else if条件判断 | c=10 | 逻辑运算符&&、else if链 |
| 2 | 程序填空 | switch成绩等级 | ①score/10 ②break; ③default: | 整数除法映射、case穿透 |
| 3 | 程序改错 | if嵌套else配对 | 添加花括号{} | 悬空else问题 |
| 4 | 程序分析结果 | switch穿透效应 | y=7 | 无break穿透到下一个case |
| 5 | 程序填空 | if-else if BMI分级 | ①w/(h*h) ②bmi<18.5 | 浮点运算、范围判断 |
| 6 | 程序改错 | switch缺break | case 1添加break; | break防止穿透 |
| 7 | 程序设计 | if与switch转换 | 见第9页完整代码 | 范围问题映射技巧 |
巩固练习 · 完
if语句:非零为真、else配对、三目运算符
if嵌套:else与最近if配对,用花括号明确关系
switch:case穿透、break跳出、default默认
转换:if与switch可等价转换,注意范围映射
祝考试顺利!