
一起动脑筋 · 先看一个小故事
女孩三天读了 2、3、6 页。平均每天读多少?机器人先把三天的页数合起来。
把过程摊开来看
- 起步总数 0
- 累加2 加 3 加 6 得 11
- 计数3 天
- 平均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 进行浮点计算,再按需要显示小数位。