C Day 12

让变量一步步变化,
让代码按条件重复

今天学习 while 循环、++--,从正向计数和倒计时出发,再用两个变量完成 1 到 5 的累计求和。

while 在每轮开始前检查条件

while 会先判断条件。条件成立才执行循环体,执行完后回到条件处再次判断;如果第一次检查就不成立,循环体一次也不会执行。

day12.c
int count = 1;

while (count <= 5)
{
    printf("count = %d\n", count);
    count++;
}

printf("循环结束后 count = %d\n", count);

循环依次输出 1 到 5。输出 5 后仍会执行一次 count++,使变量变成 6;随后 6 <= 5 不成立,循环结束,所以循环外输出的最终值是 6。

++-- 推动循环前进

独立写成一条语句时,count++ 等价于 count = count + 1count-- 等价于 count = count - 1。如果控制变量一直不更新,条件可能永远成立,从而形成无限循环。

day12.c
int countdown = 5;

while (countdown >= 1)
{
    printf("%d\n", countdown);
    countdown--;
}

printf("倒计时结束后 countdown = %d\n", countdown);

倒计时依次输出 5、4、3、2、1。变量减到 0 后,0 >= 1 不成立,所以循环内部不输出 0,循环外验证最终值为 0。

两个变量协作完成累计

累计练习中,number 保存当前要加入的数字并控制循环进度,total 保存截至当前轮的总和。赋值时仍然先计算右边,再把结果交给左边。

day12.c
int number = 1;
int total = 0;

while (number <= 5)
{
    total = total + number;
    printf("加入 %d 后,total = %d\n", number, total);
    number++;
}

五轮累计后,total 依次变成 1、3、6、10、15,最终得到 1 + 2 + 3 + 4 + 5 = 15,而 number 最终为 6。

循环体中的顺序也很重要

正确程序先把当前的 number 加入 total,再执行 number++。如果把自增放到累计之前,第一轮会跳过 1,最后一轮又会加入 6,错误地计算出 2 + 3 + 4 + 5 + 6 = 20

今天真正掌握的内容

  • 理解 while 在每轮开始前检查条件
  • 会用 ++-- 更新计数变量
  • 知道控制变量不更新可能造成无限循环
  • 能追踪循环结束后的变量最终值
  • 会用控制变量和累计变量协作完成求和
  • 能判断循环体语句顺序对结果的影响

下一步将学习 for 循环与复合赋值,把初始化、条件和更新集中起来,并用更紧凑的写法完成计数与累计。