2012-10-05 46 views
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; 
} 

有人可以指出錯誤,或解釋爲什麼這是不正確的計算?

+2

只是顯而易見的,你從1..n填充數組,並計算0..n-1上的平均值和未初始化的初始值。 –

回答

4

您並未初始化sum,因此它將堆棧中該位置的最後一個垃圾值取回。變化:

float sum; 

要:

float sum = 0; 

你有另外一個問題是:除了

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

我知道這將是我的一個愚蠢的錯誤。謝謝。 – DatDudeJC

0
float sum; 
float average; 

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

sum未在程序中初始化。

1

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

數組索引從0開始,所以這應該是從邁克說,

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指數處的值。

+0

這解決了它。謝謝 – DatDudeJC

+0

當你使用數組並得到錯誤的結果時,首先要檢查的是你如何填充和使用數組。很高興它修復。 – Mahesh