备战大晨7月 GESP C++ 1级(29):循环套循环,打出九九乘法表

上篇咱们把 for 循环的基本套路捋顺了,大晨自己敲出 1 加到 100 等于 5050,嘚瑟得晚饭多吃了半碗米饭。我当时就撂了句话:别飘,循环的终极形态还没上桌。

今天这篇,上它,循环嵌套:一个 for 里面,再套一个 for

今天的主角:循环套循环

《一本通·编程启蒙 C++版》翻到循环这一章的后半段,书上管这个叫“循环的嵌套”。我给大晨打了个比方:大循环每走一步,小循环都要从头到尾完整跑一遍,跑完了,大循环才能走下一步。

大晨听完第一反应:“爸爸,这不就是套娃吗?for 里面还有 for!”

对,就是套娃。外层循环管大节奏,内层循环管小步子,外层每挪一步,内层得把一整圈跑完。

上代码:让计算机“背”九九乘法表

概念讲三分钟就够了,练手得来道有意思的题。我直接选了九九乘法表——大晨当年背口诀背得龇牙咧嘴,现在让计算机自己打一张出来,他眼睛一下就亮了。

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

int main() {
for (int i = 1; i <= 9; i++) { // 外层:管第几行
for (int j = 1; j <= i; j++) { // 内层:这行打几个式子
cout << j << "*" << i << "=" << j * i << "\t";
}
cout << endl; // 打完一行,换行
}
return 0;
}

跑出来是这样的:

1
2
3
4
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
...(一直打到 9*9=81)

这段代码有三个关键点,我陪大晨一个一个抠:

  1. i 管行、j 管列,外层管行、内层管列,这是嵌套循环的铁律;
  2. 内层条件是 j <= i,不是 j <= 9,所以打出来是三角形,跟他背的口诀表一模一样;
  3. cout << endl; 要写在内层循环结束之后、外层循环的花括号里面——换行的站位,决定了输出是一张表还是一团乱麻

大晨踩的坑:一串“糖葫芦”

第一次上机,大晨就把第 3 个关键点踩没了。他把 cout << endl; 塞进了内层循环里面,结果每打一个式子就换一行,屏幕上竖着挂出一长串“糖葫芦”。

他自己盯着屏幕乐了半天,然后问我哪儿错了。我没直接说,让他拿手指头在屏幕上比划:外层走一步,内层是不是得把 j 从 1 转到 i?那换行到底是内层的活儿,还是外层的活儿?他想了差不多两分钟,把那行代码挪了出来,一次跑通。

前后折腾了十五分钟,但这十五分钟比讲一小时都值。代码是他自己改对的,这个知识点才真正是他的。

后来他手痒,把 j <= i 改成 j <= 9,打出来一个方方正正的九乘九全表,还跟我显摆:“爸爸你看,这是完整版!”我说行,你知道改一个字符输出就大变样,这个感觉就对了。

老父亲陪跑感悟

晚上七点半上机,八点十分收工,四十分钟。这周的节奏稳住了:周二周四各一次,一次一道主菜。

说实话,循环嵌套是个小分水岭,脑子要同时跟踪两个变量,有的孩子在这儿会卡一下。大晨靠“套娃”这个比方,过得还算顺。我也查了下 GESP 一级的考纲,嵌套考得非常浅,真正发力在二级——但咱们往前多走半步,考场上更稳,以后冲二级也不用回头补课

陪到第 29 篇,我越来越觉得:学编程不是背语法,是练“把一件大事拆成一层一层小事”的本事。外层定方向,内层干细活——你别说,这跟当爹还挺像。

小结和下篇预告

今天三件事:套娃结构、乘法表代码、换行语句的站位。“外层管行、内层管列、换行放外层”,这三句大晨已经能自己复述了。

收工的时候大晨出了道歪题:“爸爸,能不能让口诀表倒着打,从 9*9 那行开始?”我说能,正好用循环加条件伺候它。另外我翻了翻书,下一站是个大家伙——数组,让计算机一口气记住一串数。歪题和数组,下篇一起见分晓。

免责声明:本文是我陪大晨备考 GESP 的个人记录,代码与做法仅供参考,不构成任何学习建议。每个孩子节奏不同,请量力而行。