C++: 循环结构
最后更新:2026-08-26
假设你要在屏幕上输出 "Hello" 100 次,你会怎么写?
复制粘贴 100 行
std::cout << "Hello" << std::endl;?这也太傻了。程序员的做法是——循环。让计算机重复执行某段代码,直到满足条件为止。
1. for 循环
(1) 1.1 基本语法
CPP
for (初始化; 条件; 更新) {
// 循环体:条件为真时重复执行
}
执行流程:
- 初始化:只执行一次(通常用来声明循环变量)
- 判断条件:如果为真,执行循环体;如果为假,退出循环
- 执行循环体
- 更新:执行完循环体后,更新循环变量
- 回到步骤 2
▶ 示例 1:输出 1-10(难度⭐)
CPP
#include <iostream>
int main() {
for (int i = 1; i <= 10; i++) {
std::cout << i << " ";
}
std::cout << std::endl;
return 0;
}
输出:
TEXT
📖 仅展示
1
2
3
4
5
6
7
8
9
代码解析:
int i = 1:初始化,i 从 1 开始i <= 10:条件,只要 i ≤ 10 就继续循环std::cout << i << " ":循环体,输出 ii++:更新,i 加 1
2. while 循环
(1) 2.1 基本语法
CPP
while (条件) {
// 循环体:条件为真时重复执行
}
执行流程:
- 判断条件
- 如果为真,执行循环体
- 回到步骤 1
💡 重点:while 循环在循环体里面更新循环变量!
▶ 示例 2:用 while 输出 1-10(难度⭐)
CPP
#include <iostream>
int main() {
int i = 1; // 初始化
while (i <= 10) { // 条件
std::cout << i << " ";
i++; // 更新(在循环体里面!)
}
std::cout << std::endl;
return 0;
}
输出:
TEXT
📖 仅展示
1 2 3 4 5 6 7 8 9 10
3. do-while 循环
(1) 3.1 基本语法
CPP
do {
// 循环体
} while (条件);
执行流程:
- 执行循环体(至少执行一次)
- 判断条件
- 如果为真,回到步骤 1
💡 重点:do-while 循环至少执行一次!
▶ 示例 3:猜数字游戏(难度⭐⭐)
CPP
#include <iostream>
#include <cstdlib>
#include <ctime>
int main() {
std::srand(static_cast<unsigned int>(std::time(nullptr)));
int secretNumber = std::rand() % 100 + 1;
int guess;
do {
std::cout << "请猜一个 1-100 的数字:";
std::cin >> guess;
if (guess > secretNumber) {
std::cout << "大了!" << std::endl;
} else if (guess < secretNumber) {
std::cout << "小了!" << std::endl;
}
} while (guess != secretNumber);
std::cout << "🎉 猜对了!答案就是 " << secretNumber << std::endl;
return 0;
}
输出:
TEXT
📖 仅展示
请猜一个 1-100 的数字:
大了!
小了!
🎉 猜对了!答案就是 42
💡 为什么用 do-while? 因为用户至少要猜一次,所以循环体至少执行一次。
4. for vs while vs do-while
| 循环类型 | 适用场景 | 特点 |
|---|---|---|
| for | 知道循环次数 | 初始化、条件、更新写在一起,结构清晰 |
| while | 不知道循环次数,但知道循环条件 | 循环体里面更新循环变量 |
| do-while | 至少要执行一次 | 循环体至少执行一次 |
选择建议:
- 如果知道循环次数(比如"输出 100 次"),用 for
- 如果不知道循环次数,但知道循环条件(比如"一直猜直到猜对"),用 while 或 do-while
5. break 和 continue
(1) 5.1 break:跳出整个循环
break 用来提前结束循环。
示例:找到第一个能被 7 整除的数(难度⭐)
CPP
#include <iostream>
int main() {
for (int i = 1; i <= 100; i++) {
if (i % 7 == 0) {
std::cout << "第一个能被 7 整除的数是:" << i << std::endl;
break; // 找到后就跳出循环
}
}
return 0;
}
(2) 5.2 continue:跳过本次循环
continue 用来跳过本次循环,直接进入下一轮。
示例:输出 1-10 中的奇数(难度⭐)
CPP
#include <iostream>
int main() {
for (int i = 1; i <= 10; i++) {
if (i % 2 == 0) {
continue; // 如果是偶数,跳过本次循环
}
std::cout << i << " ";
}
std::cout << std::endl;
return 0;
}
6. 嵌套循环
循环里面可以再放循环,这叫嵌套循环。
▶ 示例 4:打印乘法表(难度⭐⭐)
CPP
#include <iostream>
int main() {
for (int i = 1; i <= 9; i++) { // 外层循环:控制行
for (int j = 1; j <= i; j++) { // 内层循环:控制列
std::cout << j << " x " << i << " = " << i * j << "\t";
}
std::cout << std::endl; // 换行
}
return 0;
}
输出:
TEXT
📖 仅展示
1 x 1 = 1
1 x 2 = 2 2 x 2 = 4
...
💡 执行流程:
- 外层循环
i = 1:内层循环j从 1 到 1,输出 1 列 - 外层循环
i = 2:内层循环j从 1 到 2,输出 2 列 - ...
- 外层循环
i = 9:内层循环j从 1 到 9,输出 9 列
7. 无限循环(死循环)
如果循环条件永远为真,就会形成无限循环。
▶ 示例 5:无限循环(难度⭐)
CPP
#include <iostream>
int main() {
while (true) { // 条件永远为真
std::cout << "无限循环..." << std::endl;
}
return 0; // 这行永远执行不到
}
输出:
TEXT
📖 仅展示
无限循环...
💡 如何终止? 按 Ctrl + C 强制终止程序。
💡 无限循环有用吗? 有!比如服务器程序,需要一直运行等待用户请求。
8. 实战:计算阶乘
▶ 示例 6:计算 n 的阶乘(难度⭐⭐)
CPP
#include <iostream>
int main() {
int n;
std::cout << "请输入一个正整数:";
std::cin >> n;
long long factorial = 1; // 用 long long 防止溢出
for (int i = 1; i <= n; i++) {
factorial *= i;
}
std::cout << n << " 的阶乘是:" << factorial << std::endl;
return 0;
}
输出:
TEXT
📖 仅展示
请输入一个正整数:5
5 的阶乘是:120
运行效果:
TEXT
📖 仅展示
请输入一个正整数:5
5 的阶乘是:120
💡 提示: 20! 就超过了 long long 的范围,所以这里用 long long 也只能算到 20。
❓ 常见问题
Q for 循环里的分号能省略吗?
A 可以,但不推荐。
for (; i <= 10; i++) 可省略初始化,for (;;) 是无限循环(等同于 while(true))。Q while 和 for 能互相转换吗?
A 能。任何
for 循环都能改写成 while,反之亦然。选择规则:知道次数用 for,知道条件用 while。Q break 和 continue 在嵌套循环里怎么用?
A
break 只能跳出当前层循环。要跳出多层循环,可以用"标志变量"或 goto(不推荐替代方案)。📖 小节
- for 循环:知道循环次数时用
- while 循环:不知道循环次数,但知道循环条件时用
- do-while 循环:至少要执行一次时用
- break:跳出整个循环
- continue:跳过本次循环,进入下一轮
- 循环可以嵌套,内层循环每次外层循环都要完整执行一遍
📝 作业
-
基础题 (Difficulty ⭐): 用 for 循环输出 1-100 中所有能被 3 整除的数。
-
进阶题 (Difficulty ⭐⭐): 用嵌套循环打印以下图案:
TEXT
📖 仅展示
*
**
***
****
*****
- 挑战题 (Difficulty ⭐⭐⭐): 编写一个程序,让用户输入一个正整数 n,输出 n 行的杨辉三角。
TEXT
📖 仅展示
请输入行数:5
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
- for 循环:知道次数时用
- while 循环:知道条件时用
- do-while 循环:至少执行一次时用
- break 跳出循环,continue 跳过本次迭代
- 嵌套循环中外层循环一次,内层循环全部
9. 🚀 下一步
学会了循环,接下来我们学习 函数(第08课)—— 把代码封装成可复用的模块,让程序更简洁、更易维护!