备战大晨7月 GESP C++ 1级(20):for循环,终于把"重复"说明白了

备战大晨7月 GESP C++ 1级(20):for循环,终于把"重复"说明白了
强仔上篇聊完if-else分支结构,大晨基本啃下来了。我说咱们翻开《一本通》下一章看看,好家伙——循环结构,来了。
大晨瞅了一眼标题问我:”爸,循环是不是跟圆圈一样,转来转去转不完?”
我笑了,说差不多,但今天爸爸教你一个特别实在的东西:for循环。
为啥需要循环
我先给大晨出了道题:屏幕上打印5个”hello”。
他啪啪啪打了5行cout,还挺得意,歪着头看我。
我又说:那打印100个呢?
他愣了两秒,掰着手指头算了算,说”那我手不得打废了?”
这就对了——当一件事情要重复做很多遍,循环就是干这个的。
我在键盘上敲了一段代码:
1 |
|
运行完屏幕蹦出5个hello,大晨眼睛一亮:”就这一行就能打100个?那1000个也行?”
我说你把5改成1000试试。
他一改、一运行,屏幕刷了好几秒,这小子乐得直拍桌子。
for循环的”三段式”
但是for后面括号里那一坨东西,大晨看了一脸懵。
for(int i = 1; i <= 5; i++)
我跟他说,你就把它拆成三句话来理解:
- 第一段:从哪儿开始 ——
int i = 1,计数器i从1出发 - 第二段:到哪儿停 ——
i <= 5,只要i不超过5就接着转 - 第三段:每次怎么变 ——
i++,每转一圈i就加1
大晨歪着脑袋想了想,突然冒出一句:”爸爸,这就像我爬楼梯,从1楼开始,爬到5楼停,每次爬一层。”
我当时真想给他鼓个掌。这比喻太到位了。
赶紧趁热打铁,把代码改成爬楼梯版:
1 |
|
输出:
1 | 到了第1层 |
大晨看到”到5楼了,不爬了”笑得不行,非要把5改成20,说要看看爬到20楼累不累。
i++到底是啥意思
for循环里最让大晨犯晕的是i++这玩意儿。
我跟他解释,i++就是i = i + 1的简写,意思是把i的值往上加1。比如i现在是3,执行完i++就变成4了。
大晨问:”那i–是不是减1?”
我说对,你悟性不错。
他紧接着又问:”那i++++是不是加2?”
我……差点被噎住。跟孩子学编程最大的挑战就是他们永远会问你边界问题。
老老实实跟他说:i++++不合法,加2应该写i += 2,这个后面细讲,你现在先记住i++就是加1就够了。
经典题:1加到100
光打印hello大晨觉得没意思。我给他出了道真题:计算1+2+3+…+100的和。
这道题在信奥里太经典了,GESP一级几乎必考。
我先让他自己想思路,大晨嘀咕了一阵说:”就是把1到100每个数都加起来嘛,用循环一个个往里加。”
我说对,那你得有个”篮子”来装这些数,一开始篮子是空的,每循环一次就往里扔一个数。
1 |
|
大晨看着屏幕上输出5050,抬头问我:”爸爸你怎么知道答案是5050?”
我说这不是我算的,是数学家高斯小时候算出来的,有个故事回头讲给你听。
大晨立刻来了精神,说高斯比爸爸厉害多了。我心想,你连1加到100都让我写代码,人家可是心算的……
不过话说回来,编程的意义不在跟高斯比心算,而是你掌握了循环,100万也能算。
老父亲陪跑小结
今天这篇大概是这个系列以来大晨学得最开心的一节。for循环的概念比if-else好理解,因为有”爬楼梯”这种特别直观的比喻。
记几点陪跑体会:
- 比喻太重要了。干巴巴说”初始化-条件-更新”孩子根本听不进去,换成”从几楼开始-到几楼停-每次爬几层”秒懂。
- 让孩子自己改数字。代码写完后让大晨自己改5为其他数字,他改了20、1000、10000,这个过程中他对”循环次数”有了直觉。
- 经典题要早接触。1到100求和这种题GESP一级出现概率极高,越早练越熟练。
下一篇打算讲for循环的进阶——循环嵌套,也就是for里面再套一个for。大晨第一次看到两个for套在一起的时候,问我的那句话,说实话把我逗乐了。
下篇预告:大晨盯着屏幕上for里面套着for的代码,沉默了三秒,然后问我——“爸爸,这是不是俄罗斯套娃?”
免责声明:本文仅记录大晨备考GESP C++一级的学习过程,代码和讲解基于个人理解,不保证完全准确,如有错误欢迎指正。每个孩子学习进度不同,本文仅供参考。


