备战大晨7月 GESP C++ 1级(31):循环套娃,大晨的星星金字塔立起来了

备战大晨7月 GESP C++ 1级(31):循环套娃,大晨的星星金字塔立起来了
强仔上篇咱们刚把单层 for 循环收拾利索,结尾我留了个话头:下一座小山是循环里再套循环。这不,这周就正式翻这座山了。大晨 GESP 一级备考第 31 篇笔记,接着唠。
嵌套循环是啥:跑圈加俯卧撑
我是这么给大晨解释的:外层循环管“跑几圈”,内层循环管“每圈做几个俯卧撑”。
跑 5 圈、每圈 3 个俯卧撑,一共 15 个。累不累?累。但程序不怕累,它就爱干这种傻乎乎重复的活儿。
对应到代码,就是 for 里面再写一个 for。大晨第一眼看到两层 for 套在一起,来了句:“爸爸,这是循环套娃!”
行吧,名字土了点,意思是对的。
上代码:打印星星金字塔
按《一本通·编程启蒙C++版》的进度,这周的题是经典款:输入 n,打印 n 行的星号直角三角形。n = 5 时长这样:
1 | * |
代码:
1 |
|
代码短得可怜,信息量不小。我掰开揉碎讲了三件事:
第一,外层 i 管“第几行”,内层 j 管“这行几个星”。 第 1 行 1 个星、第 3 行 3 个星,所以内层条件是 j <= i——内层的次数,跟着外层变量走,这是嵌套循环的魂。
第二,那个 endl 写在内层循环外面、外层循环里面。一行画完才换行,不是画一个星就换一次。
第三,数执行次数:n = 5 时星星总数是 1+2+3+4+5 = 15 个。别嫌这步土,数循环次数可是 GESP 选择题的常客。
大晨翻的车:星星排队上厕所
第一次自己敲,翻车翻得干脆——大晨把 endl 塞进了内层循环里。一运行,出来一列星星,一个星占一行。
他盯着屏幕看了半天,憋出一句:“爸爸,星星怎么全在排队上厕所?”
我笑得不行,但没直接给答案,让他拿手指头当变量,一行一行数:i 等于 2 的时候,j 跑几圈?画几个星?什么时候换行?他数了大概 10 分钟,突然“哦——”一声,把 endl 挪了出来。再一运行,金字塔立起来了,那小子从椅子上弹起来喊:“立起来了!立起来了!”
第二跤更隐蔽:内层被他写成了 j <= n,输入 5,出来一堵 5×5 的星星正方形墙。我只提示了一句:“第 2 行应该几个星?”他自己就把 n 改成了 i。
前后折腾 40 分钟,摔了两跤。但 40 分钟自己摔明白的,比我 4 分钟直接喂给他的,记得牢十倍。
老父亲陪跑心得
这周最大的体会:嵌套循环看着吓人,其实没有新知识,只是把“一整段循环”当成一件事,再去重复它。孩子卡住,多半不是不会循环,而是分不清谁管行、谁管列。
我教了个笨办法:草稿纸上画表格,一列写 i、一列写 j,一行一行填。表格填完,循环就“看得见”了。大晨管这个叫“给循环记账”,账记多了,脑子里自然有画面。
另外提醒陪跑的家长一句:这周我让他把 n 从 3 改到 10 各跑一遍,改一个数字多跑几组,比刷三道新题都管用。
小结
- 嵌套循环 = 外层管行、内层管列,内层次数跟着外层变量走;
- endl 的位置决定“换行”还是“串行”,是本周翻的最大跟头;
- 给变量“记账”的土办法,真管用。
星星三角形只是嵌套循环的开胃菜。我给大晨剧透了下一题:把星星换成算式,打印九九乘法表。他眼睛瞪圆了:“九九八十一个算式?代码不会也要打 81 行吧?!”
到底几行代码能拿下这 81 个算式?下篇见分晓。
免责声明:本系列只是一个中年老父亲的陪跑笔记,记录大晨备考 GESP C++ 一级的真实过程。孩子进度有快有慢,方法仅供参考,不构成任何学习建议。


