控制语句
Q
程序三大基本结构分别是什么?
重点
+
Q
什么是控制语句?
+
C++控制语句是程序中的指令,用于控制代码的执行顺序和逻辑。它们让程序能够根据条件做出判断、重复执行特定任务,或者在特定点进行跳转。
简单来说,它们决定了代码是 “按顺序执行”、“在特定条件下执行” 还是 “重复执行”。
主要包括三类:
- 条件语句(
if,switch):用于判断,根据条件的真假来决定执行哪块代码。 - 循环语句(
for,while):用于重复执行某段代码,直到满足退出条件。 - 跳转语句(
break,continue,return):用于中断当前的正常执行流程,跳转到程序的另一个部分。
Q
if语句的语法是怎样的?
+
if 语句是最基础的条件控制语句,用于根据条件执行不同的代码块。
语法
cpp
// 单 if 结构
if (条件表达式) {
// 条件为真时执行的代码
// 可以包含多条语句
}1
2
3
4
5
6
2
3
4
5
6
cpp
// if-else 结构
if (条件表达式) {
// 条件为真时执行的代码
} else {
// 条件为假时执行的代码
}1
2
3
4
5
6
7
2
3
4
5
6
7
cpp
// if-else-if 结构
if (条件1) {
// 条件1为真时执行
} else if (条件2) {
// 条件2为真时执行
} else {
// 以上条件都不满足时执行
}1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
- 条件表达式:可以是任何返回布尔值的表达式
- 控制的范围:
代码块或单条语句 - 省略花括号时,只有紧随if条件后的第一条语句属于if分支
- 建议始终使用 花括号 ,即使代码块只有一条语句
- 可以嵌套使用if语句
Q
switch语句的语法是怎样的?
+
switch 语句就像是一个智能选择器,它可以根据一个变量的值,快速跳转到对应的代码块执行。
就像自动售货机:你按 1 出可乐,按 2 出雪碧。
cpp
switch (表达式) {
case 常量1:
// 当表达式等于常量1时执行的代码
break;
case 常量2:
// 当表达式等于常量2时执行的代码
break;
// 可以有任意数量的case语句
default:
// 当表达式不等于任何case时执行的代码
}1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
cpp
int choice = 1;
switch(choice) {
case 1: cout << "可乐"; break;
case 2: cout << "雪碧"; break;
}1
2
3
4
5
6
2
3
4
5
6
- 表达式类型:返回值必须是
整型、字符、布尔类型或枚举类型 - case标签:必须是常量表达式,不能有重复的case值
- break语句:用于退出switch块,如果没有break,会继续执行下一个case,称为
case穿透, - default分支:可选部分,处理所有未匹配的情况
Q
for循环语法是怎么样的?
+
for循环是C++中最常用的循环结构之一,特别适合在已知循环次数的情况下使用。
cpp
for (初始化语句; 条件表达式; 更新语句) {
// 循环体
// 当条件为真时重复执行的代码
}1
2
3
4
2
3
4
cpp
// 基本用法
for (int i = 0; i < 5; i++) {
cout << i << " "; // 输出: 0 1 2 3 4
}
// 多变量初始化
for (int i = 0, j = 10; i < j; i++, j--) {
cout << i << ":" << j << " "; // 输出: 0:10 1:9 2:8 3:7 4:6
}
// 省略部分(无限循环)
for (;;) {
// 需要内部有break语句退出
break;
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
初始化语句:
- 在循环开始前执行一次
- 通常用于声明和初始化循环计数器
- 可以声明多个变量,用逗号分隔
- 循环变量的作用域仅限于for循环内部
条件表达式:
- 每次循环前检查
- 如果为true,执行循环体
- 如果为false,退出循环
更新语句:
- 每次循环结束后执行
- 通常用于更新循环计数器
Q
什么是范围for循环
+
范围for循环是C++11引入的一种简化循环语法,专门用于遍历容器或数组中的所有元素。
cpp
for (元素类型 变量名 : 容器或数组) {
// 使用变量的循环体
}1
2
3
2
3
cpp
// 遍历数组
int arr[] = {1, 2, 3, 4, 5};
for (int num : arr) {
cout << num << " "; // 输出: 1 2 3 4 5
}
// 遍历字符串
string str = "C++";
for (char c : str) {
cout << c << " "; // 输出: C + +
}1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
cpp
int arr[] = {1, 2, 3, 4, 5};
// 传统for循环
for (int i = 0; i < 5; i++) {
cout << arr[i] << " ";
}
// 范围for循环(更简洁)
for (int num : arr) {
cout << num << " ";
}1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
优点
- 自动遍历:自动从容器/数组的第一个元素开始,逐个访问直到最后一个元素
- 类型推断:可以使用
auto关键字让编译器自动推断元素类型 - 无需索引:不需要手动管理索引或迭代器
局限性
- 不能用于需要修改容器结构的情况(如遍历时删除元素)
- 不能直接获取当前元素的索引位置
Q
while循环的语法是怎样的?
+
while循环是C++中用于在条件为真时,重复执行代码块的基本循环结构。
基础语法
cpp
while (条件表达式) { // 任何返回布尔值的表达式
// 循环体
// 当条件为真时重复执行的代码
}1
2
3
4
2
3
4
cpp
do {
// 循环体
// 至少执行一次,然后检查条件
} while (条件表达式);1
2
3
4
2
3
4
cpp
// 基本用法
int i = 0;
while (i < 5) {
cout << i << " "; // 输出: 0 1 2 3 4
i++;
}
// 无限循环(需要有退出机制)
while (true) {
// 需要内部有break语句退出
if (条件) break;
}
// 读取输入直到特定值
int num;
while (cin >> num && num != 0) {
cout << "输入了: " << num << endl;
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
执行流程
- 条件检查:首先评估条件表达式
- 执行循环体:如果条件为真,执行循环体内的代码
- 重复检查:执行完循环体后,再次检查条件
- 循环终止:当条件变为假时,退出循环
while循环 更适合循环次数不确定的情况,而 for循环 更适合已知或可计算循环次数的情况。
Q
break语句的用法?
+
break 是C++中的流程控制语句,用于立即终止当前所在的 循环 或 switch语句。
cpp
// 在循环中提前退出
for (int i = 0; i < 10; i++) {
if (i == 5) {
break; // 当i等于5时退出循环
}
cout << i << " "; // 输出: 0 1 2 3 4
}1
2
3
4
5
6
7
2
3
4
5
6
7
cpp
// 在switch语句中防止case穿透
switch (value) {
case 1:
cout << "一";
break; // 执行完case1的代码后,结束switch语句
case 2:
cout << "二";
break;
}1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
cpp
// 满足条件时提前终止循环
while (true) {
int input;
cin >> input;
if (input == 0) break; // 输入0时退出循环
}1
2
3
4
5
6
2
3
4
5
6
cpp
// 在嵌套循环中退出内层循环
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (i == 1 && j == 1) break; // 只退出内层循环
cout << i << "," << j << " ";
}
}1
2
3
4
5
6
7
2
3
4
5
6
7
break只能用于循环(for/while/do-while)和switch语句中- 在嵌套循环中,
break只退出当前所在的最近一层循环 - 滥用
break可能会降低代码可读性,应谨慎使用 - 在
switch语句中,忘记写break会导致case穿透(执行下一个case的代码)
Q
continue语句的用法?
+
continue控制语句,用于跳过当前循环迭代的剩余部分,直接进入下一次循环的条件检查。
cpp
// 跳过当前迭代
for (int i = 0; i < 5; i++) {
if (i == 2) {
continue; // 跳过i=2的这次迭代
}
cout << i << " "; // 输出: 0 1 3 4
}1
2
3
4
5
6
7
2
3
4
5
6
7
cpp
// 条件性处理元素
for (int num : {1, 2, 3, 4, 5}) {
if (num % 2 == 0) continue; // 跳过偶数
cout << num << " "; // 输出: 1 3 5
}1
2
3
4
5
2
3
4
5
cpp
// 过滤不需要处理的情况
while (读取数据) {
if (数据无效) continue; // 跳过无效数据
处理有效数据();
}1
2
3
4
5
2
3
4
5
continue只能用于循环结构(for/while/do-while)- 在
for循环中,continue会跳过循环体剩余部分,但仍会执行更新语句 - 在
while/do-while循环中,continue会直接跳转到条件检查 - 过度使用
continue可能会降低代码可读性,应考虑是否可以用if-else替代
Q
break语句和continue语句的区别
+
| 特性 | break | continue |
|---|---|---|
| 作用 | 完全退出当前循环或switch | 跳过当前迭代,继续下一次循环 |
| 适用场景 | 循环和switch | 仅循环 |
| 嵌套循环 | 只影响当前层循环 | 只影响当前层循环 |
cpp
// 使用break
for (int i = 0; i < 5; i++) {
if (i == 3) break;
cout << i << " "; // 输出: 0 1 2
}
// 使用continue
for (int i = 0; i < 5; i++) {
if (i == 3) continue;
cout << i << " "; // 输出: 0 1 2 4
}1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11