【发布时间】:2022-01-12 09:51:20
【问题描述】:
我想求除表格的最大值和最小值之外的 5 个数字的平均值。
尽管如此,以下代码提供了错误的结果。
#include <stdio.h>
#define size 5
main() {
int i;
float table[size], max, min, mo, sum;
max = 0;
min = 0;
mo = 0;
printf("Provide a number: ");
scanf("%f", &table[1]);
max = table[1];
min = table[1];
for (i = 2; i <= size; i++) {
printf("Provide a number: ");
scanf("%f", &table[i]);
if (max <= table[i])
max = table[i];
if (min >= table[i]) {
min = table[i];
}
sum = sum + table[i];
}
mo = (sum - max - min) / (size - 2);
printf("The average numberis: %f", mo);
}
例子:
如果您输入 1,2,3,4,5,则输出将是 2,666667 而不是 3。
您能告诉我为什么会这样吗?
【问题讨论】:
-
首先,数组具有从 0 开始的索引,因此您的写入超出了
table的范围。 -
IOW:
table[1]->table[0]和for (i=2; i<=size; i++)->for (i = 1; i < size; i++)。而且你没有初始化sum。 -
OT:将第一个输入视为特殊情况非常尴尬。您最好将输入与实际计算分开。首先只做输入,然后有第二个 for 循环来进行计算。而且您还应该正确缩进您的代码(我已经为您完成了)
-
除了已经提到的:总和不包括第一个数组元素。你需要学习如何调试程序,要么使用调试器,要么至少通过在代码中的关键位置打印相关变量的内容。
-
感谢您的贡献!!我已经进行了您提出的更改并且它有效!我将第一个输入视为特殊情况的原因是我想用表的第一个值设置最小值和最大值,以便在 for 循环中实现 if