Galileo Computing < openbook > Galileo 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

Download:
- ZIP, ca. 10,6 MB
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
Galileo 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)

Mit dem bisherigen Wissen können Sie die Programme immer nur sequenziell ablaufen lassen. Sie laufen also immer Zeile für Zeile ab. In diesem Kapitel wird nun der sequenzielle Programmfluss gebrochen.

8 Kontrollstrukturen

Sie haben folgende drei Möglichkeiten, um den sequenziellen Programmfluss zu ändern:

  • Verzweigungen: Im Programm wird eine Bedingung definiert, die entscheidet, an welcher Stelle das Programm fortgesetzt werden soll.
  • Schleifen (Iteration): Ein Anweisungsblock wird so oft wiederholt, bis eine bestimmte Abbruchbedingung erfüllt wird.
  • Sprünge: Die Programmausführung wird mithilfe von Sprungmarken an einer anderen Position fortgesetzt. Obwohl sie nach wie vor möglich sind, werden Sprünge in einem Programm mittlerweile als schlechter Stil angesehen. Sie sind auch nicht notwendig. Mit dem bisher Gesagten meine ich direkte Sprünge. Mit Schlüsselwörtern wie return, break, continue, exit und der Funktion abort() können jedoch kontrollierte Sprünge ausgeführt werden.

Galileo Computing - Zum Seitenanfang

8.1 Verzweigungen mit der »if«-Bedingung Zur nächsten ÜberschriftZur vorigen Überschrift

Die if-Bedingung hat folgende Syntax:

if(BEDINGUNG == wahr) {
   Anweisung1;
 }
Anweisung2;

Wenn die Bedingung zwischen den Klammern des if-Schlüsselwortes wahr (true) ist, wird Anweisung1 im Anweisungsblock ausgeführt. Anschließend wird das Programm bei Anweisung2, also nach dem Anweisungsblock, fortgesetzt. Ist die Bedingung unwahr (false), wird Anweisung1 nicht ausgeführt, und das Programm fährt sofort mit Anweisung2 fort.


Galileo Computing - Zum Seitenanfang

8.1.1 Anweisungsblock topZur vorigen Überschrift

In einem Anweisungsblock werden Anweisungen (mindestens eine) zusammengefasst. Als Anweisungsblock gelten alle Anweisungen, die zwischen geschweiften Klammern ({}) stehen. Anweisungsblöcke lassen sich auch ineinander verschachteln. Es empfiehlt sich daher, beim Erstellen eines Programms auf eine saubere Strukturierung (d. h. entsprechendes Einrücken bei den Anweisungen eines Blocks) zu achten, um den Überblick zu wahren.

Den Programmablauf der if-Bedingung können Sie sich schematisch so vorstellen wie in Abbildung 8.1 (die Darstellung wird auch als Programmablaufplan bezeichnet):

Abbildung 8.1 Programmablaufplan zur »if«-Anweisung

Sehen Sie sich dazu das folgende Programmbeispiel an:

/* if1.c */
#include <stdio.h>

int main(void) {
   unsigned int alter;

   printf("Wie alt sind Sie: ");
   scanf("%u", &alter);
   /* ... noch jünger als 18? */
   if(alter < 18) {
      printf("Sie sind noch nicht volljährig\n");
   }
    printf("Bye\n");
    return 0;
}

Das Programm fordert Sie auf, Ihr Alter einzugeben. In der Bedingung if(zahl < 18) wird überprüft, ob Sie jünger als 18 Jahre sind. Sind Sie jünger, wird die printf()-Anweisung im Anweisungsblock mit entsprechender Ausgabe bearbeitet. Wurde aber ein Wert eingegeben, der größer oder gleich 18 ist, wird nur die printf()-Anweisung hinter dem Anweisungsblock ausgeführt, die »Bye« ausgibt. Abbildung 8.2 zeigt den Programmablaufplan zu diesem Beispiel:

Abbildung 8.2 Programmablaufplan zum Listing

Jetzt soll das Programm um einige if-Bedingungen erweitert werden:

/* if2.c */
#include <stdio.h>

int main(void) {
   unsigned int alter;

   printf("Wie alt sind Sie: ");
   scanf("%u", &alter);

   if(alter < 18)  {
      printf("Sie sind noch nicht volljährig\n");
   }
   if(alter > 18)  {
      printf("Sie sind volljährig\n");
   }
   if(alter == 18) {
      printf("Den Führerschein schon bestanden?\n");
   }
   printf("Bye\n");
   return 0;
}

Es ist offensichtlich, wie das Programm vorgeht: Sie geben das Alter ein, und mithilfe der einzelnen if-Bedingungen testet es, ob die eingegebene Zahl größer, kleiner oder gleich 18 ist. Bevor das Programm etwas genauer analysiert wird, sollten Sie sich eine Tabelle mit den bisher verwendeten Vergleichsoperatoren und ihrer jeweiligen Bedeutung ansehen.


Tabelle 8.1 Übersicht zu Vergleichsoperatoren (relationale Operatoren)

Vergleichsoperator Bedeutung
a < b

wahr, wenn a kleiner als b

a <= b

wahr, wenn a kleiner oder gleich b

a > b

wahr, wenn a größer als b

a >= b

wahr, wenn a größer oder gleich b

a == b

wahr, wenn a gleich b

a != b

wahr, wenn a ungleich b


Zurück zum Programm. Die erste Anweisung

if(alter < 18)

testet, ob die Zahl, die Sie eingegeben haben, kleiner als 18 ist. Ist die Bedingung wahr, springt das Programm unmittelbar in den für diese Bedingung geschriebenen Anweisungsblock, der in den geschweiften Klammern steht. Falls also die eingegebene Zahl kleiner als 18 ist, wird der Anweisungsblock

      {
         printf("Sie sind noch nicht volljährig\n");
      }

ausgeführt. Besteht der Anweisungsblock hinter der Kontrollstruktur lediglich aus einer einzigen Anweisung, so können die geschweiften Klammern auch weggelassen werden:

if(alter < 18)
   printf("Sie sind noch nicht volljährig\n");

Diese Schreibweise ist korrekt und wird auch häufig verwendet. Sie sollten sich jedoch klarmachen, dass sie sehr leicht zur Fehlerquelle werden kann – nämlich dann, wenn Sie eine weitere Anweisung hinzufügen wollen, die auch nur in dem Fall ausgeführt werden soll, wenn die if-Bedingung wahr ist, wie etwa im folgenden Beispiel:

if(alter < 18)
   printf("Sie sind noch nicht volljährig\n");
   printf("Sollte nur erscheinen, wenn (alter < 18)!\n");

Wenn – wie hier – dann die geschweiften Klammern vergessen werden, wird die zweite printf()-Anweisung immer ausgeführt, da die if-Bedingung im Wahr-Fall wirklich nur eine weitere Anweisung ausführt.

Korrekt müsste es folgendermaßen aussehen:

if(alter < 18) {
   printf("Sie sind noch nicht volljährig\n");
   printf("Sollte nur erscheinen, wenn (alter < 18)!\n");
}

Jetzt wird auch die zweite Anweisung nur ausgeführt, wenn die if-Bedingung wahr ist.

Die nächsten beiden if-Bedingungen verhalten sich analog. Hiermit wird getestet, ob die eingegebene Zahl für das Alter kleiner bzw. gleich 18 ist. Sollte sich einer dieser Fälle als wahr herausstellen, so wird ebenfalls der jeweils zugehörige Anweisungsblock ausgeführt.


Achtung

Ein häufig gemachter Fehler ist if(alter=18). Hier wurde der Variablen alter der Wert 18 zugewiesen, und der Anweisungsblock wird ausgeführt. Dabei ist es jedoch egal, ob der Wert gleich 18 ist, denn alter wird jetzt der Wert 18 zugewiesen. Diese if-Abfrage ist also immer wahr. Der Fehler ist zudem schwer auffindbar, da die Syntax absolut korrekt ist, der Compiler also keine Fehlermeldung anzeigt. Eine oft verwendete und empfohlene Maßnahme ist es, die Überprüfung umzustellen: if (18 == alter) ist syntaktisch korrekt und bewirkt das Gleiche. Hiermit würde der Compiler sofort eine Fehlermeldung anzeigen, falls Sie versehentlich if (18 = alter) schreiben, da sich einer Zahl keine Variable zuordnen lässt. Diese Umstellungsmethode funktioniert nur bei ==–Vergleichen, nicht bei den anderen Operatoren.




Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.






<< 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: Einstieg in C++






 Einstieg in C++


Zum Katalog: C++ von A bis Z






 C++ von A bis Z


Zum Katalog: C/C++






 C/C++


Zum Katalog: Shell-Programmierung






 Shell-Programmierung


Zum Katalog: Linux-UNIX-Programmierung






 Linux-UNIX-
 Programmierung


Zum Katalog: IT-Handbuch für Fachinformatiker






 IT-Handbuch für
 Fachinformatiker


Zum Katalog: Ubuntu GNU/Linux






 Ubuntu GNU/Linux


Zum Katalog: Coding for Fun







 Coding for Fun 


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo




Copyright © Galileo Press 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.


[Galileo Computing]

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