备战大晨7月 GESP C++ 1级(10):for 循环初体验,老父亲的头发又少了

上回说到

上篇我们刚把 if-else 嵌套那块啃完,大晨当时信心满满地说:”爸,分支我会了,循环是不是也差不多?”我当时笑了笑,心想:你小子还不知道循环才是真正的分水岭。

今天我们正式进入《一本通•编程启蒙C++版》的循环章节,第一个就是 for 循环。

为什么要学循环

我给大晨举了个例子:”你要在屏幕上打印 1 到 5,不用循环怎么写?”

他啪啪啪敲了五行:

1
2
3
4
5
cout << 1 << endl;
cout << 2 << endl;
cout << 3 << endl;
cout << 4 << endl;
cout << 5 << endl;

“那打印 1 到 100 呢?”

大晨愣了一下:”……那不得写一百行?”

对,这就是循环存在的意义——让计算机帮你干重复的活。

for 循环三件套

for 循环的核心就三个部分,我管它叫”三件套”:

  1. 初始化:从几开始
  2. 条件判断:到几结束
  3. 步进:每次走多远

语法长这样:

1
2
3
for (初始化; 条件判断; 步进) {
// 要重复做的事
}

我把三件套拆开讲给大晨听,拿打印 1 到 5 举例:

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

int main() {
for (int i = 1; i <= 5; i++) {
cout << i << endl;
}
return 0;
}

i = 1 是起点,i <= 5 是终点,i++ 是每走一步加 1。 大晨盯着看了半天,突然来了一句:”i++ 是不是就是 i = i + 1 的缩写?”我心里一喜,这小子悟性还可以。

第一次踩坑

大晨自己写了个程序,想打印 1 到 10,结果屏幕上啥也没输出。我凑过去一看:

1
2
3
for (int i = 10; i <= 1; i++) {
cout << i << endl;
}

起点 10,终点判断 i <= 1,一开始就不满足,循环一次都不执行。 这是最经典的坑——方向搞反了。

我问他:”你从 10 出发,想走到 1,你是往前走还是往后走?”大晨想了一下:”往后走……所以要 i–?”

对,步进方向必须跟起止方向一致。 改成这样就对了:

1
2
3
for (int i = 10; i >= 1; i--) {
cout << i << endl;
}

累加求和实战

《一本通》上有道经典题:求 1+2+3+…+100 的和。我让大晨先自己想,他在纸上画了半天,最后问我:”是不是要弄个箱子,每次往里面加一个数?”

这个”箱子”就是累加变量,必须初始化为 0。 我让他自己写,他在键盘上敲了半天:

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

int main() {
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum = sum + i;
}
cout << sum << endl;
return 0;
}

运行结果 5050,大晨拿计算器验证了一遍,跳起来说:”真的一样!高斯小时候也是这么算的吧?”

我笑着说:”高斯没用循环,他用的是公式。但你的方法也很棒,循环求和是编程思维的基本功。

老父亲陪跑笔记

今天这节课大概花了 40 分钟,大晨最大的收获是理解了”三件套”的逻辑。踩了方向搞反那个坑之后,他现在写 for 循环会先在纸上写起点和终点,再决定用 i++ 还是 i–。

我的建议是:for 循环别急着上嵌套,先把单层循环练到肌肉记忆。 《一本通》上有十几道单层循环的题,我打算让大晨先刷完这些,再进 while 循环。

大晨临睡前跟我说:”爸,我觉得循环比 if 好玩,if 是做选择,循环是让电脑干活。”我说:”你等着,for 循环套 for 循环的时候你就不会这么说了。”

小结与下篇预告

今天完成了 for 循环的入门,包括基本语法、方向坑、累加求和实战。大晨目前能独立完成单层循环的简单题目。

下篇我们就要聊聊 while 循环,以及那个让无数初学者崩溃的”死循环”问题——大晨已经提前踩了一个雷,下回细说。


免责声明:以上内容仅为个人陪孩子学习信奥的记录,不构成任何教学建议。代码示例均经过编译验证,但如有疏漏欢迎指出。每个孩子的学习节奏不同,仅供参考。