Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

 << zurück
C von A bis Z von Jürgen Wolf
Das umfassende Handbuch für Linux, Unix und Windows
– 2., aktualisierte und erweiterte Auflage 2006
Buch: C von A bis Z

C von A bis Z
1.116 S., mit CD, Referenzkarte, 39,90 Euro
Galileo Computing
ISBN 3-89842-643-2
gp Kapitel 10 Kontrollstrukturen
  gp 10.1 Verzweigungen mit der if-Bedingung
    gp 10.1.1 Anweisungsblock
  gp 10.2 Die Verzweigung mit else if
  gp 10.3 Die Verzweigung mit else
  gp 10.4 Der !-Operator (logischer Operator)
  gp 10.5 Logisches UND (&&) – Logisches ODER (||)
  gp 10.6 Bedingungsoperator ?:
  gp 10.7 Fallunterscheidung: die switch-Verzweigung
    gp 10.7.1 default
  gp 10.8 Die while-Schleife
    gp 10.8.1 Endlosschleife (while)
    gp 10.8.2 Fehlervermeidung bei while-Schleifen
  gp 10.9 Die do while-Schleife
  gp 10.10 Die for-Schleife
    gp 10.10.1 Beispiele für eine for-Schleife
  gp 10.11 Kontrollierte Sprünge
    gp 10.11.1 continue
    gp 10.11.2 break
  gp 10.12 Direkte Sprünge mit goto
  gp 10.13 Notationsstil
    gp 10.13.1 K&R-Stil
    gp 10.13.2 Whitesmith-Stil
    gp 10.13.3 Allman-Stil
    gp 10.13.4 GNU EMACS-Stil
    gp 10.13.5 Der Stil des Autors ;) (K&R-like)


Galileo Computing - Zum Seitenanfang

10.10 Die for-Schleifdowntop

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;
}

Abbildung
Hier klicken, um das Bild zu Vergrößern

Abbildung 10.11   Programmablaufplan der for-Schleife

Typische Fehler bei der Verwendung einer for-Schleife

gp  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++)
gp  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++){  }
gp  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)

Galileo Computing - Zum Seitenanfang

10.10.1 Beispiele für eine for-Schleife  toptop

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.

 << zurück
  
  Zum Katalog
Zum Katalog: C von A bis Z
C von A bis Z
bestellen
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchtipps
Zum Katalog: Shell-Programmierung






 Shell-Programmierung


Zum Katalog: Linux-UNIX-Programmierung






 Linux-UNIX-Programmierung


Zum Katalog: C/C++






 C/C++


Zum Katalog: UML 2.0






 UML 2.0


Zum Katalog: Reguläre Ausdrücke






 Reguläre Ausdrücke


Zum Katalog: Linux






 Linux


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo





Copyright © Galileo Press 2006
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de