1

我正在尝试在数组中添加元素。这只是一个计算学生平均成绩的简单程序。我知道这可能是一种基本的编码方式,我希望更有效地做到这一点。但是我的代码没有返回平均值。我将不胜感激任何帮助。我确实用 for 循环尝试过,但得到了同样的错误答案。

#include <stdio.h>
int main()
{
  int grades[6];
  int average;
  int sum = 0;
  printf("Please enter your five test scores:\n");
  scanf("%d", &grades[0]);
  scanf("%d", &grades[1]);
  scanf("%d", &grades[2]);
  scanf("%d", &grades[3]);
  scanf("%d", &grades[4]);
  scanf("%d", &grades[5]);
                              
  sum = sum + grades[6];  
  average = sum / 5;
  printf("The average of the students test scores is %d:\n", average);
                                                                      
  return 0;
}
4

3 回答 3

3

您应该将所有等级相加,然后除以它们的数量(在您的情况下,它是 6 而不是 5,因为grades数组有 6 个元素)。这是一个代码示例:

#include <stdio.h>
int main()
{
  int grades[6];
  int average;
  int sum = 0;
  printf("Please enter your six test scores:\n");
  scanf("%d", &grades[0]);
  scanf("%d", &grades[1]);
  scanf("%d", &grades[2]);
  scanf("%d", &grades[3]);
  scanf("%d", &grades[4]);
  scanf("%d", &grades[5]);
                              
  for (int i = 0; i < 6; i++)
      sum = sum + grades[i];

  average = sum / 6;
  printf("The average of the students test scores is %d:\n", average);
                                                                      
  return 0;
}
于 2021-12-06T07:27:57.827 回答
1

我正在尝试在数组中添加元素。

这可能已经是关于标题(和代码)的错误轨道,它是关于平均数组中的元素

如何构建阵列取决于您;我选择最简单的方法。一个重要的决定是:数组的大小和值的数量是否相同?就是这样n_grades做的。数组初始化中的四个零说明了差异。

平均值很可能应该是浮点数。

平均值的一个令人讨厌的问题是潜伏的溢出。在这种情况下不太可能,但有一个更健壮(和优雅)的算法。演员表(double)是不优雅的部分,但因为除法是在两个整数之间,所以需要。这仍然是紧凑的核心:

  for (i = 0; i < n_grades; i++)
       aver += (double) grades[i] / n_grades;

对应数学公式:

    i<n
A = Sum G_i/n
    i=0

(“总和”是大西格玛)

#include <stdio.h>
int main()
{
  int grades[] = {10,10,9,10,11,11,0,0,0,0};

  int n_grades = sizeof grades / sizeof*grades;   // use all elements
  //n_grades = 6;                                 // use only first n elements

  double aver = 0;
      
  for (int i = 0; i < n_grades; i++)
       aver += (double) grades[i] / n_grades;

  printf("The average of the students test scores is %f (n= %d):\n", 
          aver, n_grades);

  return 0;
}

现在它打印:

The average of the students test scores is 6.100000 (n= 10):

或者,未注释,即限制为 6 个等级:

The average of the students test scores is 10.166667 (n= 6):
于 2021-12-06T08:44:37.223 回答
0

您假设它grades[6]包含数组中所有值的总和grades,这当然是错误的。

你需要类似的东西:

for (int i = 0; i < 6; i++)
    sum = sum + grades[i];
于 2021-12-06T07:23:55.293 回答