4. 循环结构程序设计
这一章在学什么
前面学了顺序(一条条执行)和选择(if/else 分支)。这一章学循环结构:同一段代码重复执行多次——比如「普攻 10 次」「输出 1 到 5 每个数」。
会用三种写法:while、do-while、for。其中 for 最常用,格式是 for (初值; 条件; 更新),例如 for (i=1; i<=5; i++) 表示 i 从 1 到 5 执行 5 次。还会学 break(跳出整个循环)和 continue(只跳过这一轮)。
本节考纲要点
- 了解 while、do…while、for 的异同
- 掌握 while、do…while、for 的使用
- 了解 循环的嵌套
- 掌握 break 与 continue 的使用
本节代码里的英文词
minion_count— 小兵数量attack— 普攻printf— 输出到屏幕i— 循环里常用的计数器(很多同学喜欢用 i、j、k)break— 跳出整个循环continue— 跳过本次,进入下一轮
三种循环(语法与区别)
为什么需要循环
要让某段代码重复执行,用循环。C 里有三种写法,效果类似,区别是“什么时候判断条件、写法习惯”:
while、do-while、for 各怎么写
- while (条件) { 循环体 } — 先判断条件,为真才执行循环体,执行完再判断……适合“不知道要循环几次,只知道条件”(如:有兵就普攻)。
- do { 循环体 } while (条件); — 先执行一次循环体,再判断条件;为真再执行……适合“至少做一次”(注意 do-while 最后有分号)。
- for (初值; 条件; 更新) { 循环体 } — 适合“次数固定”或“有明确起点、终点、每次怎么变”,如从 0 数到 9、CD 从 5 倒数到 0。
for 的三个部分怎么理解
for 的三个部分:for (int i = 0; i < 10; i++) 表示:i 从 0 开始;每次循环前看 i<10 是否成立,成立就进循环体;每次循环体执行完后做 i++(i 加 1)。所以循环体会执行 10 次,i 依次为 0,1,…,9。
循环示例
while 示例
while 例子:小兵数量大于 0 就普攻一次,并把小兵数减 1(minion_count-- 等价于 minion_count = minion_count - 1),直到小兵为 0。
for 例子:i 从 5 变到 0,每次减 1(i--),每次输出“CD: i 秒”,相当于倒计时 5 秒。
/* 普攻直到小兵清完 */
while (minion_count > 0) {
attack();
minion_count--;
}
/* 技能 CD 倒计时 */
for (int i = 5; i >= 0; i--)
printf("CD: %d 秒\n", i);
for 示例
上面 for 循环:i 从 5 变到 0,每次减 1,共输出 6 行“CD: 5 秒”到“CD: 0 秒”。
循环嵌套(了解)
什么是嵌套循环
循环里面再写一个循环,叫嵌套。比如外层循环“每个英雄”,内层循环“该英雄的每个技能”——先固定一个英雄,把他三个技能都处理完,再换下一个英雄。考纲为了解,能看懂双重 for 就行。
break 与 continue
break:跳出整个循环
break:执行到 break 时,立刻跳出当前循环(只跳出一层),后面的循环体不再执行,也不会再判断条件。游戏里好比“被击杀了,直接结束本局”。
continue:只跳过这一轮
continue:执行到 continue 时,跳过本次循环剩下的语句,直接进入“下一轮”循环(重新判断条件)。游戏里好比“这波兵不打,等下一波”。
对比:break 是“整个循环不玩了”;continue 是“这一轮不玩了,下一轮继续”。
本章总示例(含 main)
本章讲的是循环结构:用 for/while 重复执行。下面是一段完整可运行的程序(for 循环打印 3 次)。
#include <stdio.h>
int main() {
int i;
for (i = 1; i <= 3; i++)
printf("第%d次普攻\n", i);
return 0;
}
下面练习区已预填了这段代码,可修改后点击「运行」。
练习区域
提示:注释可以暂时不写,等以后学熟了再慢慢加。请仿照上面循环代码在下面输入或修改,点击「运行」。
运行结果:
(点击「运行」后显示在这里)
易错知识(避免踩坑)
- for 后面多加分号:
for (i=0; i<10; i++);最后多一个分号,循环体是空语句,下面代码只执行一次。 - 循环条件写错导致死循环:如
for (i=0; i>=0; i++)永远成立,程序停不下来。 - break 和 continue 弄混:break 是跳出整个循环;continue 是只跳过这一轮,进入下一轮。
- 下标从 0 开始:
for (i=0; i<10; i++)是 10 次,若写i<=10会多执行一次。
小结
- while:先判断再执行;do-while:先执行一次再判断;for:初值、条件、更新写在一起,适合次数固定。
- for (i=0; i<10; i++) 表示 i 从 0 到 9 执行 10 次。
- break:跳出循环;continue:跳过本次、进入下一轮。