2017-02-12 3 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' от' междунар ср = высокий [я] + низкая [я]/я, 'Вы можете думать о том, что значение' i' находится в этой точке в вашей программе. Также это число не меняется во время последнего цикла, поэтому неудивительно, что это неоднократно сообщалось. – WhozCraig

ответ

2

Я полагаю, вы неуместны выражение int avg = high[i] + low[i]/i, а также смысл не кажется правильным мне:

Во-первых: Я полагаю, вы хотите напечатать в среднем за каждый конкретный день в цикле i : 0..n-1, но вычислить значение только один раз вне цикла (и вы можете думать о том, что i на вашем месте означает

Во-вторых. у вас есть только два значения для каждого дня, то есть высокие и низкие, и не i значения, так? Чтобы получить среднюю температуру для определенного d ay должно быть avg = (high[i] + low[i])/2. Также обратите внимание на фигурные скобки, что дает другой приоритет оператора, чем в вашем коде. И если вы хотите рассчитать «overal» avg до определенного дня, я бы сделал формулу явной, например. путем выделения среднего значения OfDay из totalAverage.

В-третьих: вы уверены, что avg должно быть int? Я бы предложил использовать float.

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

Смежные вопросы