备战大晨7月 GESP C++ 1级(21):while 循环——"只要还没到,就一直走"

上一篇聊完 for 循环的嵌套,大晨做练习正确率还行,我寻思趁热打铁,今天把 while 循环也拿下。

for 和 while 到底啥区别

大晨问我:”爸,for 循环不也能一直转吗,为啥还要学 while?”

这个问题问得好。我跟他打了个比方:for 循环像你妈给你排好的周末计划表——几点干啥都定好了;while 循环像你爸周末——“只要天没黑,就一直玩手机”。

一个知道要循环多少次,一个是”满足条件就一直干”。

语法其实很简单:

1
2
3
while (条件) {
// 干活
}

只要条件为真,就反复执行花括号里的内容。

最经典的例子:求 1 到 n 的和

这个题 for 循环写过,今天用 while 再来一遍:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
using namespace std;

int main() {
int n;
cin >> n;

int sum = 0;
int i = 1;
while (i <= n) {
sum = sum + i;
i = i + 1;
}

cout << sum << endl;
return 0;
}

输入 100,输出 5050

大晨盯着看了半天,说:”爸,这不就是 for 循环拆开了吗?”

还真是。 for 循环的 int i = 1; i <= n; i++ 三部分,while 把初始化放外面、条件放括号里、更新放花括号里。拆散了而已。

但他马上发现一个要命的细节:如果把 i = i + 1 那行删掉会怎样?

我说你试试。

他删了,运行,屏幕上卡了好一会儿,没反应。我说恭喜你,这叫死循环,i 永远是 1,永远小于 n,程序永远停不下来。

大晨乐了:”像奶奶让我吃菜,只要我碗里还有,就一直夹。”

……还真挺形象。

再来一个:倒计时发射

换个有意思的题,倒计时:

1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
using namespace std;

int main() {
int count = 5;
while (count > 0) {
cout << count << " ";
count = count - 1;
}
cout << "发射!" << endl;
return 0;
}

输出:5 4 3 2 1 发射!

大晨第一次运行完特别兴奋,自己改了改成从 10 开始倒计时,还加了好几个感叹号。这小子对”发射”这个词莫名执着。

老父亲陪跑笔记

今天有几个点值得记一下:

第一,while 最容易踩的坑就是忘更新变量。 for 循环天然有 i++,while 得自己写,漏了就死循环。我让大晨抄了三遍代码,手写比敲键盘印象深。

第二,while 的条件判断在循环体之前。 也就是说,如果条件一开始就不满足,循环体一次都不执行。这点跟后面要学的 do-while 不一样,但今天先不展开。

第三,GESP 1级选择题爱考死循环。 给你一段代码问”以下程序会输出什么”,结果是个死循环,选”无输出”或者”程序不会终止”。得让娃养成习惯——先看条件变量会不会变。

今天学了大概 40 分钟,大晨状态不错,做了 6 道练习对了 5 道,错的那道是条件写成了 i < n 少加了一个数,老问题了,边界条件还得练。

进度:C++ 顺序结构 ✅、分支 ✅、for 循环 ✅、while 循环 ✅。按这个节奏,do-while 和 break、continue 也该安排上了。

下一篇咱们聊 do-while 循环——“先干了再说”的莽撞型选手,跟 while 正好是一对,大晨已经开始问我”为啥要先执行再判断”了,这问题答案下回揭晓。


免责声明:本系列仅为大晨个人备考记录,不构成任何教学建议。代码示例基于 C++ 基础语法,如有疏漏欢迎指正。每个孩子学习节奏不同,请根据自家情况安排。