10.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 erfolgt. 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 vorne. Die for-Schleife wird beendet, wenn die Schleifen-Bedingung 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 in diesem Beispiel gesehen, 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 10.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 ein Programm, dass 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;
}
 Hier klicken, um das Bild zu Vergrößern
Abbildung 10.11
Programmablaufplan der for-Schleife
Typische Fehler bei der Verwendung einer for-Schleife
|
Ein häufiger Fehler ist das Vergessen des Semikolons zwischen der Initialisierung, Bedingung und der Reinitialisierung der Schleifenvariable. |
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)
10.10.1 Beispiele für eine for-Schleife
 
Als Anregung und Übung sollen im Anschluss 10 verschiedene Möglichkeiten der Verwendung einer for-Schleife gezeigt werden.
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 i 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 i 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 nimmt nichts anderes vor, 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 auf dem Bildschirm der String "Endlosschleife" 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.
|