Überblick

Das Buch gliedert sich in zwei Teile. Der erste Teil behandelt die Grundlagen des Programmierens. Die weiteren Kapitel vertiefen die Themen des ersten Teils oder beschäftigen sich mit zusätzlichen Themen.

Falls Sie noch in keiner Sprache programmiert haben, 
dann sollten Sie sich mit dem 1. Teil solange aus-
   einandersetzen, bis sie die Übungsaufgaben lösen
	 und die Kontrollfragen beantworten können, 
sonst können Sie das 1. Kapitel als Leitfaden durch die
   wichtigsten Themen betrachten, um je nach Bedarf
	 zu den weiteren Kapiteln zu wechseln. 

Die Reihenfolge der Kapitel 2 bis 13 ist zwar sinnvoll, aber nicht unbedingt zwingend. Neben dem 1. Teil beschäftigen sich die Kapitel 5 (Modulkonzept) und 9 (Zeiger) mit fundamentalen Konzepten in C.

Teil 1

1

Programmieren lernen - Grundlagen

1
1.1
Zwei kleine C Programme 1

1.2

Grundbegriffe der Syntax, Kommentare

9

1.3
Datentypen und Ausdrücke

14

1.4
Algorithmen und Kontrollstrukturen
21
1.5
Vektoren und Zeichenketten
42
1.6
Adressen und Zeiger
51
1.7
Modularisierung, Funktionen
55
1.8
Ein-/Ausgabe
74

Teil 2

2
Datendarstellung in Rechnern, elementare Datentypen
85
3
Operatoren und Ausdrücke, mathematische Funktionen
119
4
Kontrollstrukturen, strukturierte Programmierung
137
5
Funktionen, Speicherklassen und Modulkonzept
169
6
Grundsätze für die Programmentwicklung
207
7
Der Preprozessor
221
8
Bit-Operatoren und Ausdrücke
231
9
Zeiger
239
10
Vektoren
253
11
Zeichenketten
279
12
Strukturen, dynamische Datenstrukturen, Unionen
293
13
Dateien (Files)
311

 

Inhaltsverzeichnis

1 Programmieren lernen - Grundlagen
1
1.1 Zwei kleine C-Programme
1
1.2 Grundbegriffe der Syntax, Kommentare
9
1.2.1 Zeichensatz und Wörter
9
1.2.2 Syntaxnotation
10
1.2.3 Schlüsselwörter
11
1.2.4 Kommentare
12
1.2.5 Fehlermeldungen des Compilers
13
1.3 Datentypen und Ausdrücke
14
1.3.1 Datentypen
14
1.3.2 Ausdrücke (expressions) und Operatoren (operators)
16
1.4 Algorithmen und Kontrollstrukturen
21
1.4.1 Algorithmen
21
1.4.2 Sequenz
21
1.4.3 Wiederholung
22
1.4.4 Auswahl
31
1.4.5 Beispiele
32
1.4.6 Zusammenfassung: Von der Aufgabe zum Programm
38
1.5 Vektoren und Zeichenketten
42
1.5.1 Vektoren
42
1.5.2 Zeichenketten
46
1.6 Adressen und Zeiger
51
1.7 Modularisierung, Funktionen
55
1.7.1 Allgemeines, Begriffe
55
1.7.2 Datenaustausch zwischen Funktionen
60
1.7.3 Funktionsprototypen
71
1.8 Ein-/Ausgabe
74
1.8.1 Allgemeines
74
1.8.2 Ein-/Ausgabe und Dateien
75
1.8.3 Funktionen der Standardbibliothek für die Ein-/Ausgabe
77
2 Datendarstellung in Rechnern, elementare Datentypen
85
2.1 Allgemeines zu Zahlensystemen und Codes
85
2.1.1 Zahlensysteme
85
2.1.2 Codes
88
2.2 Ganze Zahlen (integer)
89
2.2.1 Interne Darstellung (Codierung) ganzer Zahlen
89
2.2.2 Datentypen für ganze Zahlen in C
94
2.2.3 (f)printf und (f)scanf Umwandlungen für ganze Zahlen
96
2.3 Zeichen und Zeichensätze
97
2.3.1 Codierung von Zeichen
97
2.3.2 Der ANSI/ASCII-Code und der Datentyp char
98
2.3.3 Ein- und Ausgabe von Zeichen, (f)printf und (f)scanf-Umwandlungen
101
2.3.4 Breite Zeichen und Unicode
104
2.4 Reelle Zahlen
105
2.4.1 Festkommazahlen
105
2.4.2 Gleitkommadarstellung
106
2.4.3 C-Gleitkommatypen (floating types)
108
2.4.4 (f)printf und (f)scanf Umwandlungen für Gleitkommazahlen
109
2.5 Der sizeof-Operator
111
2.6 Typumwandlungen (casts)
112
2.7 Vereinbarungen
112
2.8 typedef und enum
115
2.8.1 typedef
115
2.8.2 Aufzählungen, enum
115
3 Operatoren und Ausdrücke, mathematische Funktionen
119
3.1 Arithmetische Operatoren
119
3.2 Die Zuweisungsoperatoren, L-Werte
120
3.3 Unäre Ausdrücke
124
3.4 Vergleichsoperatoren
125
3.5 Logische Operatoren und Ausdrücke
128
3.6 Der Komma-Operator
129
3.7 Implizite Typumwandlung
130
3.8 Rangordnung der Operatoren und Reihenfolge der Auswertung
131
3.9 Mathematische Funktionen
134
4 Kontrollstrukturen, strukturierte Programmierung
137
4.1 Steuer- oder Kontrollfluß, Flußdiagramme
137
4.2 Strukturierte Programmierung
138
4.3 Arten von Strukturblöcken
140
4.3.1 Elementarblock
140
4.3.2 Sequenz
141
4.3.3 Auswahl
142
4.3.4 Wiederholung, Iteration
150
4.4 C-Spezifisches
156
4.4.1 Die Leeranweisung (empty-statement)
156
4.4.2 Die goto-Anweisung
156
4.4.3 Die continue-Anweisung
157
4.5 Programmbeispiele
158
4.5.1 Kalender
158
4.5.2 Rechnen mit Zahlen in der Zweierkomplementdarstellung
162
5 Funktionen, Speicherklassen und Modulkonzept
169
5.1 Definition von Funktionen
169
5.2 Funktionsprototypen
172
5.3 Aufruf einer Funktion und Übergabemechanismus
172
5.4 Die Speicherklasse auto
175
5.5 Die Speicherklasse extern
177
5.6 Programme mit mehreren Quelltext- bzw. Objektdateien
179
5.7 Weitere spezielle Speicherklassen
181
5.7.1 Die Speicherklasse register
181
5.7.2 Die Speicherklasse static
182
5.7.3 Externe Variablen mit static-Attribut
183
5.7.4 Das static- und extern-Attribut bei Funktionen
183
5.8 Datenkapselung
184
5.9 Verwaltung größerer Programme, Definitionsdateien
189
5.10 Make-Utility
197
5.11 Rekursion
199
6 Grundsätze der Programmentwicklung
207
6.1 Phasenmodell
207
6.1.1 Planungsphase
207
6.1.2 Definitionsphase
208
6.1.3 Entwurfsphase
208
6.1.4 Codieren - Implementieren
213
6.1.5 Testen
214
6.1.6 Wartung und Pflege
215
6.2 Prinzipien der Softwareentwicklung
215
6.3 Qualität von Softwareprodukten
217
6.4 Dokumentation
218
7 Der Preprozessor
221
7.1 Die #include-Anweisung
221
7.2 Die #define-Anweisung (1)
222
7.3 Die #define-Anweisung (2), Makros
223
7.4 Bedingte Übersetzung (conditional compilation)
227
7.5 #line (Zeilennummern)
229
7.6 Textersatz in Zeichenketten, der Operator #
229
7.7 #error und #pragma
229
8 Bit-Operatoren und Ausdrücke
231
8.1 Bit- und Schiebe-Operatoren
231
8.2 Bitmuster und Bit-Masken
235
9 Zeiger
239
9.1 Einleitende Bemerkungen
239
9.2 Vereinbarung von Zeigervariablen und Zeigertypen
241
9.3 Inhalts- und Adreßoperator, Wertzuweisungen an Zeiger
241
9.4 Zeigerarithmetik
244
9.4.1 Summe und Differenz von Zeiger und int
244
9.4.2 Vergleichsoperationen mit Zeigern
246
9.4.3 Zeigersubtraktion
246
9.5 Speicherplatz anfordern und freigeben
249
10 Vektoren
253
10.1 Eindimensionale Vektoren
253
10.1.1 Vereinbarung und Zusammenhang mit Zeigerarithmetik
253
10.1.2 Vektoren als formale und aktuelle Parameter von Funktionen
254
10.1.3 Dynamische Erzeugung eines Vektors
256
10.2 Mehrdimensionale Vektoren
257
10.2.1 Definition und Indizierung
257
10.2.2 Anordnung der Elemente im Speicher
258
10.2.3 Mehrdimensionale Vektoren als Argument von Funktionen
261
10.3 Initialisierung von Vektoren
262
10.4 Algorithmen und Programmbeispiele
262
10.4.1 Quicksort
262
10.4.2 Lineare Regression
267
10.4.3 Gauß'scher Algorithmus
271
11 Zeichenketten
279
11.1 Allgemeines, Zeichenketten in C
279
11.2 Ein-/Ausgabe von Zeichenketten
282
11.3 Funktionen für Zeichenketten in der C-Bibliothek
284
11.4 Vektoren mit Zeigern auf Zeichenketten
284
11.5 Argumente der Funktion main
290
12 Strukturen, dynamische Datenstrukturen, Unionen
293
12.1 Strukturen
293
12.1.1 Typ-Deklarationen und Definition von Variablen
293
12.1.2 Zugriff auf Strukturen und die Felder einer Struktur
295
12.1.3 Strukturen und Funktionen
296
12.1.4 Initialisierung von Strukturen
300
12.2 Verkettete Listen, Bäume
300
12.3 Unionen
308
13 Dateien (Files)
311
13.1 Dateioperationen
311
13.2 Fehlererkennung und Behandlung
312
13.3 Binärdateien
313
13.4 Random Access
319
A Anhang A: Die Standard-Bibliothek
321
A.1 Diagnose <assert.h>
321
A.2 Test und Behandlung von Zeichen <ctype.h>
321
A.3 Fehlerbehandlung <errno.h>
322
A.4 Grenzwerte der Gleitkommadarstellung <float.h>
322
A.5 Wertebereich für Ganzzahltypen <limits.h>
323
A.6 Lokale Besonderheiten <locale.h>
323
A.7 Mathematische Funktionen <math.h>
323
A.8 Nichtlokale Sprünge <setjmp.h>
323
A.9 Signale <signal.h>
323
A.10 Variable Argumentlisten <stdarg.h>
324
A.11 Allgemein gültige Definitionen <stddef.h>
324
A.12 Ein-/Ausgabe <stdio.h>
325
A.13 Allgemeine Hilfsfunktionen <stdlib.h>
333
A.14 Funktionen für Zeichenketten <string.h>
337
A.15 Uhrzeit und Zeit <time.h>
339
A.16 Ausblick auf die C99 Bibliothek
340

Anhang B: Syntaxzusammenfassung

343

Literatur

350

Stichwortverzeichnis

351

ASCII-Code Tabelle

360

Tabelle der Operatoren, Rangordnung der Operatoren

361