C中简单平均计算的值输出错误

时间:2015-04-02 21:55:36

标签: c arrays

我将一系列考试成绩传递给examAverage函数以及数组的大小。当我在for循环中printf数组内容时,它们是正确的,但是当它们被加在一起时总和是错误的。即使我在设置double sum = 0之后立即printf,它也表示sum = 2.当函数完成时,我得到一个非常大的数字。任何帮助表示赞赏。

double examAverage(int arr[], int size){

  int    i;
  double exAvg=0;
  double sum =0;
  printf("Sum = %d\n", sum);

  for (i = 0; i < size; ++i)
  { 
    printf("Sum = %d\n", sum);
    sum = arr[i];
  }

  exAvg = sum / size;

  return exAvg;
}

主要

double examAverage(int arr[], int size);    
printf("How many exam grades would you like to enter?\n");
scanf("%d", &examGrad);    

int exams[examGrad];

printf("Enter exam grades \n");
for(int i=0; i<sizeof(exams)/sizeof(exams[0]); i++){
    scanf("%d", &exams[i]);
}

double exAvg;
exAvg= examAverage(exams, examGrad);
printf("Exam average = %d", exAvg);

输出

How many exam grades to enter?
2
Enter exam grades
100
50
Sum = 2
Sum = 10
Sum = 1079574528
Exam Average = 1081159680

2 个答案:

答案 0 :(得分:1)

请勿使用%d打印double;这是整数。使用%f。存储整数和浮点数的不同方式可以解决您遇到的问题。

在编译时,您应该已经看到了关于此的警告:

format specifies type 'int' but the argument has type 'double'

答案 1 :(得分:1)

你的意思是sum += arr[i];中的for循环中的examAverage吗? 另外,标记为Main的代码根本不是真的有效,首先,没有examGrad的声明,第二个顶部的函数声明是谁知道什么,第三,for循环中的sizeofs可以被examGrad取代,%d已被提及。 如果您询问有关简单代码的问题,只需包含所有内容,如果太多,请删除不必要的部分或确保它们在那里,否则我们不知道问题是否是缺失的代码。