C语言实现剔除最值求5个数平均值返回错误结果原因排查
问题原因分析
- 直接导致结果错误的核心问题:
sum变量未初始化,且第一个输入的table[1]没有被加入sum统计。你当前的逻辑里只有循环内输入的4个值被加到了sum中,第一个输入值被完全遗漏。以示例输入1、2、3、4、5为例,sum仅统计了2+3+4+5=14,减去最大值5、最小值1后得到8,除以3自然得到2.666667的错误结果。 - 潜在风险问题:C语言数组索引从0开始,你定义的
float table[size]合法下标范围是04,代码中使用下标15会导致数组越界访问table[5],属于未定义行为,可能引发乱码、程序崩溃等异常。 - 规范问题:
main函数未按照C标准声明为int main(),缺少返回值,属于旧C标准的不规范写法。
修正后代码
#include <stdio.h> #define SIZE 5 // 宏名默认使用大写和普通变量做区分 int main() { int i; float table[SIZE], max, min, mo, sum = 0; // 初始化sum为0 printf("Provide a number: "); scanf("%f", &table[0]); // 从数组合法起始下标0开始存储 max = table[0]; min = table[0]; sum = table[0]; // 第一个输入值加入总和统计 for (i = 1; i < SIZE; i++) { // 循环到下标4为止,避免数组越界 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 number is: %f", mo); return 0; }
内容的提问来源于stack exchange,提问作者el_noobito
相关产品推荐
相关产品推荐

