Summe und Durchschnitt
Jetzt, da du ein Array durchlaufen kannst, sehen wir uns an, wofür solche Schleifen am häufigsten verwendet werden. Das erste Muster addiert alles. Du kennst es aus der Lektion über Schleifen; mit einem Array addierst du seine Elemente. Sagen wir, du hast die Preise der Dinge in deinem Warenkorb und willst die Gesamtsumme:
int preise[] = {120, 45, 300, 85};
int anzahl = sizeof(preise) / sizeof(preise[0]);
int summe = 0;
for (int i = 0; i < anzahl; i++) {
summe += preise[i];
}
printf("Summe: %d\n", summe);Das gibt Folgendes aus:
Summe: 550Die Variable summe sammelt die Summe. Sie beginnt vor der Schleife bei 0, denn bevor du etwas addierst, ist die Summe null. In jedem Durchlauf addiert summe += preise[i] einen Preis: Nach dem ersten Durchlauf ist summe gleich 120, dann 165, 465 und schließlich 550. Das printf steht nach der Schleife, wenn die Summe fertig ist. In der Schleife würde es jede Teilsumme ausgeben.
Der Durchschnitt ist die Summe geteilt durch die Anzahl der Werte. Achte hier auf die Ganzzahldivision: summe und anzahl sind beide int, deshalb ist summe / anzahl gleich 137 und nicht 137.5, genau wie 7 / 2 gleich 3 ist. Auf dieser Seite bemerkst du das oft durch eine Fehlermeldung. Wenn du das Ergebnis mit %.2f ausgibst, wie in printf("Durchschnitt: %.2f\n", summe / anzahl);, lässt sich das Programm nicht kompilieren:
main.c:10:36: error: format specifies type 'double' but the argument has type 'int' [-Werror,-Wformat]%.2f braucht eine Dezimalzahl, aber summe / anzahl ist eine ganze Zahl. Unter der Meldung schlägt Clang %.2d vor, aber das würde nicht helfen: Der Nachkommateil ginge trotzdem verloren. Wandle stattdessen die Summe mit (double) in einen double um, bevor du teilst:
double durchschnitt = (double)summe / anzahl;
printf("Durchschnitt: %.2f\n", durchschnitt);Das gibt Folgendes aus:
Durchschnitt: 137.50(double)summe macht aus summe eine Dezimalzahl, und eine Dezimalzahl geteilt durch eine ganze Zahl ergibt eine Dezimalzahl. Wo du (double) hinsetzt, ist wichtig. (double)(summe / anzahl) teilt zuerst zwei ganze Zahlen und macht erst dann aus 137 die Zahl 137.00: zu spät. Dasselbe gilt für double durchschnitt = summe / anzahl;. Die Variable ist ein double, aber die Division hat das .5 schon verloren.
So schreibst du es:
Anweisungen
- 1
Das Array
punkteenthält deine Punkte aus vier Tests. Erstelle eine Variablesummemit dem Wert0. Gehe dannpunktemit einerfor-Schleife durch und addiere jedes Element mit+=zusumme. - 2
Gib die Summe nach der Schleife als
Summe: 94aus. - 3
Erstelle am Ende des Programms eine Variable
durchschnittvom Typdoublemit dem Durchschnitt und gib sie mit einer Nachkommastelle aus:Durchschnitt: 23.5. Wenn dein ProgrammDurchschnitt: 23.0ausgibt, lies den Abschnitt über die Ganzzahldivision noch einmal.