You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言实现数组元素求平均值程序返回错误结果如何解决优化

问题修复及优化方案

原有代码错误点

  • 数组访问越界:你定义的grades[6]合法下标范围是0~5,代码中sum = sum + grades[6]访问了数组外的未知内存,拿到的是随机垃圾值
  • 未完成累加逻辑:你只对越界的grades[6]做了一次加法,前面输入的所有成绩都没有参与求和计算
  • 逻辑数值不匹配:提示语要求输入5个成绩,实际写了6个scanf读取输入,最后计算平均又除以5,三者数值完全不统一
  • 精度丢失:用int类型存储平均值会自动截断小数部分,无法得到更准确的平均结果

如果你之前用for循环也得到错误结果,大概率是循环边界设置错误、或者累加时没有用+=累积求和导致的。


基础修复版(保持原有手写输入的逻辑修正错误)

#include <stdio.h>
int main()
{
  // 用宏定义统一管理成绩数量,后续修改更方便
  #define GRADE_COUNT 5
  int grades[GRADE_COUNT];
  // 平均值用浮点型存储避免精度丢失
  float average;
  int sum = 0;
  printf("请输入你的%d门考试成绩:\n", GRADE_COUNT);
  scanf("%d", &grades[0]);
  scanf("%d", &grades[1]);
  scanf("%d", &grades[2]);
  scanf("%d", &grades[3]);
  scanf("%d", &grades[4]);
                              
  sum = grades[0] + grades[1] + grades[2] + grades[3] + grades[4];  
  average = sum / (float)GRADE_COUNT;
  printf("学生考试成绩的平均值为:%.2f\n", average);
                                                                      
  return 0;
}

更高效的循环实现方案

#include <stdio.h>
int main()
{
  #define GRADE_COUNT 5
  int grades[GRADE_COUNT];
  float average;
  int sum = 0;
  printf("请输入你的%d门考试成绩:\n", GRADE_COUNT);
  // 循环完成输入+累加,无需重复写相同代码,适配任意数量的成绩统计
  for(int i = 0; i < GRADE_COUNT; i++) {
      scanf("%d", &grades[i]);
      sum += grades[i];
  }
  average = sum / (float)GRADE_COUNT;
  printf("学生考试成绩的平均值为:%.2f\n", average);
  return 0;
}

优化点说明

  • 用宏定义统一管理成绩数量,后续要修改统计的成绩门数只需要修改宏定义的值即可,不用逐行调整代码
  • 循环实现输入和累加逻辑,代码冗余度极低,即使要统计几十上百个成绩也只需要修改宏定义即可
  • 计算平均值时将分母强制转换为浮点型,最终结果保留两位小数输出,精度更高
  • 完全规避数组越界问题,输入、统计、计算的数值逻辑完全自洽

内容的提问来源于stack exchange,提问作者N3Xxus6

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 16:45:02