2017-02-12 269 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