Skip to content

1.5 循环结构程序设计

计算机程序设计 · C语言 · 1.5 循环结构程序设计

循环结构程序设计

🎯 一句话秒杀: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

区别whiledo-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后面加分号 = 空循环体 花括号里的内容不是循环体的一部分!

c
for (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 4

continue — 跳过本次循环

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

breakcontinue
作用跳出整个循环跳过本次循环剩余语句
循环是否继续❌ 不再继续✅ 继续下一次
适用范围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 的区别?
👆 点击展开答案
  1. 0 1 2(先用i的值输出,再i++)
  2. while先判断后执行(可能0次),do-while先执行后判断(至少1次)
  3. 1 3 5(偶数时continue跳过输出)
  4. 4(死循环:i从1→2→3→4,i>3时break)
  5. break跳出整个循环;continue跳过本次循环剩余语句,继续下一次

📖 教材习题对照

教材习题知识点难度
习题5.1~5.2while 循环⭐⭐
习题5.3do-while 循环⭐⭐
习题5.5for 循环⭐⭐
习题5.7break 与 continue⭐⭐⭐
习题5.8~5.9循环嵌套(水仙花数/完数)⭐⭐⭐⭐

对应教材:谭浩强《C程序设计》第5版 → 第5章 循环结构程序设计 对应考试大纲:考点5 — 循环结构程序设计

📺 配套视频

复习到本考点 → 先看视频补讲,再刷上面「闭卷挑战」。

仅供个人学习 · 考生回忆版 · 非考试院原卷