第五章——循环结构 第一节——while语句和do...while结构

第五章——循环结构 第一节——while语句和do...while结构

亓翎_Re-Tikara Lv5

一、while语句:谨慎派的「先问路再出发」

1.1 基本语法与执行逻辑

1
2
3
4
5
while(条件表达式) //此处的表达式不能为空,他是判断循环是否继续的条件
{
// 循环体语句组(条件为真时反复执行)
// 无论是单个语句还是多个语句均建议用{}包裹
}

执行流程图
while.png

1.2 案例解析:1到100的累加和

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
int main()
{
int i = 1, sum = 0; // 初始化循环变量和累加器
while(i <= 100)
{ // 条件判断
printf("第%d次循环:sum=%d + %d\n", i, sum, i); // 调试输出
sum += i; // 累加操作
i++; // 更新循环变量
}
printf("最终结果:sum=%d\n", sum);
return 0;
}

调试输出示例

1
2
3
4
5
第1次循环:sum=0 + 1
第2次循环:sum=1 + 2
...
第100次循环:sum=4950 + 100
最终结果:sum=5050

关键点

  • 初始化i=1sum=0 必须在循环前完成。
  • 条件判断i <= 100 决定循环是否继续。
  • 更新变量i++ 是循环终止的关键,否则会陷入死循环。

1.3 常见错误与避坑指南

错误类型 错误代码 修复方法
死循环 while(1) { ... } 添加 break 或更新条件变量
循环体不执行 int i=2; while(i<=1) {...} 检查初始条件是否合理
循环变量未更新 while(i<=100) { sum+=i; } 在循环体内添加 i++

1.4 真题实战:理解前置/后置自增

题目:以下代码输出什么?

1
2
3
int k = 5;
while(--k)
printf("%d", k -= 3);

解析步骤

  1. --k 先减1 → k=4,非0进入循环。
  2. k -= 3k=1,输出 1
  3. 再次 --kk=0,循环终止。
    答案:输出 1

几个关键点

  • while后的表达式,可以是C语言中任意合法的表达式,通常为关系表达式或逻辑表达式,但也可以是其它运算表达式。
    • 当表达式值的值为零时,表示条件为假;
    • 表达式值为非零时,表示条件为真。
  • 循环体可以是一条简单可执行语句,也可以是复合语句
  • 如果第一次计算时表达式的值就为0,则循环语句一次也不被执行,流程直接跳过while语句,执行下一条语句。

二、do-while结构:实践派的「先出发再看路」

2.1 基本语法与执行逻辑

1
2
3
4
5
do 
{
// 循环体(至少执行一次)
}
while(条件表达式); // 注意结尾分号!不能省略!!!!

执行流程图

do-while.png

2.2 案例解析:ATM取款验证

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
int main()
{
int pin = 1234, input;
do
{
printf("请输入4位数密码:");
scanf("%d", &input);
if (input != pin)
{
printf("密码错误,请重试!\n");
}
}
while(input != pin); // 至少执行一次

printf("验证成功!欢迎使用ATM。\n");
return 0;
}

运行示例

1
2
3
4
请输入4位数密码:1111
密码错误,请重试!
请输入4位数密码:1234
验证成功!欢迎使用ATM。

2.3 常见错误与避坑指南

错误类型 错误代码 修复方法
忘记分号 } while(condition) 补全分号 } while(condition);
条件逻辑错误 } while(1 == 2) 修正条件表达式
循环体未初始化 int n; do { ... } while(...); n 赋初始值

2.4 真题实战:后置自增陷阱

题目:以下代码输出什么?

1
2
3
4
int a = 7;
while(a--)
printf("Loop ");
printf("a=%d", a);

解析步骤

  1. a=7 进入循环,先执行 printf,后 a--a=6
  2. 循环直到 a=0 时,a-- 变为 -1,条件为假终止。
  3. 最终 a=-1
    答案:输出8次 Loop ,最后输出 a=-1

三、对比分析:while vs do-while

特性 while do-while
执行次数 可能0次 至少1次
适用场景 已知边界条件(如读文件EOF) 需强制初始化(如游戏菜单)
代码安全性 需先验证条件 易因条件错误执行无效操作
典型比喻 先查天气再出门 先出门再看天气

四、高级技巧与调试方法

4.1 使用调试器观察变量变化

  • GDB调试命令
    1
    2
    3
    4
    5
    6
    gcc -g code.c -o code
    gdb ./code
    break main.c:5 # 在第5行设置断点
    run # 启动程序
    step # 单步执行
    print i # 查看变量i的值

4.2 用打印法追踪循环流程

1
2
3
4
5
6
7
8
int i = 1;
while(i <= 3) {
printf("[循环开始] i=%d\n", i);
// 模拟复杂操作
printf(" 执行操作...\n");
i++;
printf("[循环结束] i=%d\n\n", i);
}

输出

1
2
3
4
5
6
7
8
9
10
11
[循环开始] i=1
执行操作...
[循环结束] i=2

[循环开始] i=2
执行操作...
[循环结束] i=3

[循环开始] i=3
执行操作...
[循环结束] i=4

4.3 避免无限循环的终极技巧

  • 添加超限保护
    1
    2
    3
    4
    5
    6
    7
    8
    int count = 0;
    while(条件) {
    // ...循环体...
    if (count++ > 1000) {
    printf("循环超限,强制退出!");
    break;
    }
    }

五、总结:选择的艺术

  • 选while:当需要严格控制循环开始条件时(如读取文件直到EOF)。
  • 选do-while:当必须执行一次初始化操作时(如游戏菜单系统、输入验证)。

🎯 记忆口诀
「先判断用while,保底执行用do-while」
就像人生选择——审慎决策用 while,破釜沉舟用 do-while

  • 标题: 第五章——循环结构 第一节——while语句和do...while结构
  • 作者: 亓翎_Re-Tikara
  • 创建于 : 2026-02-07 02:21:28
  • 更新于 : 2026-02-10 02:48:46
  • 链接: https://re-tikara.fun/Blog/posts/d9e67466/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。