Dein Fortschritt:
0 / 0 Aufgaben
1
Eine Woche Wetterdaten
AFB I–IIDie Wetter-AG hat auf dem Schuldach eine Messstation aufgebaut. Jeden Mittag wird die Temperatur in Grad Celsius gespeichert. Mila schreibt ein C-Programm, das für eine Woche den Mittelwert und den wärmsten Tag ausgibt.
C · woche.c
#include <stdio.h> int main(void) { double temp[7] = {14.5, 17.0, 12.5, 19.5, 21.0, 16.5, 18.0}; int n = sizeof(temp) / sizeof(temp[0]); int imax = 0; double summe = 0.0; for (int i = 0; i < n; i++) { summe = summe + temp[i]; if (temp[i] > temp[imax]) { imax = i; } } printf("Mittelwert: %.1f Grad\n", summe / n); printf("Maximum: %.1f Grad am Tag %d\n", temp[imax], imax + 1); return 0; }
Ihr Mitschüler Paul ändert die Schleifenbedingung zu i <= n, „damit auch der letzte Tag sicher dabei ist“. Das Programm lässt sich ohne Warnung übersetzen. Beim ersten Start erscheint als Mittelwert eine riesige negative Zahl mit über 80 Stellen, beim zweiten Start wieder 17.0.
Das Array im Speicher
- Geben Sie den Wert von
temp[2], den größten zulässigen Index sowie die Werte vonsizeof(temp)undnan (typische Größen). - Ermitteln Sie die Ausgabe des Programms. Halten Sie dabei fest, bei welchem Schleifendurchlauf sich
imaxändert. - Begründen Sie, warum der Compiler Pauls Fehler nicht meldet und warum sich das Programm bei jedem Start anders verhalten kann.
Hinweise
Hinweis zu Aufgabe a)
Der Index beginnt bei 0. Ein
double belegt typisch 8 Byte.Hinweis zu Aufgabe b)
Legen Sie eine Tabelle mit den Spalten
i, temp[i], summe und imax an. imax ändert sich nur, wenn ein Wert größer als das bisherige Maximum ist.Hinweis zu Aufgabe c)
Welcher Index wird im letzten Durchlauf mit
i <= n benutzt? Prüft C beim Zugriff temp[i], ob der Index gültig ist?