Skip to content

9. while 循环:条件不满足决不罢休

前置学习:if-else 分支自增与快捷赋值

想象一下,如果要在屏幕上打印 10000 次 "Hello World",写 10000 行 cout 显然是极其愚蠢的。计算机最擅长的就是做重复的苦力活,而驱使它做重复劳动的指令就是循环

1. while 循环的基本语法

while 的英文意思是“当...的时候”。它的语法和 if 非常像,但有着本质的区别:

  • if:条件成立,大括号里的代码只执行一次
  • while:条件成立,大括号里的代码会一直重复执行,直到条件不成立为止!
cpp
// 目标:打印数字 1 到 5
int i = 1;

while (i <= 5) {
    cout << i << endl;
    i++; // 极其重要:让 i 每次加 1
}

2. 循环三要素(避坑心法)

要写出一个安全、正确的循环,你的代码中必须明确包含以下“三要素”,缺一不可:

  1. 初始状态:循环开始前,变量的值是多少?(如上面的 int i = 1;
  2. 循环条件:电脑在什么情况下可以继续执行?(如上面的 i <= 5
  3. 步长(状态更新):每次执行完,变量发生什么变化?(如上面的 i++

3. 💀 致命陷阱:死循环 (Infinite Loop)

在 OI 赛场上,如果你提交的代码被评测机判定为 TLE (Time Limit Exceeded,超时),90% 的概率是因为你写出了死循环。

死循环是怎么产生的?通常是因为你忘记写“第三要素(状态更新)”!

cpp
int hp = 10;
while (hp > 0) {
    cout << "怪物还在存活!" << endl;
    // 致命错误:这里忘记写 hp-- 了!
}

因为 hp 永远是 10,hp > 0 这个条件永远为真。电脑会以每秒几亿次的速度疯狂执行大括号里的代码,直到把时间耗尽或者程序崩溃。

4. 实战:未知的重复次数

while 循环最强大的地方在于,它特别适合处理**“不知道具体要循环多少次,只知道停止条件”**的问题。 比如一个非常经典的数字拆解题:把一个正整数的每一位数字都提取出来。

cpp
int n = 12345;

// 只要 n 还没有被除到 0,就一直循环
while (n > 0) {
    cout << n % 10 << " "; // 提取最后一位
    n = n / 10;            // 砍掉最后一位(这是我们的状态更新!)
}
// 最终输出结果将会是:5 4 3 2 1

5. 动手实践

md
1. 打开左下角的代码沙盒。
2. 编写一个程序:利用 `while` 循环,计算从 1 加到 100 的总和。
   *(提示:你需要两个变量,一个用来当计数器 `i`,一个用来存总和 `sum`。每次循环把 `i` 累加进 `sum` 里。)*
💻 运行代码

C++ 在线评测沙盒

📥 标准输入 (cin):
📤 终端输出 (cout):