Schleifen in C [] (Schleifen in C), Lektion, Seite 722994
https://www.purl.org/stefan_ram/pub/schleifen_c (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
C-Kurs

Iteration in C 

Feldbreiten

Nach einem Prozentzeichen kann auch noch ein ganzzahliges Numerale eingefügt werden, welches eine Ausgabefeldbreite  angibt.

Die Ausgaben werden dann rechtsbündig  in das links mit Leerzeichen aufgefüllte Feld geschrieben, was die Ausrichtung von Spalten in Tabellen erleichtert.

main.c
#include <stdio.h>

int main( void )
{ printf( "%d\n", 1 );
printf( "%d\n", 12 );
printf( "%d\n", 123 ); printf( "%3d\n", 1 );
printf( "%3d\n", 12 );
printf( "%3d\n", 123 ); }
stdout
1
12
123 1
12
123
main.c
#include <stdio.h>

int main( void )
{ printf( "%5s %5s %5s %5s\n", "A", "B", "C", "D" );
printf( "%5d %5d %5d %5d\n", 1, 321, 1, 321 );
printf( "%5d %5d %5d %5d\n", 12, 12, 12, 12 );
printf( "%5d %5d %5d %5d\n", 123, 1, 123, 1 ); }
stdout
    A     B     C     D
1 321 1 321
12 12 12 12
123 1 123 1

Die Angabe der Anzahl der Nachkommastellen kann auch mit der Angabe einer Feldbreite kombiniert werden.

main.c
#include <stdio.h>

int main( void )
{ printf( "EUR %6.2f\n", 2.38626622 );
printf( "USD %6.2f\n", 412. );
printf( "DEM %6.2f\n", 11.7 ); }
stdout
EUR   2.39
USD 412.00
DEM 11.70

Syntax der while-Anweisung (vereinfacht)

while /ʍɑɪl/ „solange[ wie]“

      ..-..
' ' .''. .----------. .''. .-----------.
--->( while )--->( ( )--->| Ausdruck |--->( ) )--->| Anweisung |--->
. . '..' '----------' '..' '-----------'
''-''

Nach ihrem einleitenden Schlüsselwort while  („während“) wird die Anweisung zur bedingten Ausführung auch while-Anweisung  genannt.

Semantik der while-Anweisung

Die Anweisung wird ausgeführt, wenn der Ausdruck ungleich 0 ist. Nach jeder Ausführung der Anweisung wird der Ausdruck erneut ausgewertet. Ergibt sich dann wieder ein Wert ungleich 0, wird die Anweisung erneut ausgeführt.

Eine Wiederholung eines Programmteils ohne entsprechende Wiederholung von Anweisungen im Quelltext wird auch ein Schleife  genannt. Daher nennt man die while -Anweisung aus while-Schleife. Die if -Anweisung bildet hingegen keine Schleife.

Unter Iteration  verstehen wir hier die Implementation von Schleifen durch solche speziellen Schleifenanweisungen.

Schlüsselwörter

»while« ist ein Schlüsselwort.

Beispiel Endlosschleife

Das folgende Programm mit einer Endlosschleife gibt viele Zahlen aus.

main.c
#include <stdio.h>
#include <stdlib.h> int main( void ){ while( -2 )printf( "%d\n", rand() ); }
stdout
41
18467
6334

Beispiel Zählschleife

Das folgende Programm zählt in Zweierschritten von 10 (einschließlich) bis 14 (einschließlich).

main.c
#include <stdio.h>

int main( void )
{ int i = 10; /* Schleifenvorbereitung */
while
(
i - 16 /* Schleifenpruefung */
)
{ printf( "%d\n", i ); /* Nutzlast */ /* Schleifeninhalt */
i = i + 2; /* Schleifenschritt */ /* Schleifeninhalt */
} /* Schleifeninhalt */ }
stdout
10
12
14

In diesem Programm erkennen wir für Schleifen typische Bestandteile: Einen Teil zur Vorbereitung der Schleife (die Schleifenvorbereitung ); die Prüfung zur Entscheidung, ob die Schleife erneut durchlaufen werden soll (die Schleifenprüfung ); den zu wiederholenden Schleifeninhalt; die zu wiederholende Nutzlast  der Schleife; und den Schleifenschritt, welcher den Übergang zum nächsten Schleifendurchlauf realisiert.

Die Variable »i« spielt für die Schleife eine entscheidende Rolle. Solch eine Variable wird dementsprechend auch Schleifenvariable genannt.

Programmablaufplan zur Zählschleife

        |
V
.---------.
| i := 10 |
'---------'
| .------------.
|<------| i := i + 2 |<-------.
| '------------' |
v |
.-'-. .---------- |
.-' '-. Ja / Ausgabe / |
.-' i - 16 ? '-.---->/ i /----'
'-. .-' / /
'-. .-' -----------
'.'
| Nein
|
V

Struktogramm zur Zählschleife

.-------------------------------------.
| i := 10 |
|-------------------------------------|
| Wiederhole solange wie i - 16 |
| .--------------------------------|
| | Ausgabe i |
| |--------------------------------|
| | i := i + 2 |
'-------------------------------------'

Übungsfragen

Beispiel   Korrektur

Ein Student erklärt: „Bei der If-Schleife wird die Anweisung nach »if( x )« nur dann ausgeführt, wenn der Wert »x« positiv ist.”. Korrigieren Sie eventuelle Fehler des Studenten!

Übungsaufgaben

Wiederholte Ausgabe eines Textes

Schreiben Sie ein Programm, in dem die Anweisung »puts( "Dieses ist ein langer Satz." );« nur einmal vorkommt, und zwar in einer Schleife, von der sie insgesamt zehnmal wiederholt wird. Das Programm soll auf diese Weise die Zeile »Dieses ist ein langer Satz.« zehnmal hintereinander ausgeben.

Zählen von 12 bis 27

Schreiben Sie ein Programm, das die Anweisung »printf( "%d\n", i );« enthält und die Zahlen von 12 bis 27 (eine Zahl pro Zeile, aufsteigend in Einerschritten) ausgibt. Das Programm darf neben der genannten Anweisung keine anderen Ausgabeanweisungen enthalten.

Übungsaufgaben (Gruppe 1)

In Zweierschritten von 14 bis 2 abwärts zählen

Schreiben Sie ein Programm, das die Anweisung »printf( "%d\n", i );« enthält und die Zahlen von 14 bis 2 (eine Zahl pro Zeile) absteigend in Zweierschritten ausgibt. Das Programm darf neben der genannten Anweisung keine anderen Ausgabeanweisungen enthalten.

Grundformen

Schreiben Sie eine Funktion, die mit Sternchen eine Linie ausgibt! Dabei darf das Zeichen »*« (Sternchen, asterisk ) selber nur einmal im Quelltext vorkommen. Die Aufgabe soll also wieder mit einer Schleife gelöst werden. Die Anzahl der Sternchen wird der Funktion als Argument übergeben.

linie( 20 )
********************

Zusatzaufgaben

Zählschleife mit Deckel und Formatierung

Schreiben Sie eine möglichst kurze Funktion »loop« mit zwei ganzzahligen Parameter »min« und »top«, welche alle Zahlen von min  einschließlich bis top  ausschließlich ausgibt. Die Zahlen sollen in aufsteigender Reihenfolge ausgegeben werden. Falls min top  soll gar nichts ausgegeben werden. Ansonsten soll die Liste der ausgegebenen Zahlen mit einem Punkt ».« beendet werden. Falls mehr als eine Zahl ausgegeben wird, so sollen die Zahlen durch eine Zeichenfolge aus ein Komma und ein Leerzeichen »« getrennt werden. Das letzte Komma soll aber durch die fünf Zeichen » und « ersetzt werden. Diese Anforderungen werden durch die folgenden Beispiele veranschaulicht

Die Auswertung von »loop( 4, 3 )« gibt aus: »«.

Die Auswertung von »loop( 4, 4 )« gibt aus: »«.

Die Auswertung von »loop( 4, 5 )« gibt aus: »4.«.

Die Auswertung von »loop( 4, 6 )« gibt aus: »4 und 5.«.

Die Auswertung von »loop( 4, 7 )« gibt aus: »4, 5 und 6.«.

Die Auswertung von »loop( 4, 8 )« gibt aus: »4, 5, 6 und 7.«.

Die Auswertung von »loop( 4, 9 )« gibt aus: »4, 5, 6, 7 und 8.«.

Grundformen

Schreiben Sie eine Funktion, die mit Sternchen ein Rechteck ausgibt! Argumente sind Breite und Höhe.

rechteck( 17, 4 )
***************** 
***************** 
***************** 
*****************

Grundformen

Zusatzaufgabe Schreiben Sie eine sonst der vorangehenden Übungsaufgabe entsprechende Funktion, die mit Sternchen ein Dreieck ausgibt! Diese Funktion soll die Höhe und die Änderung der Breite pro Zeile als Argumente akzeptieren.

dreieck( 6, 1 )

** 
*** 
**** 
***** 
******

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram722994 stefan_ram:722994 Schleifen in C Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd722994, slrprddef722994, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/schleifen_c