C Day 17

从一个名字,
读懂一组数据

今天开始学习一维整数数组:先认识元素和下标,再用 for 循环逐项访问,把已经学过的累计方法用到一组成绩和温度上。

先补稳昨天的薄弱点

课前复习正确预测了跳过 3 后的输出:1、2、4、5,以及循环外的“结束”。这次没有漏掉最后一行,也能说明 number-- 的减小方向,以及 == 是相等判断、= 是赋值。

数组长度和下标不是一回事

day17.c
int scores[3] = {80, 90, 75};
scores[0] = 85;

声明中的 [3] 表示数组包含三个整数元素;访问时的 [0] 表示第一个元素的位置。三个元素的合法下标是 0、1、2,而不是 1、2、3。

scores[0] 改为 85 后,数组变成 85、90、75。实际运行确认,修改只影响指定的元素,第二个成绩仍为 90。

用循环走过每一个位置

下标 → 元素
for (int index = 0; index < 3; index++)
{
    printf("下标 %d,成绩 = %d\n", index, scores[index]);
}

index 保存当前位置,scores[index] 读取这个位置保存的成绩。实际输出中,下标 0、1、2 对应 85、90、75。

条件必须是 index < 3。如果写成 index <= 3,就会访问越界的 scores[3]。C 不会自动保证下标合法,因此要自己守住边界,不通过实际越界运行来试错。

累计的是元素,不是下标

在循环之前将 total 初始化为 0,每轮执行 total = total + scores[index];。先用原总和加上当前成绩,再把结果保存回 total。

  • 加入 85 后,总和为 85
  • 加入 90 后,总和为 175
  • 加入 75 后,总和为 250

如果误加 index,得到的只是 0 + 1 + 2 = 3。如果把清零语句放进循环体,每轮都会丢掉之前累计的结果。预测和实际运行都验证了最终成绩总和为 250。

独立综合练习:四个温度求和

创建温度数组 22、24、21、23,把第三个元素修改为 25,再使用自己选择的下标变量 number 遍历、输出和累计。

day17.c
int temperatures[4] = {22, 24, 21, 23};
temperatures[2] = 25;
int temperature_total = 0;

for (int number = 0; number < 4; number++)
{
    temperature_total = temperature_total + temperatures[number];
    printf("下标 %d,温度 = %d\n", number, temperatures[number]);
}

printf("温度总和 = %d\n", temperature_total);

实际运行依次输出下标 0—3 对应的温度 22、24、25、23,最终总和为 94,程序正常退出,代码为 0。

今天订正的两个细节

  • 回答“继续条件”时一度写成 index++。订正后分清:number < 4 是继续条件,number++ 才是每轮更新。
  • 独立代码最初已经正确修改和累计温度,但漏写每轮输出。提醒后补上 printf,再次运行验证完整结果。

还理解了:在 for 头部声明的下标变量只在该循环内有效,后面的独立循环可以复用同名变量;使用另一个名字 number 也完全可以。

今天真正完成的内容

  • 声明、初始化一维整数数组,并读取和修改单个元素
  • 区分数组长度、合法下标和元素值
  • 用 for 遍历并累计数组元素
  • 独立完成温度数组综合练习,得到总和 94
  • 正确回答最后四题:数组长度、下标与元素、访问边界和累计变量的初始化位置

下一课计划学习用输入逐项填充数组,以及通过遍历寻找最大值和最小值。