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

Inhaltsverzeichnis
Vorwort
Vorwort des Gutachters
1 Einstieg in C
2 Das erste Programm
3 Grundlagen
4 Formatierte Ein-/Ausgabe mit »scanf()« und »printf()«
5 Basisdatentypen
6 Operatoren
7 Typumwandlung
8 Kontrollstrukturen
9 Funktionen
10 Präprozessor-Direktiven
11 Arrays
12 Zeiger (Pointer)
13 Kommandozeilenargumente
14 Dynamische Speicherverwaltung
15 Strukturen
16 Ein-/Ausgabe-Funktionen
17 Attribute von Dateien und das Arbeiten mit Verzeichnissen (nicht ANSI C)
18 Arbeiten mit variabel langen Argumentlisten – <stdarg.h>
19 Zeitroutinen
20 Weitere Headerdateien und ihre Funktionen (ANSI C)
21 Dynamische Datenstrukturen
22 Algorithmen
23 CGI mit C
24 MySQL und C
25 Netzwerkprogrammierung und Cross–Plattform-Entwicklung
26 Paralleles Rechnen
27 Sicheres Programmieren
28 Wie geht’s jetzt weiter?
A Operatoren
B Die C-Standard-Bibliothek
Stichwort

Buch bestellen
Ihre Meinung?

Spacer
<< zurück
C von A bis Z von Jürgen Wolf
Das umfassende Handbuch
Buch: C von A bis Z

C von A bis Z
3., aktualisierte und erweiterte Auflage, geb., mit CD und Referenzkarte
1.190 S., 39,90 Euro
Rheinwerk Computing
ISBN 978-3-8362-1411-7
Pfeil 8 Kontrollstrukturen
Pfeil 8.1 Verzweigungen mit der »if«-Bedingung
Pfeil 8.1.1 Anweisungsblock
Pfeil 8.2 Die Verzweigung mit »else if«
Pfeil 8.3 Die Verzweigung mit »else«
Pfeil 8.4 Der !-Operator (logischer Operator)
Pfeil 8.5 Logisches UND (&&) – logisches ODER (||)
Pfeil 8.6 Der Bedingungsoperator »?:«
Pfeil 8.7 Fallunterscheidung: die »switch«-Verzweigung
Pfeil 8.7.1 default
Pfeil 8.8 Die »while«-Schleife
Pfeil 8.8.1 Endlosschleife (»while«)
Pfeil 8.8.2 Fehlervermeidung bei »while«-Schleifen
Pfeil 8.9 Die »do while«-Schleife
Pfeil 8.10 Die »for«-Schleife
Pfeil 8.10.1 Einsatzmöglichkeiten der »for«-Schleife
Pfeil 8.11 Kontrollierte Sprünge
Pfeil 8.11.1 continue
Pfeil 8.11.2 break
Pfeil 8.12 Direkte Sprünge mit »goto«
Pfeil 8.13 Notationsstil
Pfeil 8.13.1 K&R-Stil
Pfeil 8.13.2 Whitesmith-Stil
Pfeil 8.13.3 Allman-Stil
Pfeil 8.13.4 GNU EMACS-Stil
Pfeil 8.13.5 Der Stil des Autors ;) (K&R-like)


Rheinwerk Computing - Zum Seitenanfang

8.10 Die »for«-Schleife Zur nächsten ÜberschriftZur vorigen Überschrift

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


Rheinwerk Computing - Zum Seitenanfang

8.10.1 Einsatzmöglichkeiten der »for«-Schleife topZur vorigen Überschrift

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.



Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen. >> Zum Feedback-Formular
<< zurück
  
  Zum Katalog
Zum Katalog: C von A bis Z

 C von A bis Z
Jetzt bestellen


 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchtipps
Zum Katalog: C/C++






 C/C++


Zum Katalog: Einstieg in C






 Einstieg in C


Zum Katalog: Schrödinger programmiert C++






 Schrödinger
 programmiert C++


Zum Katalog: C++ Handbuch






 C++ Handbuch


Zum Katalog: IT-Handbuch für Fachinformatiker






 IT-Handbuch für
 Fachinformatiker


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo




Copyright © Rheinwerk Verlag GmbH 2009
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.


[Rheinwerk Computing]

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de