C Day 13

把循环的三步写在一起,
让累计表达得更紧凑

今天学习 for 循环与 +=-= 复合赋值,用它们重写计数、倒计时与累计,并独立完成 2 到 10 的偶数累计。

for 集中保存循环的三部分

for 的圆括号依次写初始化、继续条件和每轮更新。初始化只执行一次;之后每轮先检查条件,成立时执行循环体,最后才更新变量。

day13.c
for (int count = 1; count <= 5; count++)
{
    printf("count = %d\n", count);
}

第一轮先检查 1 <= 5,然后输出 1,最后才执行 count++。输出 5 后变量更新为 6,下一次条件不成立,因此不会输出 6。

更新方向决定循环如何前进

把开始值设为 5、条件写成不小于 1,并在每轮结束后执行 countdown--,就可以完成倒计时。

day13.c
for (int countdown = 5; countdown >= 1; countdown--)
{
    printf("%d\n", countdown);
}

程序依次输出 5、4、3、2、1。输出 1 后变量更新为 0,随后 0 >= 1 不成立,所以 0 不会进入循环体。

+=-= 缩短重复赋值

total += number 等价于 total = total + numbereven -= 2 等价于 even = even - 2。虽然写法更短,理解时仍然先计算右边,再把新结果保存回左边变量。

day13.c
int total = 0;

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

五轮后,total 依次变成 1、3、6、10、15。另一个练习使用 even -= 2,从 10 依次输出 10、8、6、4、2。

独立完成偶数累计综合练习

最后把今天的两个知识点放进同一个任务:循环变量从 2 开始,每轮增加 2,只经过 2、4、6、8、10;另一个变量保存不断增加的总和。

day13.c
int totall = 0;

for (int numberr = 2; numberr <= 10; numberr += 2)
{
    totall += numberr;
    printf("加入 %d 后,totall = %d\n", numberr, totall);
}

printf("总和 = %d\n", totall);

累计结果依次是 2、6、12、20、30,最终得到 2 + 4 + 6 + 8 + 10 = 30。预测与实际运行一致,程序正常退出,代码为 0。

今天真正掌握的内容

  • 理解 for 的初始化、条件和更新三个部分
  • 能准确追踪检查条件、执行循环体与更新变量的顺序
  • 会用 for 完成正向计数和倒计时
  • 理解并使用 +=-=
  • 会改变更新步长,让变量每轮增加或减少 2
  • 能独立组合循环与累计变量完成偶数求和

下一步将学习循环中的 breakcontinue,分别观察“立即结束整个循环”和“跳过当前这一轮”的执行路线。