switch分支结构语句
基本语法
switch(被选变量) {
case 值1:
// 代码块1
break;
case 值2:
// 代码块2
break;
case 值3:
// 代码块3
break;
default:
// 默认代码块
}
特点
- 被选变量必须是整型或枚举类型(能够准确判断相等的类型)
- case后面必须是常量表达式(确定的值)
- break可以不写,本质上break用于跳出switch结构,不写break会继续执行下一个case中的代码(穿透执行)
- default是可有可无,当所有case都不匹配时执行,类似else
if与switch的区别
| 对比维度 | if-else if | switch |
|---|---|---|
| 条件类型 | 任意布尔表达式(可复杂) | 只能整型、字符、枚举 |
| 比较方式 | 相等、不等、大小比较 | 只能相等比较 |
| 执行方式 | 顺序判断,找到真为止 | 直接跳转到匹配的 case |
| 性能 | O(n) 时间,n 是分支数 | 编译器可优化为 O(1) 跳转表 |
| 适用场景 | 条件复杂、有范围判断 | 固定值匹配、分支多 |
| 可读性 | 条件复杂时清晰 | 分支多且固定值时清晰 |
while循环结构语句
基本语法
while(条件) {
// 循环体
// 需要改变 条件相关变量,否则可能无限循环
}
执行流程
- 检查条件是否为真
- 如果条件为真,执行循环体(通常循环体中要有更新条件变量的功能)
- 每次执行完循环体,再次检查条件,直到条件为假
示例
// 示例1:基本用法
int i = 1;
while(i <= 5) {
cout << i << " ";
i++; // 重要:更新条件变量
}
// 输出:1 2 3 4 5
// 示例2:无限循环(通常配合 break)
int count = 0;
while(true) {
count++;
if(count >= 10) {
break; // 跳出循环
}
}
// 示例3:输入验证
int num;
cout << "请输入1-10的数:";
cin >> num;
while(num < 1 || num > 10) {
cout << "输入错误,重新输入:";
cin >> num;
}
do-while循环结构语句
基本语法
do {
// 循环体
// 至少执行一次
} while(条件); // 注意分号!
特点
- 先执行,后判断:循环体至少会执行一次
- 适用于需要先执行再检查的情况
- 末尾必须有分号
for、while与do-while的区别
| 循环类型 | 执行次数 | 检查时机 | 适用场景 |
|---|---|---|---|
| for | 0次或多次 | 先检查,后执行 | 已知循环次数、遍历 |
| while | 0次或多次 | 先检查,后执行 | 条件控制、可能不执行 |
| do-while | 至少1次 | 先执行,后检查 | 必须至少执行一次 |
理论上,在任何情况下,for和while都能够相互替换,do-while不行