Programmiersprache C

3.4.4. Zählschleife ( FOR )

Struktogramm

Eine Laufvariable nimmt nacheinander eine vorgegebene Anzahl von Werten an, die bestimmt werden durch einen Anfangswert, eine Schrittweite und einen Endwert.
Der Datentyp der Laufvariable und entsprechend der Typ von Anfangswert, Endwert und Schrittweite unterliegt häufig Beschränkungen. Zulässig sind in der Regel ordinale Datentypen wie int.
Der Wert der Laufvariablen darf innerhalb des Aktionsteils nicht verändert werden !

Die Zählschleife ist ein Spezialfall der Iteration:

Zählschleifen werden im allgemeinen als Abweisschleifen realisiert, d.h. der Aktionsteil muß nicht notwendig durchlaufen werden.
Bemerkung: Die Realisierung als Abweisschleife ist in modernen Sprach(version)en die Regel, nicht immer jedoch in älteren Sprachversionen, z.B. in FORTRAN 66.

Pseudocode

  FOR laufvariable:=anfangswert UNTIL endwert STEP schrittweite DO
    anweisungsfolge
  END DO
Die Zählschleife ist ein Spezialfall des verallgemeinerten Zyklus:
  laufvariable := anfangswert
  LOOP
    WHEN laufvariable > endwert THEN EXIT
    anweisungsfolge
    laufvariable := laufvariable + schrittweite
  END LOOP
C

  for (laufvariable=anfangswert; abbruchbedingung; korrektur_laufvariable)
    anweisung;             /* einzelne Anweisung oder Anweisungsblock */
Beispiel:
  #define n ...

  int produkt[n];
  int i, n;

  for (i=0; i<n; i++)                { i = 0, 1, 2, ..., n-1 }
    kaufe(produkt[i]);

  for (i=n; i>0; i--)                { i = n, n-1, ..., 2, 1 }
    count_down(i);
Unendliche Schleife:
  for(;;)
    { ... }
Zu beachten ist, daß abbruchbedingung in jedem Iterationsschritt neu ausgewertet wird, der Rahmen einer "normalen" Zählschleife kann damit gebrochen werden.

C erlaubt es, eine Zählschleife gleichzeitig über mehrere Steuervariablen zu betreiben: Die Steuervariablen werden in jedem Iterationsschritt gemeinsam verändert.

Beispiel:

  int string_equal(const char *s1, const char *s2)
  /* Ermittlung, ob Zeichenketten s1 und s2 identisch */
  {
    char *p1, *p2;

    for ( p1=s1, p2=s2; *p1 && *p2; p1++, p2++ )
      if ( *p1 != *p2 )
        return 0;                    /* ungleich */
    return *p1 == *p2;               /* beide gleich lang ? */
  }
Die Möglichkeiten der for-Anweisung in C sprengen die von anderen Sprachen her bekannten Mechanismen einer Zäschleife.
Beispiel:
  int pow(int base, int exponent)
  /* Potenzierung: Berechnung von base^exponent */
  {
    int result = 1;

    for ( ; exponent > 0; exponent /= 2) {
      if ( exponent % 2 )
        result *= base;
      base *= base;
    }
    return result;
  }
Das obige Beispiel zeigt, daß die Initialisierung der Laufvariablen auch au&sszlig;erhalb der for-Anweisung erfolgen kann.

Zulässig in C++, nicht zulässig in C:

  for ( int i = 1; i < 3; ++i )
    printf("%d", i);

Zurück zum Menü
Zurück zur vorigen Seite Weiter zur nächsten Seite

P. Böhme, 25.01.1996