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 に答える