2016-10-04 55 views
-4
#include <stdio.h> 
#include <math.h> 
int main(void) 
{ 
    float values[999999]; 
    int number = 0; 
    float max = -100000, min = 100000, total = 0, mean = 0; 

    while ((scanf("%f", &values[number++])) != EOF) 
    for(int a = 0; a < number; a++) { 
     total = total + values[a]; 
     if (values[a] > max) { max = values[a]; } 
     if (values[a] < min) { min = values[a]; } 
    } 
    mean = total/(float)(number-1); 
    printf("%.2f %.2f %.2f\n", min, max, mean); 
    printf("%f", total); 
    printf("%d", number); 
} 

meanarithmetic意思,我得到了導致這樣的:產生最大,最小和用C

5.6 
6 
7 
5.60 7.00 11.93 
35.800003 
Program ended with exit code: 0 

我的預期均值爲6.2,不11.93

+0

您的輸入是什麼?你的輸出是什麼?你的預期產出是多少? – John3136

+1

'float values [999999];'這是一個相當大的數組放置在棧上。也許你應該從一個更小的陣列開始 – 4386427

+0

如何解決大陣列問題? –

回答

2

這for循環

for(int a=0;a<number;a++){ 

似乎是錯誤的。它會讓您重新計算每個新輸入號碼的total。嘗試刪除for循環。像:

此外,此行似乎是錯誤的:

mean=total/(float)(number-1); 

我想你需要

mean=total/number; 

但不要做這種計算如果number爲零,即做到:

mean = (number != 0) ? mean=total/number : 0; 

最後, s線:

float values[999999]; 

這是一個巨大的數組作爲局部變量。也許你會有堆棧溢出。嘗試更小的數組大小或使用動態內存分配。注意:對於這樣的程序,你甚至不需要數組。只需一個浮點數,然後對每個新輸入進行計算。

最後,您應該檢查scanf是否返回1.如果不是values[number]未初始化且不應使用。嘗試:

while ((scanf("%f",&values[number])) == 1) 
+0

我不知道爲什麼我的for循環被while循環包含而沒有使用「{}」,並且看起來EOF是一個數字,所以我確實(數字-1) –

+0

@BEIXIN - 因爲你沒有' ;'在'while'結尾 – 4386427

+0

如何在這裏使用float *值 –

1

while循環需要要麼有一個空的大括號,就像這樣:

while ((scanf("%f",&values[number++])) != EOF) 
{ 
} 

或者它需要一個空語句,就像這樣:

while ((scanf("%f",&values[number++])) != EOF) 
    ; 

否則,編譯器認爲for循環是while循環的主體。請注意,編譯器不關心空白,因此它忽略了for循環沒有縮進的事實。

0
#include <stdio.h> 
#include <math.h> 
int main(void) 
{ 
    float values; 
    int number=0; 
    float max=-100000,min=100000,total=0,mean=0; 

    while ((scanf("%f",&values)) != EOF){ 
     number++; 
     total=total+values; 
     if(values>max){max=values;} 
     if(values<min){min=values;} 
     } 
    mean=total/(float)number; 
    printf("%.2f %.2f %.2f\n",min,max,mean); 

} 
+0

此代碼中有2-3個錯誤。你甚至讀過我的回答嗎? – 4386427

+0

'while((scanf(「%f」,&values))!= EOF){...}'是用戶輸入非數字數據時的無限循環。 – chux

+0

爲什麼'min = 100000'?爲什麼不'min = 100001'或甚至更好'min = FLT_MAX'。 – chux