2017-02-12 201 views
0

我想計算用戶輸入的高低溫度的平均值,並且可以包含的天數在1到4之間,但是我很難理解去做這件事。我寫的代碼產生了一個完全不相關的數字。這裏是我的代碼:計算數組部分的平均值

#include <stdio.h> 

int main (void) 
{ 
    int i; 
    int limit; 
    int day[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; 
    int high[10],low[10]; 

    printf("---===IPC Temperature Analyzer V2.0===---\n"); 

    printf("Please enter the number of days between 3 and 10, inclusive: "); 
    scanf("%d", &limit); 
    while (limit <= 2 || limit >= 11) { 
     printf("Invalid entry, please enter a number between 3 and 10, inclusive: "); 
     scanf("%d", &limit); 
    } 

    for(i = 0;i < limit; i++) { 
     printf("Day %d - High: ", day[i]); 
     scanf("%d", &high[i]); 
     printf("Day %d - Low: ", day[i]); 
     scanf("%d", &low[i]); 
    } 

    printf("\nDay Hi Low\n"); 
    for (i = 0; i < limit; i++) { 
     printf("%d %d %d\n", day[i], high[i], low[i]); 
    } 

    int max = 0; 
    int min = 0; 

    for (i = 0; i < limit; i++) { 
     if (high[max] < high[i]) 
      max = i; 
     if (low[min] < low[i]) 
      min = i; 
    } 

    printf("\nHighest temperature was: %d on day %d", high[max], day[max]); 
    printf("\nLowest temperature was: %d on day %d ", low[min], day[min]); 

    int n; 
    int avg = high[i] + low[i]/i; 

    printf("\nEnter a number between 1 and 4 to see the average temperature for the entered number of days, enter a negative number to exit\n"); 
    scanf("%d", &n); 

    while (n > 4) { 
     printf("Invalid entry, please enter a number between 1 and 4, inclusive: "); 
     scanf("%d", &n); 
    } 

    while (n < 0) { 
     printf("Goodbye!\n"); 
     exit(0); 
    } 

    for (i = 0; i < n; i++) { 
     printf ("The average temperature up to day %d is: %d", day[i], avg); 
    } 
    return 0; 
} 
+3

你計算的唯一地方'avg'是'INT平均=高[1] +低[I]/I;'你可能要考慮一下i'的'值是在該點在你的程序中。在上一次循環中,這個數字也不會改變,所以難怪它會反覆報告。 – WhozCraig

回答

2

我想你放錯地方的表達int avg = high[i] + low[i]/i,也是意義似乎不正確的對我說:

第一:我想你想打印的平均爲每個特定的一天,在循環i : 0..n-1,但你計算值只有一次外循環(也許你會覺得在你的地方是什麼i意味着

二:你有每天只有兩個值,即高與低,而不是i值,對嗎?所以得到一個特定d的平均溫度唉它應該是avg = (high[i] + low[i])/2。還要注意大括號,它會產生與代碼中不同的運算符優先級。如果你想計算一個特定日子的「整體」平均值,我會使公式明確,例如通過區分averageOfDay和overallAverage。

第三:你確定avg應該是int嗎?我會建議使用浮動。

float avgSum = 0.0; 
for (i = 0; i < n; i++) { 
    float avgOfDay = (high[i] + low[i])/2.0; 
    avgSum += avgOfDay; 
} 
float overallAvg = avgSum/n; 
printf ("The average temperature up to day %d is: %f", day[n-1], overallAvg); 
+0

我實際上是想在1到4天之間獲得平均值,所以如果用戶輸入了3,那麼它應該從第1,2和3天計算出高和低的平均值。 – Jinto

+0

啊,好的。我誤解了你打印循環中的「整體」平均值的事實。看到編輯的答案... –

+0

它現在工作!但是,每天的平均值出現,而我只想輸出最後一天。例如,如果用戶想要第3天的平均值,則會顯示第1天的平均值,第2天的平均值以及第3天的平均值。 您也可以介紹avgSum和avgOfDay?我認爲我以前從未見過它。 – Jinto