备战大晨7月 GESP C++ 1级(28):双重 for 循环,大晨用"排和座位"搞懂了

备战大晨7月 GESP C++ 1级(28):双重 for 循环,大晨用"排和座位"搞懂了
强仔上一篇咱们把一重循环收了尾,大晨用 for 算 1+2+…+100,一次跑通,尾巴都要翘上天了。我当时就跟他说:别嘚瑟,一重循环只是热身,真正的坎是“循环里再套一个循环”。
这不,这周《一本通·编程启蒙》正好翻到循环嵌套。大晨第一次看到两个 for 叠在一起,表情从“这有啥”秒变“这是啥”。
第一次见面,卡了 15 分钟
书上的例题是打印星星三角形:输入 5,输出五行,第一行 1 个星、第二行 2 个……大晨看题时嘴硬:“不就是 cout 五次嘛。”
结果一上手就露馅。他先用一个 for 打了 5 个星,发现全挤在一行;加个 endl,又变成每行只有一个。来回折腾 15 分钟,屏幕上就是出不来那个三角形。
我在旁边忍着不提示。最后他自己嘟囔了一句:“这东西是每行不一样多的……”——这句话说到点子上了:一个循环管不了“每行不同”,得套两层。
外循环管行,内循环管列
我把他拉过来,草稿纸上画了个框:外层循环 i 管第几行,内层循环 j 管这一行打几个。记住一句话:外循环管行,内循环管列,endl 要放在两个循环中间。
代码长这样:
1 |
|
输入 5,输出:
1 | * |
大晨盯着 j <= i 看了半天,突然一拍桌子:“我懂了!i 是第几排,j 是这一排的座位号,排数越多座位越多!”用教室的排和座来理解,比我讲十分钟都管用。
顺便记一个他踩的坑:他一开始把 cout << endl; 写进了内循环,结果每打一个星就换行,星星变成一竖条。**endl 是内循环的“收工线”——一整行干完活才换行。**这个坑他自己爬出来的,比我说十遍都管用。
九九乘法表,40 分钟独立敲完
书上留的练习是九九乘法表。这题妙就妙在结构跟星星三角形一模一样,只是把 * 换成了算式。
1 |
|
大晨没要提示,独立敲了 40 分钟,中间编译错了两次:一次把 << 敲成 <,一次大括号少配了一个。跑出三角形乘法表那一刻,喊得整个客厅都听得见。
他还有个发现很逗:内层写的是 j <= i 不是 j <= 9,“不然表就成方的了,跟爸爸手机里那个不一样。”——**能自己看出上三角和全表的区别,说明他真的在脑子里“跑”循环了。**这是这 40 分钟里我最欣慰的一下。
老父亲陪跑小结
这一篇的收获三条:
- 双重 for 的心智模型:外循环管行,内循环管列;
- endl 的位置决定换行时机,新手第一大坑;
- GESP 一级考纲对嵌套要求不深,但书里讲到这了,提前啃了不亏,二级直接无缝衔接。
按进度,循环嵌套还剩最后一块硬骨头:打印菱形和空心图形。我提前瞄了一眼例题,中间还得数空格个数。大晨瞄了一眼那个图,来了句:“这个三角形怎么是倒着长在天上的?”
下篇就看他自己能不能把空格数出来。**循环这关一过,就要正式碰“数组”了,那才是真正的分水岭。**咱们下篇见。
免责声明:本文仅为我家娃的备考陪跑记录,学习进度与方法仅供参考,不构成任何培训建议;每个孩子节奏不一,切勿照搬攀比。


