2017-02-12 8 views
0

Ich versuche, den Mittelwert von hohen und niedrigen Temperaturen zu berechnen, die von einem Benutzer eingegeben werden, und die Anzahl der Tage, die eingeschlossen werden können, sind zwischen 1 und 4, aber ich habe Schwierigkeiten zu verstehen, wie um darüber zu gehen. Der Code, den ich geschrieben habe, ergibt eine völlig irrelevante Zahl. Hier ist mein Code ist:Berechnen des Mittelwerts eines Arrays

#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

der einzige Ort, den Sie 'avg' berechnen ist von' int avg = high [i] + low [i]/i; 'Sie können darüber nachdenken, was der Wert von' I' an diesem Punkt ist in deinem Programm. Diese Nummer ändert sich auch nicht während der letzten Runde, es ist also kein Wunder, dass sie wiederholt gemeldet wird. – WhozCraig

Antwort

2

Ich nehme an, Sie fehl am Platze Ausdruck int avg = high[i] + low[i]/i, und auch die Bedeutung scheint nicht richtig zu mir:

Erstens: Ich nehme an, Sie den Mittelwert für jeden einzelnen Tag in der Schleife drucken möchten i : 0..n-1, aber Sie berechnen den Wert nur einmal außerhalb der Schleife (und man kann sich vorstellen, was i an Ihrem Platz bedeutet

Zweitens:. Sie haben nur zwei Werte für jeden Tag, also hoch und niedrig, und nicht i Werte, Also, um die Durchschnittstemperatur für ein bestimmtes d zu bekommen ay es sollte avg = (high[i] + low[i])/2 sein. Beachten Sie auch die geschweiften Klammern, die einen anderen Operatorenrang als in Ihrem Code haben. Und wenn Sie einen "übergreifenden" Mittelwert bis zu einem bestimmten Tag berechnen möchten, würde ich die Formel explizit machen, z. durch Unterscheiden eines AverageOfDay von einem OverallAverage.

Drittens: Sind Sie sicher, avg sollte ein int sein? Ich würde vorschlagen, Float zu verwenden.

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

Ich versuche tatsächlich, den Durchschnitt für eine Anzahl von Tagen zwischen 1 bis 4 zu bekommen, also wenn der Benutzer sagt 3, sollte es den Durchschnitt von Hoch und Tief von Tag 1, 2 und 3 berechnen. – Jinto

+0

Ah, OK. Ich habe die Tatsache falsch interpretiert, dass man den "overal" Durchschnitt in einer Schleife ausdruckt. Siehe bearbeitete Antwort ... –

+0

Es funktioniert jetzt! Allerdings erscheint der Durchschnitt für jeden Tag, während ich nur den letzten Tag ausgeben möchte. Zum Beispiel, wenn der Benutzer den Durchschnitt bis zu Tag 3 möchte, zeigt er den Durchschnitt bis zum Tag 1, den Durchschnitt bis zum Tag 2 und schließlich den Durchschnitt bis zum Tag 3. Auch würde es Ihnen etwas ausmachen, das + = zwischen avgSum und avgOfDay? Ich glaube nicht, dass ich es jemals zuvor gesehen habe. – Jinto

Verwandte Themen