C++: 循环结构

最后更新:2026-08-26

假设你要在屏幕上输出 "Hello" 100 次,你会怎么写?

复制粘贴 100 行 std::cout << "Hello" << std::endl;?这也太傻了。

程序员的做法是——循环。让计算机重复执行某段代码,直到满足条件为止。


1. for 循环

(1) 1.1 基本语法

CPP
for (初始化; 条件; 更新) {
 // 循环体:条件为真时重复执行
}

执行流程:

  1. 初始化:只执行一次(通常用来声明循环变量)
  2. 判断条件:如果为真,执行循环体;如果为假,退出循环
  3. 执行循环体
  4. 更新:执行完循环体后,更新循环变量
  5. 回到步骤 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

代码解析:

  1. int i = 1:初始化,i 从 1 开始
  2. i <= 10:条件,只要 i ≤ 10 就继续循环
  3. std::cout << i << " ":循环体,输出 i
  4. i++:更新,i 加 1


2. while 循环

(1) 2.1 基本语法

CPP
while (条件) {
 // 循环体:条件为真时重复执行
}

执行流程:

  1. 判断条件
  2. 如果为真,执行循环体
  3. 回到步骤 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. 执行循环体(至少执行一次
  2. 判断条件
  3. 如果为真,回到步骤 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 至少要执行一次 循环体至少执行一次

选择建议:



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	
...

💡 执行流程:



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(不推荐替代方案)。

📖 小节


📝 作业

  1. 基础题 (Difficulty ⭐): 用 for 循环输出 1-100 中所有能被 3 整除的数。

  2. 进阶题 (Difficulty ⭐⭐): 用嵌套循环打印以下图案:

TEXT 📖 仅展示
*
**
***
****
*****
  1. 挑战题 (Difficulty ⭐⭐⭐): 编写一个程序,让用户输入一个正整数 n,输出 n 行的杨辉三角。
TEXT 📖 仅展示
请输入行数:5
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1

9. 🚀 下一步

学会了循环,接下来我们学习 函数(第08课)—— 把代码封装成可复用的模块,让程序更简洁、更易维护!

Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏