Appearance
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. 循环三要素(避坑心法)
要写出一个安全、正确的循环,你的代码中必须明确包含以下“三要素”,缺一不可:
- 初始状态:循环开始前,变量的值是多少?(如上面的
int i = 1;) - 循环条件:电脑在什么情况下可以继续执行?(如上面的
i <= 5) - 步长(状态更新):每次执行完,变量发生什么变化?(如上面的
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 15. 动手实践
md
1. 打开左下角的代码沙盒。
2. 编写一个程序:利用 `while` 循环,计算从 1 加到 100 的总和。
*(提示:你需要两个变量,一个用来当计数器 `i`,一个用来存总和 `sum`。每次循环把 `i` 累加进 `sum` 里。)*