备战大晨7月 GESP C++ 1级(6):while循环,以及一个不肯停下来的孩子

备战大晨7月 GESP C++ 1级(6):while循环,以及一个不肯停下来的孩子
强仔上一篇for循环聊完,我说”循环这事儿还没完”——确实没完。大晨for循环刚弄明白,while循环就给了他一记闷棍。
for和while:一个知道终点,一个只知道方向
for循环是”我知道要跑几圈”,起点、终点、步长写在括号里,清清楚楚。
while循环不一样,它只管一个条件:只要条件为真,就继续转。
我跟大晨打比方:for循环像跑操场,你知道要跑几圈;while循环像追他家那只仓鼠,你不知道要追多久,追到了才停。
大晨问:”那追不到呢?”
好问题。追不到就是死循环,程序卡死。这就是while最大的坑。
while循环的基本写法
来个最经典的题:输入正整数n,用while循环求1到n的和。
1 |
|
这题for也能做,但GESP就爱问”用while实现”。
关键点我反复跟大晨强调:while循环体里一定要有让条件”走向假”的语句。
上面 i = i + 1 就是。少了这行,i永远是1,i <= n 永远成立,死循环。
大晨第一次写就漏了这行,程序跑起来屏幕数字疯涨,他吓一跳:”爸它停不下来!”
我说:”对,这就是死循环,你忘了让i长大。”
do-while:先跑一圈再说
while是”先看条件再跑”,do-while是”先跑一圈再看条件”。
1 |
|
区别就一个:while可能一次都不执行,do-while至少执行一次。
大晨问:”那什么时候用do-while?”
说实话GESP一级阶段do-while考不多,但概念得懂。我跟他说:当你确定至少要做一次的时候,用do-while更合适。 比如输密码,至少得输一次吧,输错了再重来。
一道易错题:数位之和
GESP爱考的while经典题:输入一个正整数,求各位数字之和。输入123,输出6。
1 |
|
大晨琢磨了挺久。关键在 n % 10 取个位、n / 10 去掉个位。
我跟他说:”你把123想象成一排糖葫芦,%10是吃最后一颗,/10是把棍子往前挪一格。”
他问:”那吃完就停?”
“对,n变成0就停,while(n > 0) 就是’还有糖葫芦就继续吃’。”
他笑了,自己敲了一遍,输入123,输出6。那一刻他眼睛亮了一下,我觉得这比考多少分都值。
老父亲陪跑笔记
这周while循环练了大概3天,每天40分钟左右。做《一本通》上12道while相关题,对了9道,错3道——两道忘更新循环变量,一道条件写反了。
比上周for循环通过率高了一点,说明for的基础打得还行。
意外收获:大晨现在看到循环题,会先问自己”知道循环几次吗”,知道就for,不知道就while。这个思维习惯比语法重要。
小结
while循环就三件事:条件写括号里、循环体里更新变量、别忘了可能一次都不执行。
do-while记住一句话:至少跑一圈。
下一篇准备带大晨过几道GESP一级循环综合题。但做真题之前,有个东西绕不过去——break和continue,循环里的”急刹车”和”跳过键”,GESP几乎必考。
下篇就聊这俩。
免责声明:本文仅为我家大晨备考GESP C++一级的学习记录,不构成任何教学建议。代码示例基于《一本通·编程启蒙C++版》及GESP一级考纲整理,如有疏漏欢迎指正。每个孩子学习节奏不同,适合大晨的不一定适合你家娃。


