B49
switch 语句与 break
引入
章前总览 switch 用表达式的值去匹配各个 case,写多分支往往更整齐。关键:匹配后会继续往下跑,通常每个分支末尾要 break。
本节要点:
- switch / case / default 骨架
- 必须 break,否则“穿透”
- 多个 case 可共用同一段代码
1 C1. 一般形式
括号里的表达式、以及每个 case 后的常量,都必须是整型或字符型。
骨架
switch (表达式) {
case 常量1: 语句1; break;
case 常量2: 语句2; break;
...
default: 语句; // 可省略
}
- 找到匹配的 case 后,从那里开始顺序执行,不再重新判断。
- 没有匹配且没有 default 时,什么也不做。
2 C2. 为什么要 break
不加 break 会“穿透”到后面的 case。
补充说明
不推荐
switch (r) {
case 1: d = 0.98;
case 2: d = 0.88;
case 3: d = 0.78;
case 4: d = 0.68;
}
问题:从匹配处一直执行到末尾,后面的赋值覆盖前面的。
推荐写法
switch (r) {
case 1: d = 0.98; break;
case 2: d = 0.88; break;
case 3: d = 0.78; break;
case 4: d = 0.68; break;
}
等价于 if / else if 链。最后一个 break 可省略,但写上也无妨。
多个 case 共用代码
- 可以写成若干空 case 落在同一段语句上,只在最后加 break。
- 例:等级 1、2、3 都打 0.78:
case 1: case 2: case 3: d=0.78; break;
3 案例:VIP 顾客等级(2)
用 switch 重写案例1。
参考代码
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
int r, m;
double d, m1;
cin >> r >> m;
switch (r) {
case 1: d = 0.98; break;
case 2: d = 0.88; break;
case 3: d = 0.78; break;
case 4: d = 0.68; break;
}
m1 = m * d;
cout << fixed << setprecision(1) << m1 << endl;
return 0;
}
小结
switch 三记:
匹配整型/字符 → 进对应 case
默认往下穿透 → 记得 break
若干 case 可共用一段语句
✓
里程碑达成:
下一节练习:多分支闰年、判断位数、简易计算器。