循环结构程序设计
🎯 一句话秒杀:C语言三大循环——
while(先判断后执行)、do-while(先执行后判断)、for(计数器循环)。
一、while 循环
c
while (条件表达式) {
循环体语句;
}执行流程: 判断条件 → 真则执行循环体 → 再次判断 → ... → 假则退出
c
// 计算 1+2+...+100
int i = 1, sum = 0;
while (i <= 100) {
sum += i;
i++;
}
printf("sum=%d", sum); // 5050🚨 红牌警告
条件为假时一次都不执行!
while (0)循环体直接跳过 小心死循环!while (i <= 100)里忘了i++;就永远出不来 while后面没有分号!while (条件);加了个分号就变成空循环体
二、do-while 循环
c
do {
循环体语句;
} while (条件表达式); // ⚠️ 这里有分号!执行流程: 先执行一次循环体 → 判断条件 → 真则继续 → 假则退出
c
// 同样计算 1+2+...+100
int i = 1, sum = 0;
do {
sum += i;
i++;
} while (i <= 100);🔑 秒杀秘籍——while vs do-while
| 区别 | while | do-while |
|---|---|---|
| 执行次数 | 0~N次 | 至少1次 |
| 判断时机 | 先判断后执行 | 先执行后判断 |
| 首次条件为假 | 循环体不执行 | 循环体执行1次 |
| while后面 | 没有分号 | 有分号! |
考试经典:当初始条件不满足时,while一次都不执行,do-while执行一次
三、for 循环(最重要!)
c
for (初始化表达式; 条件表达式; 循环变量调整) {
循环体语句;
}c
// 计算 1+2+...+100
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum += i;
}for 循环执行顺序
① 初始化表达式 → ② 条件表达式(真?)
↓ 真
③ 循环体
↓
④ 循环变量调整
↓
② 再次判断条件
↓ 假
退出循环mermaid
flowchart TD
A["while<br/>先判断后执行<br/>可能一次都不执行"] -->|条件真| B["执行循环体"]
A -->|条件假| C["退出循环"]
D["do-while<br/>先执行后判断<br/>至少执行一次"] --> E["执行循环体"] --> F{"条件?"}
F -->|真| E
F -->|假| G["退出"]
H["for<br/>计数器循环"] --> I["①初始化"] --> J{"②条件真?"}
J -->|是| K["③循环体"] --> L["④调整"] --> J
J -->|否| M["退出"]
style A fill:#2F6B9E,color:#fff
style D fill:#E67E22,color:#fff
style H fill:#27AE60,color:#fff📌 三大循环记忆:while 先判后做(可能0次)、do-while 先做后判(至少1次)、for 计数器循环(步长可控)。
🔑 秒杀秘籍
记忆口诀:
for(定义; 条件; 变化) { 干活 }执行顺序:①定义→②条件→③干活→④变化→②条件→③干活→④变化→...
for 的省略写法
c
for (; i <= 100; i++) // 省略初始化(i在外面定义过)
for (; i <= 100;) // 省略调整(在循环体里改i)
for (;;) // 死循环!等价于 while(1)🚨 红牌警告
for (int i=0; i<10; i++);— for后面加分号 = 空循环体 花括号里的内容不是循环体的一部分!cfor (i=0; i<10; i++); // ← 空循环,i跑到10 { printf("%d", i); // 这只执行一次 }
四、break 与 continue
break — 跳出整个循环
c
for (int i = 1; i <= 10; i++) {
if (i == 5) break; // i=5时跳出循环
printf("%d ", i);
}
// 输出:1 2 3 4continue — 跳过本次循环
c
for (int i = 1; i <= 10; i++) {
if (i == 5) continue; // i=5时跳过本次
printf("%d ", i);
}
// 输出:1 2 3 4 6 7 8 9 10🔑 秒杀秘籍——break vs continue
| break | continue | |
|---|---|---|
| 作用 | 跳出整个循环 | 跳过本次循环剩余语句 |
| 循环是否继续 | ❌ 不再继续 | ✅ 继续下一次 |
| 适用范围 | switch + 循环 | 仅循环 |
五、循环嵌套
c
// 输出九九乘法表
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
printf("%d×%d=%2d ", j, i, i*j);
}
printf("\n");
}🚨 红牌警告
外层循环一次,内层循环一轮!
break只能跳出最内层循环,不能一次跳出多层
六、goto 语句
c
goto 标号;
...
标号:
语句;c
// 跳出多层嵌套循环的唯一简洁方式
for (...) {
for (...) {
if (条件) goto end;
}
}
end:
printf("跳出来了");🚨 红牌警告
尽量少用 goto! 滥用会导致程序像一碗面条——各种乱跳 只在跳出多层循环这种场景合理使用
📝 闭卷真题挑战
(点击下方空白查看答案)
1. 写出输出:
int i=0; while(i<3) { printf("%d ",i++); }
2. while 和 do-while 的根本区别?
3. 写出输出:
for(int i=1; i<=5; i++) {
if(i%2==0) continue;
printf("%d ", i);
}
4. 写出输出:
int i=0; for(;;) { i++; if(i>3) break; } printf("%d",i);
5. break 和 continue 的区别?👆 点击展开答案
- 0 1 2(先用i的值输出,再i++)
- while先判断后执行(可能0次),do-while先执行后判断(至少1次)
- 1 3 5(偶数时continue跳过输出)
- 4(死循环:i从1→2→3→4,i>3时break)
- break跳出整个循环;continue跳过本次循环剩余语句,继续下一次
📖 教材习题对照
| 教材习题 | 知识点 | 难度 |
|---|---|---|
| 习题5.1~5.2 | while 循环 | ⭐⭐ |
| 习题5.3 | do-while 循环 | ⭐⭐ |
| 习题5.5 | for 循环 | ⭐⭐ |
| 习题5.7 | break 与 continue | ⭐⭐⭐ |
| 习题5.8~5.9 | 循环嵌套(水仙花数/完数) | ⭐⭐⭐⭐ |
对应教材:谭浩强《C程序设计》第5版 → 第5章 循环结构程序设计 对应考试大纲:考点5 — 循环结构程序设计
📺 配套视频
复习到本考点 → 先看视频补讲,再刷上面「闭卷挑战」。