女孩和机器人一起思考

一起动脑筋 · 先看一个小故事

女孩三天读了 2、3、6 页。平均每天读多少?机器人先把三天的页数合起来。

把过程摊开来看

沿着编号看一遍,再用自己的话讲一遍
  1. 起步总数 0
  2. 累加2 加 3 加 6 得 11
  3. 计数3 天
  4. 平均11 除以 3

平均数是总和除以数量。

总和用累加变量保存,数量要数准确。这个例子平均约 3.67 页,并不要求实际某天恰好读这么多。

01什么是累加?

假设数组是:

int a[4] = {10, 20, 30, 40};

可以准备一个 sum,每轮把一个元素加进去。

02怎样求总和?

long long sum = 0;

for (int i = 0; i < 4; i++) {
    sum += a[i];
}
开始

sum=0

+10

sum=10

+20

sum=30

+30,+40

sum=100

03为什么 sum 常从 0 开始?

因为 0 是加法的单位元:

0 + x = x

从 0 开始不会改变第一个被加入的数。

04平均数怎样计算?

平均数 = 总和 ÷ 元素个数。

double average = static_cast<double>(sum) / 4;

这里把 sum 转成 double,确保进行浮点除法。

05为什么不能直接写 sum / 4?

如果 sum 和 4 都是整数,就会进行整数除法。

5 / 2   // 结果是 2,不是 2.5

06sum 为什么有时用 long long?

即使数组中的每个元素都能放进 int,很多元素相加后的总和也可能超过 int 范围。

信奥题中常根据最大元素值 × 元素个数估算总和上限,再选择类型。

你已经知道了什么

  • 求和常使用累加变量。
  • 加法累加的初值通常设为 0。
  • 平均数等于总和除以数量。
  • 整数除法会截掉小数部分,因此平均数常需要浮点运算。
  • 总和可能比单个元素大很多,要考虑整数范围。

下一篇:什么是数组越界?

轮到你来试一试

如果只用整数计算 11 / 3,会得到多少?

想好了吗?点开看解释

得到 3,而不是约 3.67。可用 11.0 / 3 进行浮点计算,再按需要显示小数位。