8.10 Die »for«-Schleife
Mit der for-Schleife können Sie – wie schon mit der while-Schleife – Anweisungsblöcke mehrfach hintereinander ausführen. Der Unterschied ist jedoch, dass bei der for-Schleife die Initialisierung, die Bedingung und die Reinitialisierung der Schleifenvariable schon in der for-Anweisung erfolgen. Die Syntax zur for-Schleife:
for(Initialisierung; Bedingung; Reinitialisierung) { /* Anweisungen */ }
Beim Ablauf der for-Schleife wird in der Regel zuerst die Schleifenvariable initialisiert. Dies geschieht aber nur einmal, unabhängig davon, wie oft sich die Schleife wiederholt. Danach findet typischerweise eine Bedingungsüberprüfung statt. Ergibt diese »wahr«, geht die Ausführung im Anweisungsblock mit weiteren Anweisungen weiter.
Hat der Anweisungsblock alle Anweisungen ausgeführt, wird die Reinitialisierung der Schleifenvariable ausgeführt. Dann wird erneut die Schleifen-Bedingung überprüft, und alles beginnt von vorn. Die for-Schleife wird beendet, wenn die Schleifenbedingung nicht mehr wahr ist.
Die Arbeitsweise einer for-Schleife lässt sich gut anhand des folgenden Beispiels demonstrieren:
/* for1.c */ #include <stdio.h> int main(void) { int i; for(i=1; i <= 5; i++) printf("for(i=1; %d <= 5; %d++) \n", i, i); return 0; }
Das Programm zeigt jeweils den aktuellen Variableninhalt von i in der for-Schleife. Wie Sie in diesem Beispiel gesehen haben, kann auch bei den Schleifen der Anweisungsblock mit den geschweiften Klammern weggelassen werden, wenn dieser nur aus einer Anweisung besteht. Der Programmablaufplan der for-Schleife ist in Abbildung 8.11 dargestellt.
Mit for-Schleifen lassen sich aber nicht nur Schleifen zum Dekrementieren (––) bzw. Inkrementieren (++) realisieren. Sie können in der for-Schleife auch weitere Rechenoperationen vornehmen. Hier sehen Sie ein Programm, das immer die letzte Dezimalstelle eines Werts abschneidet. Die Ergebniszahl soll danach spiegelverkehrt ausgegeben werden:
/* for2.c */ #include <stdio.h> int main(void) { int zahl; for(zahl=1234; zahl >= 1; zahl/=10) printf("%d", zahl%10); printf("\n"); return 0; }
Typische Fehler bei der Verwendung einer »for«-Schleife
- Ein häufiger Fehler ist, das Semikolon zwischen der Initialisierung, der Bedingung und der Reinitialisierung der Schleifenvariable zu vergessen.
for(i=1 i<=5 i++) /* korrekt-> */ for(i=1; i<=5; i++)
- Natürlich sollten Sie auch nicht den Fehler machen, am Ende der Schleife ein Semikolon zu setzen; außer es ist gewollt.
for(i=1; i<=5; i++); /* korrekt-> */ for(i=1; i<=5; i++){ }
- Und das Wichtigste ist, für die richtige Abbruchbedingung zu sorgen, da sonst das Programm die for-Schleife nicht mehr verlässt. Man spricht dann von einer Endlosschleife.
for(i=2; i!=5; i+=2) /* korrekt-> */ for(i=2; i<=5; i+=2)
Abbildung 8.11 Programmablaufplan der »for«-Schleife
8.10.1 Einsatzmöglichkeiten der »for«-Schleife
Als Anregung und Übung zeige ich Ihnen im Anschluss 10 verschiedene Möglichkeiten der Verwendung einer for-Schleife.
1. Möglichkeit
/* for3.c */ #include <stdio.h> int main(void) { int sek; for(sek = 5; sek > 0; sek--) printf("%d Sekunden!\n", sek); printf("Die Zeit ist abgelaufen! \n"); return 0; }
Hier benutzen Sie den Dekrement-Operator zum Rückwärtszählen. Die Schleife zählt so lange rückwärts, bis der Wert sek gleich 0 ist.
2. Möglichkeit
/* for4.c */ #include <stdio.h> int main(void) { int n; for(n = 0; n <= 60; n = n + 10) printf("%d\n",n); return 0; }
Sie können innerhalb der Schleife nicht nur inkrementieren und dekrementieren, sondern auch rechnen. In diesem Fall werden die Zahlen in 10er-Schritten ausgegeben – von 0 bis 60.
3. Möglichkeit
/* for5.c */ #include <stdio.h> int main(void) { char ch; for(ch = 'A'; ch <= 'Z'; ch++) printf("%c, ", ch); printf("\n"); return 0; }
Diese Möglichkeit funktioniert auch sehr gut mit dem Datentyp char. Dann wird das Alphabet in Großbuchstaben ausgegeben.
4. Möglichkeit
/* for6.c */ #include <stdio.h> int main(void) { int cube; for(cube = 1; cube * cube * cube <= 216; cube++) printf("n=%d Volumen : %d \n", cube, cube*cube*cube); return 0; }
Als Abbruchbedingung können Sie ebenso eine Berechnung verwenden. In diesem Fall soll das Volumen eines Würfels bis zur Größe von maximal 216 berechnet werden. Die Abbruchbedingung ist also erreicht, wenn cube bis 7 hochgezählt wurde, da 7 * 7 * 7 größer ist als 216.
5. Möglichkeit
/* for7.c */ #include <stdio.h> int main(void) { double zs; for(zs = 100.0; zs < 150.0; zs = zs * 1.1) printf("%.2f\n", zs); return 0; }
Bei dieser Möglichkeit werden immer 10 % vom jeweiligen Gesamtwert berechnet. Sie haben zum Beispiel 100 auf der Bank und bekommen darauf 10 % Zinsen im Jahr. Sie wollen wissen, nach wie vielen Jahren der Betrag in die Nähe von 150 kommt.
6. Möglichkeit
/* for8.c */ #include <stdio.h> int main(void) { int x,y=50; for(x = 0; y <= 75; y = (++x*5) + 50) printf("%d\n", y); return 0; }
Diese etwas komplex anmutende Schleife tut nichts anderes, als einen Wert in 5er-Schritten von 50–75 auszugeben. Zuerst wird in den Klammern (x*5) berechnet und anschließend 50 addiert. Da x sich bei jedem Durchlauf um den Wert 1 erhöht und mit 5 multipliziert wird, ergeben sich Werte in 5er-Sprüngen.
7. Möglichkeit
/* for9.c */ #include <stdio.h> int main(void) { int x = 2, y; for(y=2; x<20;) { x = x * y; printf("%d\n", x++); } return 0; }
Sie sehen hier, dass nicht unbedingt alle Variablen einer for-Schleife deklariert werden müssen. Lediglich die beiden Semikolons müssen immer in der for-Schleife stehen.
8. Möglichkeit
/* for10.c */ #include <stdio.h> int main(void) { for(;;) printf("Endlosschleife!!\n"); return 0; }
Hier ein Beispiel, bei dem überhaupt nichts in der for-Schleife steht. Wenn Sie dieses Programm ausführen, wird so lange der String Endlosschleife auf dem Bildschirm ausgegeben, bis Sie das Programm selbst gewaltsam abbrechen. Die Schreibweise for(;;) ist gleichwertig mit while(1). Beides sind Formen von Endlosschleifen.
9. Möglichkeit
/* for11.c */ #include <stdio.h> int main(void) { int n; for( printf("Bitte eine Zahl eingeben: "); n!=5; ) scanf("%d", &n); printf("Diese Zahl wollte ich\n"); return 0; }
Hier benutzen Sie die for-Schleife zur Abfrage einer Zahl. Die Schleife wird beendet, wenn Sie die Zahl 5 eingeben.
10. Möglichkeit
/* for12.c */ #include <stdio.h> int main(void) { int n1, n2; for(n1 = 1, n2 = 2; n1 <= 10; n1++) printf("%d\n",n1*n2); return 0; }
Es ist auch möglich, mehrere Werte innerhalb einer for-Schleife zu initialisieren.
Natürlich war dies nur eine Auswahl von Verwendungsmöglichkeiten einer for-Schleife. Der Abschnitt sollte jedoch zeigen, wie flexibel sich for-Schleifen verwenden lassen.
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.