多分支选择结构 —— case匹配、break跳转与default默认
2025年真题 · 程序填空
| 档次 | 用电量C(度) | 单价(元/度) |
|---|---|---|
| 第一档 | 0 < C ≤ 200 | 0.58 |
| 第二档 | 200 < C ≤ 500 | 0.73 |
| 第三档 | C > 500 | 0.92 |
答案解析 · 阶梯电价
预计算第一档总费用(200度×0.58元/度)
读取用户输入的用电量c
第一档电费 = 用电量 × 0.58
处理第三档(C>500)的情况
这是一个整数除法取整技巧,将用电量映射到switch的case值:
| c范围 | (c+99)/100 | 匹配case | 档次 |
|---|---|---|---|
| 1~100 | 1 | case 0~2 | 第一档 |
| 101~200 | 2 | case 0~2 | 第一档 |
| 201~300 | 3 | case 3~5 | 第二档 |
| 301~500 | 4~5 | case 3~5 | 第二档 |
| 501+ | 6+ | default | 第三档 |
例2 · 程序分析结果题
① x>2 → 2>2 → 0(假)
② 匹配 case 0,进入内层switch
③ z==5 → 5==5 → 1(真)
④ 匹配 case 1 → 输出"4"
⑤ break跳出内层switch
⑥ 继续执行外层 default → 输出"6"
switch 语句 · 基本语法
表达式必须是整型(int/char等),不能是浮点型或字符串。计算后与各case比较。
必须是整型常量表达式,不能是变量。各case值必须互不相同。
每个case块末尾应使用break跳出switch,否则会继续执行后续case(穿透效应)。
switch 语句 · 进阶规则
当case块没有break时,执行完该case后会继续执行下一个case的代码,直到遇到break或switch结束。
✓ 利用穿透可实现多case共享代码
default是可选的,用于处理所有case都不匹配的情况。如果没有default且无匹配,switch直接跳过。
⚠️ default通常放在最后,但语法上可放任意位置
练习1 · 程序填空
scanf传入month的地址
春季包含3、4、5月,利用穿透共享代码
夏季输出后需要break跳出switch
练习2 · 程序分析结果题
| 步骤 | 操作 | a值 |
|---|---|---|
| 初始 | a=19 | 19 |
| ① | a%7 = 19%7 = 5 | 19 |
| ② | 匹配case 5: a+=2 | 21 |
| ③ | 穿透→case 6: a+=3 (无break!) | 24 |
| ④ | 穿透→default: a+=4 (无break!) | 28 |
知识点3 · 完
① switch表达式必须为整型,case必须为常量
② 无break会发生穿透,可利用此特性共享代码
③ break只跳出最近一层switch(嵌套时注意)
④ default处理无匹配情况,是可选的
下一篇:知识点4 巩固练习题 →