![]() |
Programmieren in Cvon Prof. Dr. Rainer Thomas |

Solange die Auswertung des Ausdrucks einen Wert !=0 (entspr. TRUE) ergibt,
wird die Anweisung (=Schleifenanweisung) ausgeführt;
hat der Ausdruck den Wert =0, so wird mit der folgenden Anweisung fortgefahren.

/* ------------------------------------------------------------------- */
/* Programm ZIFFZAHL */
/* ------------------------------------------------------------------- */
/* Ermittlung der Anzahl der Ziffern einer Integerzahl */
/* ------------------------------------------------------------------- */
#include <stdio.h>
void main(void)
{
int zahl, stellen=1;
printf("\nZahl ? ");
scanf("%d",&zahl);
while(zahl=zahl/10)
stellen++; /* oder : ++stellen; */
printf("\n%d Stellen\n",stellen);
}
/* ------------------------------------------------------------------- */
Bildschirmausgabe :
E:\RT\C\VORL>ziffzahl Zahl ? 32637 5 Stellen
Jede in das Klammerpaar { und } eingeschlossene Folge von Anweisungen. Vor den Anweisungen dürfen auch Vereinbarungen stehen (Variablenver- einbarung, Funktionsdeklaration, Typdefinition)
Die Verbundanweisung ist syntaktisch identisch mit dem Rumpf einer Funktion
Achtung : Die Verbundanweisung wird nicht mit einem ';' abgeschlossen.
/* Programm AUSZAHL */
/* Ausgabe der ersten n ganzen Zahlen */
/* n wird eingelesen */
#include <stdio.h>
void main(void)
{
int n, i=1;
printf("\nWieviel Zahlen ? ");
scanf("%d",&n);
while (i<=n)
{ printf("%d\n",i); /* Verbundanweisung */
++i;
}
}
Bildschirmausgabe :
C>auszahl Wieviel Zahlen ? 6 1 2 3 4 5 6
Wenn die Auswertung des Ausdrucks einen Wert !=0 (entspr. TRUE) ergibt, wird Anweisung1 ausgeführt; wenn der Ausdruck dagegen den Wert 0 hat (enstpr. FALSE), wird Anweisung2 (wenn else-Zweig vorhanden) bzw keine Anweisung (wenn else-Zweig nicht vorhanden) ausgeführt.
bzw.
bzw. 
/* ------------------------------------------------------------------ */
/* Programm COUNT1 */
/* ------------------------------------------------------------------ */
/* Programm zaehlt Blanks und Newlines */
/* Input von stdin */
/* ------------------------------------------------------------------ */
#include <stdio.h>
void main(void)
{
int zb, zn;
int c;
zb=zn=0;
while ((c=getchar()) != EOF)
{ if (c==' ')
++zb;
else if (c=='\n')
++zn;
}
printf("\nZaehlergebnisse : Blanks = %4d\n",zb);
printf("%17s Newlines = %4d\n"," ",zn);
}
/* ------------------------------------------------------------------ */
Bildschirmausgabe :
E:\RT\C\VORL>count1 <count1.c Zaehlergebnisse : Blanks = 297 Newlines = 26

/* Programm ANTWORT1 */
/* Demonstration der switch-Anweisung ohne break */
#include <stdio.h>
void main(void)
{ char zeichen;
printf("Ihre Wahl (j,n,v) ? ");
zeichen=getchar();
switch (zeichen)
{ case 'j':
case 'J': printf("ja\n");
case 'n':
case 'N': printf("nein\n");
case 'v':
case 'V': printf("vielleicht\n");
default : printf("unbekannt\n");
}
}
Bildschirmausgabe:
E:\RT\C\VORL>antwort1 Ihre Wahl (j,n,v) ? n nein vielleicht unbekannt
/* ------------------------------------------------------------------- */
/* Programm ANTWORT2 */
/* Demonstration der switch-Anweisung mit break */
#include <stdio.h>
void main(void)
{ char zeichen;
printf("Ihre Wahl (j,n,v) ? ");
zeichen=getchar();
switch (zeichen)
{ case 'j':
case 'J': printf("ja\n");
break;
case 'n':
case 'N': printf("nein\n");
break;
case 'v':
case 'V': printf("vielleicht\n");
break;
default : printf("unbekannt\n");
break;
}
}
Bildschirmausgabe:
E:\RT\C\VORL>antwort2 Ihre Wahl (j,n,v) ? n nein
Ausdruck2 : Bedingungsausdruck
Ausdruck3 : Veränderungsausdruck
for (i=1; i<100; i++)
printf("%d\n",i);
![]()
{ Anfangsausdruck;
while (Bedingungsausdruck)
{ Anweisung;
Veraenderungsausdruck;
}
}
-------------------------------------------------------------------------
for (i=1; i<100; i++)
printf("%d\n",i);
for (i=1; i<100; )
{ printf("%d\n",i);
i++;
}
for (i=1; i<100; )
printf("%d\n",i++);
for (i=1; i<100; printf("%d\n", i++));
for (i=1; i<100; printf("%d\n",i), i++);
-------------------------------------------------------------------------
zaehl=0;
for (c=erstzeich; c!='\n'; zaehl++, c=getchar());
for (zaehl=0, c=erstzeich; c!='\n'; zaehl++, c=getchar());
zaehl=0;
for (c=erstzeich; c!='\n'; c=getchar())
zaehl++;
zaehl=0;
for (c=erstzeich; c!='\n'; )
{ zaehl++;
c=getchar();
}
Die Auswerte-Reihenfolge der beiden durch den Komma-Operator verbun- denen Teil-Ausdrücke ist festgelegt:
... int y; int x; y = (x=3, x+1); /* y wird der Wert 4 zugewiesen ! */
...
c=getchar();
while (c!=EOF)
{
...
c=getchar();
}
...
while (c=getchar(), c!=EOF)
{
...
}
do
{ xalt=xneu;
xneu=xalt-f/fstrich;
} while (fabs(xneu-xalt)>eps);
/* ------------------------------------------------------------------ */
/* Programm GGT */
/* ------------------------------------------------------------------ */
/* Ermittlung des groessten gemeinsamen Teilers (ggT) und kleinsten */
/* gemeinsamen Vielfaches (kgV) zweier natuerlicher Zahlen a und b */
/* */
/* Es gilt : kgv(a,b) = (a * b) / ggT(a,b) */
/* ------------------------------------------------------------------ */
#include <stdio.h>
void main(void)
{
int a,b;
int p,q,r;
int ggt, kgv;
printf("\nggT und kgV von ? ");
scanf("%d %d",&a,&b);
if (a>b)
{ p=a; /* p <-- max(a,b) */
q=b; /* q <-- min(a,b) */
}
else
{ p=b;
q=a;
}
do
{ r=p%q;
p=q;
q=r;
}
while (r);
ggt=p;
kgv=a/ggt*b;
printf("\nggT(%d, %d) = %d\n",a,b,ggt);
printf("kgV(%d, %d) = %d\n",a,b,kgv);
}
/* ------------------------------------------------------------------ */
Bildschirmausgabe :
E:\RT\C\VORL>ggt ggT und kgV von ? 156 91 ggT(156, 91) = 13 kgV(156, 91) = 1092
Sprung aus einer switch-Anweisung heraus zur folgenden Anweisung, Beendigung einer Schleifenanweisung (while, for, do) unabhängig vom Abbruchkriterium
| bei while und do | : | Sprung unmittelbar zur Auswertung des Schleifenabbruchkriteriums |
| bei for | : | Sprung unmittelbar zur Auswertung des Veränderungsausdrucks |
while (Bedingung1)
{ Anweisung1;
if (Bedingung2) continue;
Anweisung2;
}
ersetzbar durch :
while (Bedingung1)
{ Anweisung1;
if (!Bedingung2)
Anweisung2;
}
bzw. durch :
while (Bedingung1)
{ Anweisung1;
if (Bedingung2) ;
else Anweisung2;
}
Sprung zu der durch die Marke gekennzeichneten Anweisung.
Das Sprungziel muß innerhalb der gleichen Funktion liegen.
Zum
Inhaltsverzeichnis |
Zum
nächsten Abschnitt |