备战大晨7月 GESP C++ 1级(18):for循环初体验,累加求和入门

上回说到

上一篇咱们把 if-else 分支结构聊了个大概,大晨做完那几道题之后,我问他感觉咋样,他拍着胸脯说”爸爸我觉得我学会了!”——结果第二天又跑来问我 else 到底跟哪个 if 配对。

孩子的记忆是需要反复碾压的,一遍就想学会,不存在的。

不过没关系,按照《一本通•编程启蒙C++版》的进度,这一篇我们正式进入循环结构,先从 for 循环开刀。

for 循环长啥样

我先在白板上写了这么一行:

1
2
3
for (初始化; 条件判断; 更新) {
循环体
}

大晨看了半天,问了一个特别”大晨”的问题:”爸爸,这个括号里面为什么有两个分号?”

我说你把它想象成一个倒计时器就行——第一个分号前是”从几开始数”,中间是”数到几停”,后面是”每次数完干啥”。他若有所思地点了点头,也不知道真懂还是假懂。

先上代码跑跑看:

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

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

输出:1 2 3 4 5 6 7 8 9 10

大晨看到屏幕上蹦出来一排数字,兴奋得不行:”爸爸它真的自己数了!”

累加求和:第一个实战

光打印数字没意思,我给他出了道经典题:求 1 到 100 的和

大晨第一反应是拿手算,我说你别急,用 for 循环让计算机帮你算。他盯着屏幕想了大概五分钟,然后写出了这个:

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 << "1到100的和是:" << sum << endl;
return 0;
}

输出:1到100的和是:5050

看到 5050 蹦出来的那一刻,大晨猛地站起来喊了一声”yes!”——跟他妈追剧看到大结局那劲头一模一样。

我跟他讲,高斯小时候也是算这道题,但人家是找规律算的,你这是老老实实一个一个加,不过计算机不怕累,这才是循环的威力

大晨的翻车时刻

兴奋劲过了,我加了一道变式题:求 1 到 100 的偶数之和

大晨咔咔一顿敲,写出来这个:

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

int main() {
int sum = 0;
for (int i = 2; i <= 100; i += 2) {
sum += i;
}
cout << "1到100的偶数和是:" << sum << endl;
return 0;
}

输出:1到100的偶数和是:2550

这次竟然一把过,我有点意外。结果他得意忘形,跟我说”爸爸你再出个难的”,我说那你求 1 到 100 所有奇数之和吧。

他把 i = 2 改成 i = 1,然后……把 i += 2 忘了改,直接写成 i++,结果算了个 1 到 100 的和出来,5050。

典型的复制粘贴不改全的毛病,这也不能怪他,成年人写代码也经常干这事。

我提醒他看输出,5050 跟刚才偶数题的 2550 加起来恰好等于 5050,他这才反应过来——偶数和奇数应该把 1 到 100 全覆盖了才对。改完之后:

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 += 2) {
sum += i;
}
cout << "1到100的奇数和是:" << sum << endl;
return 0;
}

输出:1到100的奇数和是:2500

验算一下:2500 + 2550 = 5050,完美对上,大晨这才心服口服。

老父亲陪跑笔记

今天这轮学下来,记几个要点:

for 循环三要素缺一不可——初始化、条件判断、更新,少一个就死循环或者不执行。大晨有一回把 i++ 删了看会咋样,结果电脑风扇狂转,他吓得差点关电源。

累加求和的核心是”sum 变量在外面的初始值是 0”——大晨一开始写 int sum = 1,因为他说”从 1 开始加嘛”。这个理解偏差很典型,纠正了两次才记住。

变量名取名要见名知意——sum、i 这种经典命名建议从开始就养成习惯,别等以后改不过来。

今天节奏不错,从打印到求和再到变式,大概练了一个半小时,做了 4 道小题。大晨最后问我:”爸爸是不是只要用 for 循环,什么都能算?”我说那可不一定,循环也有搞不定的时候,到时候就得请出另一个家伙了——while 循环

大晨问 while 跟 for 有啥不一样,我说你先别急。

下篇预告:while 循环登场,当循环次数不确定的时候,它比 for 更好用。大晨会被”猜数字游戏”折磨到怀疑人生——欲知后事如何,咱们下回分解。

免责声明:本文仅为大晨个人学习陪跑记录,不构成任何教学建议。每个孩子的学习节奏不同,代码示例仅供参考,如有错误欢迎指正,但别拿去当标准教材用。