ISO-SiMMlarcl als erste Programmiersprache Von Prof. Dr. Joachim Goll Uwe Grüner Prof. Herbert Wiese 2., durchgesehene Auflage B.G.Teubner Stuttgart Leipzig 1999
Inhaltsverzeichnis 1.1 Algorithmen und Probleme 2 1.2 Nassi-Shneiderman-Diagramme 6 1.3 Werkzeuge für die Programmierung 15 1.4 Zeichen 20 1.5 Variablen und Datentypen 24 1.6 Entwicklung der höheren Programmiersprachen 27 2 EINFÜHRUNG IN DIE PROGRAMMIERSPRACHE C 32 2.1 Ursprung von C 32 2.2 Standardisierung von C 32 2.3 Eigenschaften von C 33 2.4 Einordnung der Programmiersprache C 34 2.5 C und C++ 35 3 LEXIKALISCHE KONVENTIONEN 38 3.1 Zeichenvorrat von C 38 3.2 Lexikalische Einheiten 40 4 ERSTE BEISPIELPROGRAMME 56 4.1 Aufbau eines C-Programms 56 4.2 Das berühmte Programm hello, world" 58 4.3 Programm zur Zinsberechnung 62 4.4 Euklid'scher Algorithmus als Programm 64 5 DATENTYPEN UND VARIABLEN 68 5.1 Typkonzept 68 5.2 Einfache Datentypen 69 5.3 Variablen 78 5.4 Typ-Attribute 82 5.5 Typen in C 82 5.6 Klassifikation von Datentypen 83 6 EINFÜHRUNG IN ZEIGER UND ARRAYS 86 6.1 Zeigertypen und Zeigervariablen 86 6.2 Zeiger auf void 92 6.3 Eindimensionale Arrays 92 6.4 Einfache Sortierverfahren für eindimensionale Arrays 95
VI Inhaltsverzeichnis 7 ANWEISUNGEN, AUSDRÜCKE UND OPERATOREN... 104 7.1 Operatoren und Operanden 1Ö4 7.2 Ausdrücke und Anweisungen 106 7.3 Nebeneffekte 107 7.4 Auswertungsreihenfolge 108 7.5 L-Werteund R-Werte 111 7.6 Zusammenstellung der Operatoren 112 7.7 Implizite Typkonvertierung 136 7.8 Sequenzpunkte bei Nebeneffekten 143 8 KONTROLLSTRUKTUREN 146 8.1 Selektion 146 8.2 Iteration 151 8.3 Sprunganweisungen 155 9 BLÖCKE UND FUNKTIONEN 160 9.1 Blöcke 160 9.2 Sichtbarkeit und Lebensdauer 161 9.3 Definition und Aufruf von Funktionen 165 9.4 Deklaration von Funktionen 175 9.5 Gültigkeitsbereiche von Namen 178 9.6 Alte Funktionsdefinition und -deklaration nach Kernighan und Ritchie... 179 9.7 Die Ellipse... -ein Mittel für variable Parameteranzahlen 180 9.8 Rekursive Funktionen 182 10 FORTGESCHRITTENE ZEIGERTECHNIK 190 10.1 Zusammenhang zwischen Zeigern und Vektoren 190 10.2 Arrays 198 10.3 Übergabe von Arrays und Zeichenketten 204 10.4 Vergleich von char-arrays und Zeigern auf Zeichenketten 206 10.5 Das Schlüsselwort const bei Zeigern und Arrays 207 10.6 Kopieren von Zeichenketten 209 10.7 Standardfunktionen zur Stringverarbeitung und Speicherbearbeitung... 211 10.8 Vektoren von Zeigern und Zeiger auf Zeiger 221 10.9 Zeiger auf Funktionen 226 11 STRUKTUREN, UNIONEN UND BITFELDER 232 11.1 Strukturen 232 11.2 Unionen 239 11.3 Bitfelder- Komponenten von Strukturen und Unionen 242
Inhaltsverzeichnis VII 12 K EIGENE TYPNAMEN UND El VON NAMEN 248 12.1 Komplizierte Vereinbarungen 248 12.2 Komplizierte Typen 249 12.3 typedef zur Vereinbarung eigener Typnamen 250 12.4 Namensräume 252 12.5 Interne und externe Bindung 252 13 SPEICHERUNG VON DATEN IN DATEISYSTEMEN 254 13.1 Dateien aus Sätzen fester Länge 256 13.2 Dateien unter UNIX - das Streamkonzept 261 13.3 Dateien aus Sicht höherer Programmiersprachen 261 14 EIN- UND AUSGABE 264 14.1 Schichtenmodell für die Ein- und Ausgabe 264 14.2 Umlenkung der Standardeingabe und -ausgäbe 265 14.3 C-Bibliotheksfunktionen zur Ein- und Ausgabe 267 14.4 High-Level Funktionen für die Standardeingabe und -ausgäbe 268 14.5 High-Level Dateizugriffsfunktionen 290 14.6 Low-Level Dateizugriffsfunktionen 314 15 SPEICHERKLASSEN 324 15.1 Adreßraum eines Programms 324 15.2 Programme aus mehreren Dateien -Adressen 326 15.3 Programme aus mehreren Dateien - die Speicherklasse extern 327 15.4 Programme aus mehreren Dateien - die Speicherklasse static 331 15.5 Speicherklassen bei lokalen Variablen 332 15.6 Initialisierung 337 15.7 Tabellarischer Überblick über die Speicherklassen 337 15.8 Design und Programmiersprache 338 16 ÜBERGABEPARAMETER UND RÜCKGABEWERT EINES PROGRAMMS 346 16.1 Übergabe von Parametern beim Programmaufruf 346 16.2 Beendigung von Programmen 348 17 DYNAMISCHE SPEICHERZUWEISUNG, LISTEN UND BÄUME. 354 17.1 Reservierung von Speicher 356 17.2 Rückgabe von Speicher 357 17.3 Verkettete Listen 358 17.4 Baumstrukturen 366
VIII Inhaltsverzeichnis 18 INTERNE SUCHVERFAHREN... 384 18.1 Sequentielles Suchen 385 18.2 Halbierungssuchen 385 18.3 Suchen nach dem Hashverfahren 387 19 PRÄPROZESSOR 406 19.1 Aufgaben des Präprozessors 406 19.2 Einfügen von Dateien in den Source-Code 407 19.3 Symbolische Konstanten und Makros mit Parametern 408 19.4 Bedingte Kompilierung 412 19.5 Weitere Präprozessor-Direktiven 415 ANHANG A STANDARDBIBLIOTHEKSFUNKTIONEN 417 A.1 Fehlersuche (assert.h) 417 A.2 Klassifizierung und Konvertierung von Zeichen (ctype.h) 417 A.3 Länderspezifische Darstellungen und Zeichen (locale.h) 418 A.4 Mathematische Funktionen (math.h) 418 A.5 Globale Sprünge (setjmp.h) 419 A.6 Signalbehandlungen (signal.h) 419 A.7 Behandlung einer variablen Parameterliste (stdarg.h) 419 A.8 Ein- und Ausgabe (stdio.h) 419 A.9 Zahlenkonvertierung, Speicherverwaltung, Zufallszahlengenenerung und Beenden von Programmen (stdlib.h) 421 A.10 String- und Speicherbearbeitung (string.h) 422 A.11 Datum und Uhrzeit (time.h) 423 ANHANG B SORTIEREN MIT DEM QUICKSORT-VERFAHREN...424 ANHANG C SORTIERVERFAHREN IM VERGLEICH 428 LITERATURVERZEICHNIS 430 INDEX 431