C++循环语句 #
一、while循环 #
1.1 基本语法 #
cpp
while (condition) {
// 循环体
}
1.2 基本使用 #
cpp
// 打印1到10
int i = 1;
while (i <= 10) {
std::cout << i << " ";
i++;
}
// 输出:1 2 3 4 5 6 7 8 9 10
1.3 循环流程 #
text
开始
↓
判断条件 → false → 结束
↓ true
执行循环体
↓
返回判断条件
1.4 计数循环 #
cpp
// 倒计时
int count = 5;
while (count > 0) {
std::cout << count << std::endl;
count--;
}
std::cout << "发射!" << std::endl;
1.5 条件循环 #
cpp
// 读取输入直到特定值
int sum = 0;
int value;
std::cout << "输入数字(0结束): ";
std::cin >> value;
while (value != 0) {
sum += value;
std::cin >> value;
}
std::cout << "总和: " << sum << std::endl;
1.6 无限循环 #
cpp
// 无限循环
while (true) {
// 需要在内部使用break退出
if (shouldExit) {
break;
}
}
二、do-while循环 #
2.1 基本语法 #
cpp
do {
// 循环体
} while (condition);
2.2 基本使用 #
cpp
// 打印1到10
int i = 1;
do {
std::cout << i << " ";
i++;
} while (i <= 10);
2.3 与while的区别 #
do-while至少执行一次循环体。
cpp
// while:可能不执行
int x = 10;
while (x < 5) {
std::cout << "不会执行" << std::endl;
}
// do-while:至少执行一次
int y = 10;
do {
std::cout << "执行一次" << std::endl;
} while (y < 5);
2.4 输入验证 #
cpp
int number;
do {
std::cout << "请输入正数: ";
std::cin >> number;
} while (number <= 0);
std::cout << "你输入的正数是: " << number << std::endl;
2.5 菜单选择 #
cpp
int choice;
do {
std::cout << "\n===== 菜单 =====" << std::endl;
std::cout << "1. 新建" << std::endl;
std::cout << "2. 打开" << std::endl;
std::cout << "3. 退出" << std::endl;
std::cout << "请选择: ";
std::cin >> choice;
switch (choice) {
case 1: /* 新建 */ break;
case 2: /* 打开 */ break;
case 3: std::cout << "退出" << std::endl; break;
default: std::cout << "无效选择" << std::endl;
}
} while (choice != 3);
三、for循环 #
3.1 基本语法 #
cpp
for (初始化; 条件; 更新) {
// 循环体
}
3.2 基本使用 #
cpp
// 打印1到10
for (int i = 1; i <= 10; i++) {
std::cout << i << " ";
}
3.3 执行流程 #
text
初始化
↓
判断条件 → false → 结束
↓ true
执行循环体
↓
更新
↓
返回判断条件
3.4 多变量 #
cpp
// 多个循环变量
for (int i = 0, j = 10; i < j; i++, j--) {
std::cout << i << " " << j << std::endl;
}
3.5 省略部分 #
cpp
// 省略初始化
int i = 0;
for (; i < 10; i++) {
std::cout << i << " ";
}
// 省略条件(无限循环)
for (int i = 0; ; i++) {
if (i >= 10) break;
std::cout << i << " ";
}
// 省略更新
for (int i = 0; i < 10; ) {
std::cout << i << " ";
i++;
}
// 全部省略(无限循环)
for (;;) {
// 需要break退出
}
3.6 常见应用 #
cpp
// 遍历数组
int arr[] = {1, 2, 3, 4, 5};
for (int i = 0; i < 5; i++) {
std::cout << arr[i] << " ";
}
// 计算阶乘
int n = 5;
int factorial = 1;
for (int i = 1; i <= n; i++) {
factorial *= i;
}
// factorial = 120
// 打印乘法表
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
std::cout << j << "*" << i << "=" << i*j << " ";
}
std::cout << std::endl;
}
四、范围for循环(C++11) #
4.1 基本语法 #
cpp
for (declaration : range) {
// 循环体
}
4.2 基本使用 #
cpp
// 遍历数组
int arr[] = {1, 2, 3, 4, 5};
for (int x : arr) {
std::cout << x << " ";
}
// 遍历vector
std::vector<int> vec = {1, 2, 3, 4, 5};
for (int x : vec) {
std::cout << x << " ";
}
// 遍历string
std::string str = "Hello";
for (char c : str) {
std::cout << c << " ";
}
4.3 引用修改 #
cpp
std::vector<int> vec = {1, 2, 3, 4, 5};
// 使用引用修改元素
for (int& x : vec) {
x *= 2; // 每个元素乘以2
}
// 使用const引用(只读)
for (const int& x : vec) {
std::cout << x << " "; // 只读访问
}
4.4 使用auto #
cpp
std::vector<int> vec = {1, 2, 3, 4, 5};
// 使用auto
for (auto x : vec) {
std::cout << x << " ";
}
// 使用auto引用
for (auto& x : vec) {
x *= 2;
}
// 使用const auto引用
for (const auto& x : vec) {
std::cout << x << " ";
}
4.5 初始化语句(C++20) #
cpp
// C++20:在范围for中初始化
for (auto vec = getVector(); const auto& x : vec) {
std::cout << x << " ";
}
五、嵌套循环 #
5.1 基本使用 #
cpp
// 打印矩形
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 5; j++) {
std::cout << "* ";
}
std::cout << std::endl;
}
// 输出:
// * * * * *
// * * * * *
// * * * * *
5.2 打印三角形 #
cpp
// 直角三角形
for (int i = 1; i <= 5; i++) {
for (int j = 1; j <= i; j++) {
std::cout << "* ";
}
std::cout << std::endl;
}
// 输出:
// *
// * *
// * * *
// * * * *
// * * * * *
5.3 打印菱形 #
cpp
int n = 5;
// 上半部分
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n - i; j++) {
std::cout << " ";
}
for (int j = 1; j <= 2 * i - 1; j++) {
std::cout << "*";
}
std::cout << std::endl;
}
// 下半部分
for (int i = n - 1; i >= 1; i--) {
for (int j = 1; j <= n - i; j++) {
std::cout << " ";
}
for (int j = 1; j <= 2 * i - 1; j++) {
std::cout << "*";
}
std::cout << std::endl;
}
5.4 二维数组遍历 #
cpp
int matrix[3][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++) {
std::cout << matrix[i][j] << " ";
}
std::cout << std::endl;
}
六、循环选择指南 #
6.1 while适用场景 #
- 不确定循环次数
- 需要先判断条件
- 读取输入直到特定值
cpp
// 读取输入
while (std::cin >> value && value != 0) {
// 处理
}
6.2 do-while适用场景 #
- 至少执行一次
- 输入验证
- 菜单选择
cpp
// 输入验证
do {
std::cin >> value;
} while (value < 0);
6.3 for适用场景 #
- 已知循环次数
- 需要索引
- 遍历数组
cpp
// 已知次数
for (int i = 0; i < n; i++) {
// 处理
}
6.4 范围for适用场景 #
- 遍历容器
- 不需要索引
- 代码简洁
cpp
// 遍历容器
for (const auto& item : container) {
// 处理
}
七、最佳实践 #
7.1 避免无限循环 #
cpp
// 错误:忘记更新循环变量
int i = 0;
while (i < 10) {
std::cout << i << std::endl;
// 忘记 i++
}
// 正确
int i = 0;
while (i < 10) {
std::cout << i << std::endl;
i++;
}
7.2 使用有意义的变量名 #
cpp
// 不推荐
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
// ...
}
}
// 推荐
for (int row = 0; row < rows; row++) {
for (int col = 0; col < cols; col++) {
// ...
}
}
7.3 优先使用范围for #
cpp
// 不推荐
for (size_t i = 0; i < vec.size(); i++) {
std::cout << vec[i] << std::endl;
}
// 推荐
for (const auto& item : vec) {
std::cout << item << std::endl;
}
7.4 避免修改循环变量 #
cpp
// 不推荐
for (int i = 0; i < 10; i++) {
i++; // 在循环体内修改循环变量
}
// 推荐
for (int i = 0; i < 10; i += 2) {
// 在更新部分修改
}
八、总结 #
循环语句对比 #
| 循环类型 | 执行次数 | 适用场景 |
|---|---|---|
| while | 0次或多次 | 不确定次数,先判断 |
| do-while | 至少1次 | 至少执行一次 |
| for | 0次或多次 | 已知次数,需要索引 |
| 范围for | 0次或多次 | 遍历容器 |
选择建议 #
- 已知次数 → for
- 遍历容器 → 范围for
- 先判断条件 → while
- 至少执行一次 → do-while
下一步,让我们学习循环控制!
最后更新:2026-03-26