0

所以我正在编写一个统计计算器程序,我开始编写的第一个函数是平均值计算器。我的问题是我的答案值非常大(和错误)。

Please Enter a number of inputs
 4
Please enter number 1
 1
Please enter number 2
 2
Please enter number 3
 3
Please enter number 4
 4
Statistical Calculator Menu
(1) Mean
(2) Standard Deviation
(3) Range
(4) Restart/Exit
 1
3940705125981218000000000000000000.000000

这是我的源代码。

const int MAX_DATA=5;
void menu(float numbers[], int amount);
float mean(float numbers[],int amount);

int main() 
{ 
int i, amount;
float numbers[MAX_DATA];

printf("Please Enter a number of inputs \n");
scanf("%d", &amount);
if (amount>MAX_DATA){
              printf("You entered too many numbers");
             }else{  

for (i=1;i<amount+1;i++){
    printf("Please enter number %d\n", i);
    scanf("%f",&numbers[i]);
    }
      menu(numbers,amount);
}  
    getch();
return 0;
}

void menu(float numbers[],int amount)
{
 int input2;
 printf("Statistical Calculator Menu");
 printf("\n(1) Mean\n(2) Standard Deviation\n(3) Range\n(4) Restart/Exit");
 scanf("%d",&input2);
      if(input2==1){
         mean(numbers,amount);
        }

}

float mean(float numbers[],int amount)
{
 int i;
 float sum;
 float average;
 for (i=0; i<amount;i++){
     sum=sum+numbers[i];
     }
     average=sum/amount;
     printf("%f", average);

  return average;   
}

有人可以指出错误,或解释为什么计算不正确吗?

4

3 回答 3

4

您没有进行初始化sum,因此它会采用堆栈中该位置最后一个垃圾值。改变:

float sum;

到:

float sum = 0;

您遇到的另一个问题是:

for(i = 1; i < amount + 1; i++) {
    printf("Please enter number %d\n", i);
    scanf("%f",&numbers[i]);
}

数组索引从 0 开始,所以应该是:

for(i = 0; i < amount; i++) {
    printf("Please enter number %d\n", i);
    scanf("%f",&numbers[i]);
}
于 2012-10-05T21:02:09.017 回答
1

除了迈克所说的,

for (i=1;i<amount+1;i++)
{
    printf("Please enter number %d\n", i);
    scanf("%f",&numbers[i]);
}

float mean(float numbers[],int amount)
{
   // ..
   for (i=0; i<amount;i++){
    sum=sum+numbers[i];
  }
....

从此,你没有填满numbers[0]。但在mean计算中,使用 0 索引处的值。

于 2012-10-05T21:03:35.690 回答
0
float sum;
float average;

for (i=0; i<amount;i++){
     sum=sum+numbers[i];
 }

sum未在您的程序中初始化。

于 2012-10-05T21:01:59.623 回答