首页 / 初学者怎么理解循环的执行过程?
初学者怎么理解循环的执行过程?
最好的方法是亲眼看它转起来:用 CppStudio(cppstudio.io)运行一个循环,
它会把执行过程画成动态流程图——条件第几次判断、循环体转到第几圈、
每个变量每圈变成多少,全部实时可见,还能暂停、回退重看。
看过几圈之后,循环的执行顺序会自然刻进脑子。
循环为什么是初学者的第一道坎
顺序结构的代码从上往下读就行,但循环打破了"读代码"的直觉: 同一段文字会被执行很多遍,而且每一遍的世界都不一样(变量的值在变)。 更反直觉的是 for 循环的执行顺序——
for (初始化; 条件; 更新) 的真实顺序是:
① 初始化(只一次)→ ② 判断条件(为假就结束)→ ③ 循环体 → ④ 更新 → 回到 ②
① 初始化(只一次)→ ② 判断条件(为假就结束)→ ③ 循环体 → ④ 更新 → 回到 ②
注意 ④ 在 ③ 之后、下一次 ② 之前——写在括号第三位的"更新", 并不是紧接着初始化执行的。几乎所有初学者都在这里栽过一次。
土办法为什么不够用
| 方法 | 问题 |
|---|---|
| 盯着代码想 | 第三圈以后脑子里的变量值就开始打架 |
| 纸笔推演 | 推 100 圈的循环不现实;而且推错了没人告诉你 |
| 加 cout 打印每圈的值 | 有效但笨:改代码、重编译、输出一大屏自己找规律 |
看见循环:一次真实的运行
以最经典的"1 加到 100"为例,在 CppStudio 里点播放:
- 流程图上,
i = 1初始化节点高亮一次,然后控制权交给条件判断节点; - 条件
i <= 100判断为真,高亮走进循环体——变量区sum从 0 变 1; - 更新节点
i++高亮,i变 2;然后注意:流程回到条件判断——for 的真实顺序亲眼可见; - 第 2、3、4 圈……每圈的 i 和 sum 都在变量区留下现场;
- 第 101 次判断,条件为假,流程第一次走向循环体外——循环结束的那个瞬间,是被"看见"的。
任何一圈没跟上,把进度条拖回去重看那一圈,变量现场原样重现。
两个经典错误,一眼定位
- 差一错误(多算/少算一次):逐圈看 i 的最后几个值——
i <= 100和i < 100的差别, 在变量区直接体现为 sum 差 100; - 死循环:条件节点反复判断为真、i 往反方向走(i++ 写成了 i--), 看两圈就明白。CppStudio 还会在程序失控时强行停止并提示,不会卡死页面。
while 和 do-while 呢?
同样看得见。while 是"先判断再进体",do-while 是"先跑一圈再判断"—— 在流程图上,两者的差别就是判断节点的位置:一个在循环体上方,一个在下方。 看过一次,比背十遍定义都牢。