In einer Schleife addieren
Schleifen können mehr als ausgeben. Sehr oft addieren sie viele Werte. Einer berühmten Geschichte nach sollte der junge Carl Friedrich Gauß, später ein großer Mathematiker, in der Schule alle Zahlen von 1 bis 100 addieren. Eine Schleife schafft das im Handumdrehen:
int summe = 0;
for (int i = 1; i <= 100; i++) {
summe += i;
}
printf("Summe: %d\n", summe);Summe: 5050Die Variable summe sammelt die Summe. Sie beginnt bei 0, denn bevor du etwas addierst, ist die Summe null. In jedem Durchlauf addiert summe += i eine Zahl: Nach dem ersten Durchlauf ist summe gleich 1, dann 3 (1 + 2), 6 (1 + 2 + 3), 10 und am Ende 5050.
Wo jede Zeile steht, ist wichtig:
int summe = 0;steht vor der Schleife, damit es nur einmal ausgeführt wird. Im Block der Schleife würde es in jedem Durchlauf eine neuesummemit dem Wert 0 erstellen. Und nach der Schleife gäbe essummegar nicht mehr: Eine Variable, die in einem Block erstellt wird, existiert nur in diesem Block, genau wie dasieinerfor-Schleife. Der Compiler würdeerror: use of undeclared identifier 'summe'melden.printfsteht nach der Schleife, wenn die Summe fertig ist. In der Schleife würde es jede Teilsumme ausgeben: 1, 3, 6, 10 und so weiter, hundert Zeilen.
Der Durchschnitt ist die Summe geteilt durch die Anzahl der Werte. Achte auf die Ganzzahldivision. Hier ist der Durchschnitt der Zahlen von 1 bis 10:
int summe = 0;
for (int i = 1; i <= 10; i++) {
summe += i;
}
double durchschnitt = summe / 10;
printf("Durchschnitt: %.1f\n", durchschnitt);Durchschnitt: 5.0Die Summe ist 55, der echte Durchschnitt also 5,5. Aber summe und 10 sind beide ganze Zahlen, deshalb teilt / sie als ganze Zahlen und lässt das .5 weg, genau wie 7 / 2 den Wert 3 ergibt. Das Ergebnis in einem double zu speichern hilft nicht, denn dann ist die Division schon erledigt. Wandle die Summe in einen double um, bevor du teilst:
int summe = 0;
for (int i = 1; i <= 10; i++) {
summe += i;
}
double durchschnitt = (double)summe / 10;
printf("Durchschnitt: %.1f\n", durchschnitt);Durchschnitt: 5.5(double)summe macht die Summe zu einer Dezimalzahl, und eine Dezimalzahl geteilt durch eine ganze Zahl ergibt eine Dezimalzahl. Setze (double) direkt vor summe. (double)(summe / 10) würde nur das Ergebnis der Ganzzahldivision umwandeln, und du bekämest wieder 5.0.
So schreibst du es:
Anweisungen
- 1
Du machst eine Liegestütz-Challenge über sechs Tage: 5 Liegestütze an Tag 1 und jeden weiteren Tag 5 mehr, wie es das Programm im Editor ausgibt. Wie viele Liegestütze machst du insgesamt? Erstelle vor der Schleife eine Variable
summemit dem Wert0. Addiere in der Schleife mit+=die Liegestütze des Tages,tag * 5, dazu. Gib die Summe nach der Schleife alsSumme: 105aus. - 2
Erstelle am Ende des Programms eine Variable
durchschnittvom Typdoublemit dem durchschnittlichen Wert der Liegestütze pro Tag:summegeteilt durch6. Gib sie mit%.1falsDurchschnitt: 17.5aus. Wenn dein ProgrammDurchschnitt: 17.0ausgibt, lies den Abschnitt über die Ganzzahldivision noch einmal.