Inhaltsverzeichnis

Alle Kapitel aufklappen
Alle Kapitel zuklappen
1 Eine erste Einführung
15
1.1 Welche Vorteile bietet C?
15
1.2 Was benötige ich zum Programmieren?
16
1.3 Wie ist dieses Buch aufgebaut?
16
1.4 Wie sollten Sie mit diesem Buch arbeiten?
17
2 Unser erstes Programm
19
2.1 Wie gebe ich das Programm ein?
19
2.2 Was bedeuten die einzelnen Zeilen?
20
2.3 Das Programm wird gespeichert
21
2.4 Wie starte ich das fertige Programm?
22
2.5 Eine weitere Möglichkeit zum Starten
24
2.6 Kommentare sind wichtig
26
2.7 Eine Übungsaufgabe
27
3 Verschiedene Arten von Daten
29
3.1 Daten bekannt machen und speichern
29
3.2 Wie gebe ich Daten auf dem Bildschirm aus?
31
3.3 Wie kann der Benutzer seine Daten per Tastatur eingeben?
32
3.4 Berechnungen mit Operatoren
34
3.5 Entwicklung eines Programms
36
3.6 Fehler suchen
37
3.7 Eine Übungsaufgabe
39
4 Verschiedene Fälle in einem Programm
41
4.1 Eine einfache Bedingung mit »if«
41
4.2 Welche Bedingungen gibt es?
42
4.3 Zwei Möglichkeiten, mit »if« und »else«
44
4.4 Wie kann ich Bedingungen kombinieren?
45
4.5 Eine Übungsaufgabe
47
5 Programmteile wiederholen
49
5.1 Regelmäßige Wiederholungen mit »for«
50
5.2 Bedingte Wiederholungen mit »do-while«
52
5.3 Besser vorher prüfen mit »while«?
54
5.4 Tabellen formatieren
57
5.5 Eine Übungsaufgabe zu Tabellen
58
5.6 Eine Übungsaufgabe zur Eingabekontrolle
59
6 Programme übersichtlich aufteilen
61
6.1 Wie definiere ich eine Funktion?
61
6.2 Wie rufe ich eine Funktion auf?
63
6.3 Werte an eine Funktion übergeben
64
6.4 Ein Ergebnis von einer Funktion zurückerhalten
66
6.5 Eine Übungsaufgabe
67
7 Große Datenmengen speichern
69
7.1 Felder erzeugen und mit Daten füllen
69
7.2 Wie gebe ich die Daten aus?
71
7.3 Wie kann der Benutzer ein Feld füllen?
72
7.4 Eine Übungsaufgabe
74
8 Zeichen und Texte speichern
75
8.1 Zeichenketten erzeugen und füllen
75
8.2 Wie gebe ich eine Zeichenkette aus?
77
8.3 Wie kann der Benutzer eine Zeichenkette füllen?
78
8.4 Mehrere Zeichenketten
79
8.5 Wie kann ich Zeichenketten formatieren?
80
8.6 Eine Übungsaufgabe
81
9 Indirekter Zugriff mit Zeigern
83
9.1 Wie arbeite ich mit Zeigern und Adressen?
83
9.2 Wie nutze ich Zeiger bei Funktionen?
84
9.3 Wir zeigen auf Felder
86
9.4 Eine Übungsaufgabe
88
10 Unterschiedliche Daten zusammenfassen
89
10.1 Strukturen definieren
89
10.2 Wie erzeuge ich Strukturdaten?
90
10.3 Wie gebe ich die Daten aus?
91
10.4 Wie kann der Benutzer Strukturen füllen?
92
10.5 Mehrere Strukturdaten
94
10.6 Wie übergebe ich Strukturdaten?
96
10.7 Eine Übungsaufgabe
99
11 Daten auf der Festplatte
101
11.1 Wie speichere ich Daten auf der Festplatte?
101
11.2 Wie lese ich Daten von der Festplatte?
104
11.3 Eine Übungsaufgabe
106
12 Eine Vertiefung der bisherigen Themen
107
12.1 Verschiedene Arten von Daten
107
12.1.1 Mehrere Daten auf einmal einlesen
107
12.1.2 Datentypen für ganze Zahlen
109
12.1.3 Datentypen für Zahlen mit Nachkommastellen
111
12.1.4 Umwandlungen zwischen Datentypen
113
12.1.5 Konstanten sind unveränderlich
114
12.1.6 Zufällige Zahlen
116
12.1.7 Kombinierte Zuweisungen
118
12.1.8 Daten tauschen
120
12.1.9 Alle Operatoren
121
12.2 Verschiedene Fälle in einem Programm
124
12.2.1 Wahrheitswerte
124
12.2.2 Bedingte Zuweisung
126
12.2.3 Mehr als zwei Fälle
126
12.2.4 Fälle zusammenfassen
128
12.2.5 Nebenwirkungen bei logischen Verknüpfungen
129
12.3 Programmteile wiederholen
131
12.3.1 Varianten der »for«-Schleife
131
12.3.2 Schleifen vorzeitig abbrechen oder später fortsetzen
134
12.3.3 Eine Schleife in einer Schleife
136
12.3.4 Eine mehrfache Schleife abbrechen
137
12.4 Programme übersichtlich aufteilen
139
12.4.1 Funktionen deklarieren
139
12.4.2 Lokale und globale Variablen
140
12.4.3 Statische Variable
143
12.4.4 Rekursive Funktionen
144
12.4.5 Zeiger auf Funktionen
145
12.4.6 Beliebige Anzahl von Parametern
147
12.5 Große Datenmengen speichern
148
12.5.1 Operationen mit Feldern
148
12.5.2 Mehrdimensionale Felder
154
12.5.3 Felder sortieren
157
12.5.4 Elemente in einem Feld suchen
161
12.6 Zeichen und Texte speichern
165
12.6.1 Einzelne Zeichen
165
12.6.2 Code eines Zeichens
166
12.6.3 Funktionen für Zeichenketten
168
12.6.4 Zeichenketten vergleichen
169
12.6.5 Zeichenketten zerlegen
171
12.6.6 Sicheres Einlesen von Wörtern
172
12.6.7 Sicheres Einlesen von Zeichenketten
174
12.6.8 Zeichenketten und Zahlen umwandeln
176
12.6.9 Sicheres Einlesen von Zahlen
178
12.6.10 Operationen mit Zeichenketten
180
12.7 Indirekter Zugriff mit Zeigern
188
12.7.1 Rechnen mit Zeigern und Adressen
188
12.8 Unterschiedliche Daten zusammenfassen
191
12.8.1 Vereinfachung durch »typedef«
191
12.8.2 Strukturen in Strukturen
192
12.8.3 Enumerationen
194
12.9 Daten auf der Festplatte
195
12.9.1 Programm mit Ein- und Ausgabe
195
12.9.2 Umlenkung der Ein- und Ausgabe
197
12.9.3 CSV-Dateien schreiben
199
12.9.4 CSV-Dateien lesen
201
12.9.5 Datensätze mit fester Länge schreiben
203
12.9.6 Datensätze mit fester Länge lesen
205
12.9.7 Datensätze mit fester Länge schreiben und lesen
207
13 Daten dynamisch im Speicher verwalten
213
13.1 Warum benötige ich dynamische Felder?
213
13.2 Eine Datenreihe dynamisch speichern
214
13.3 Größe eines dynamischen Felds ändern
216
13.4 Eine Tabelle dynamisch speichern
218
13.5 Wie übergebe ich ein dynamisches Feld an eine Funktion?
220
14 Arbeiten mit Zahlen
225
14.1 Winkelfunktionen
225
14.2 Runden, Nachkommastellen, Modulo
227
14.3 Weitere mathematische Funktionen
229
14.4 Komplexe Zahlen darstellen
230
14.5 Rechnen mit komplexen Zahlen
232
14.6 Weitere Funktionen für komplexe Zahlen
234
14.7 Bit-Operatoren
235
14.8 Umwandlung von Dualzahlen
238
14.9 Bitfelder
241
15 Präprozessor-Anweisungen
245
15.1 Einbinden von Dateien
245
15.2 Definitionen und Makros
246
15.3 Definitionen und Verzweigungen
248
15.4 Eine Systemweiche
250
16 Zugriff auf Dateien und Verzeichnisse
253
16.1 Attribute von Dateien und Verzeichnissen
253
16.2 Zugriffsrechte ändern
256
16.3 Inhalt eines Verzeichnisses
259
16.4 Inhalt eines Verzeichnisbaums
261
16.5 Dateien ändern
263
16.6 Verzeichnisse ändern
264
17 Umgang mit Datum und Uhrzeit
267
17.1 Weltzeit ausgeben
267
17.2 Lokale Zeit ausgeben und formatieren
268
17.3 Zeitangaben erzeugen
271
17.4 Zeitspanne messen
272
17.5 Zeit abwarten
274
17.6 Alter berechnen
275
18 Kommunikation mit dem Betriebssystem
277
18.1 Wie übergebe ich Daten an ein Programm?
277
18.2 Wie nutze ich die Rückgabe eines Programms?
279
18.3 Systemkommandos ausführen
282
19 Datenbanken
283
19.1 Aufbau einer Datenbank
283
19.2 Datenbanken mit SQLite
284
19.3 Datenbank und Tabelle erzeugen
285
19.4 Datensätze einfügen
287
19.5 Anzeigen der Datensätze
289
19.6 Auswahl von Datensätzen und Feldern
291
19.7 Auswahl mit Platzhaltern
294
19.8 Auswahl nach Eingabe
296
19.9 Sortieren der Ausgabe
298
19.10 Ändern von Datensätzen
300
19.11 Löschen von Datensätzen
301
20 Beispielprojekte
305
20.1 Lernspiel: Hauptstädte der EU
305
20.2 Lernspiel: Kopfrechnen
311
20.2.1 Das Basisprogramm
311
20.2.2 Version mit Zeitmessung
315
20.2.3 Version mit Highscore-Datei
316
20.3 Ausgabe von Morsezeichen
319
20.3.1 Textdatei als Datenquelle
320
20.3.2 Morse-Code auf dem Bildschirm
321
20.3.3 Morse-Code per Lautsprecher
322
20.4 Spiel Mastermind
326
21 Grafische Benutzeroberflächen mit GTK+
331
21.1 Datentypen der »Glib«
331
21.2 Zeichenketten mit »GString«
333
21.3 Felder mit GArray
335
21.3.1 Aufbau des Programms
335
21.3.2 Rahmen des Programms
335
21.3.3 Hilfsfunktion zum Einlesen
337
21.3.4 Ausgabe aller Elemente
338
21.3.5 Einfügen am Anfang und am Ende
338
21.3.6 Einfügen an beliebiger Position
339
21.3.7 Löschen eines Elements
340
21.4 Die erste Benutzeroberfläche
341
21.5 Eigenschaften setzen und abrufen
343
21.6 Ereignisfunktionen
345
21.7 Positionierung von Widgets
347
21.8 Auswahl- und Eingabe-Widgets
348
A Änderungen der Programmierung mit C
357
A.1 C-Standards
357
A.2 C99, neue Datentypen
357
A.3 C99, erweiterte Deklarationen
359
A.4 C99, boolesche Variable
360
A.5 C11, Überladen von Funktionen
361
B Installationen
363
B.1 Installationen unter Windows
363
B.1.1 Code::Blocks installieren
364
B.1.2 Code::Blocks nutzen
364
B.1.3 Orwell Dev-C++
365
B.1.4 Eclipse CDT installieren
366
B.1.5 Eclipse CDT nutzen
367
B.1.6 NetBeans installieren
368
B.1.7 NetBeans nutzen
368
B.1.8 MinGW
369
B.1.9 MinGW in den Pfad eintragen
370
B.1.10 Binden eines Programms
371
B.1.11 SQLite
373
B.1.12 GTK+
374
B.2 Installationen unter Ubuntu Linux
374
B.2.1 Arbeiten im Terminal
375
B.2.2 Code::Blocks
375
B.2.3 Eclipse
375
B.2.4 NetBeans
376
B.2.5 SQLite
377
B.2.6 GTK+
377
B.3 Installationen unter macOS
378
B.3.1 XCode
378
B.3.2 Arbeiten im Terminal
380
B.3.3 Code::Blocks
380
B.3.4 Eclipse CDT
380
B.3.5 NetBeans
381
B.3.6 SQLite
381
B.3.7 GTK+
382
C Hilfestellungen und Übersichten
383
C.1 Windows – einige Tastenkombinationen
383
C.2 Unix-Befehle
384
C.2.1 Inhalt eines Verzeichnisses
384
C.2.2 Verzeichnis anlegen, wechseln und löschen
385
C.2.3 Datei kopieren, verschieben und löschen
386
C.3 Schlüsselwörter der Sprache C
387
C.4 Liste der Funktionen
387
C.4.1 Headerdatei »complex.h«
387
C.4.2 Headerdatei »dirent.h«
388
C.4.3 Headerdatei »gtk/gtk.h«
388
C.4.4 Headerdatei »math.h«
389
C.4.5 Headerdatei »sqlite3.h«
390
C.4.6 Headerdatei »stdarg.h«
391
C.4.7 Headerdatei »stdio.h«
391
C.4.8 Headerdatei »stdlib.h«
392
C.4.9 Headerdatei »string.h«
392
C.4.10 Headerdatei »sys/stat.h« beziehungsweise »unistd.h«
393
C.4.11 Headerdateien »time.h« und »sys/time.h«
393
C.4.12 Headerdatei »unistd.h«
394
C.4.13 Headerdatei »windows.h«
394
D Lösungen der Übungsaufgaben
395
D.1 Datei »u_name.c« (Abschnitt 2.7)
395
D.2 Datei »u_daten.c« (Abschnitt 3.7)
395
D.3 Datei »u_fall.c« (Abschnitt 4.5)
396
D.4 Datei »u_schleife_for.c« (Abschnitt 5.5)
397
D.5 Datei »u_schleife_do.c« (Abschnitt 5.6)
398
D.6 Datei »u_funktion.c« (Abschnitt 6.5)
399
D.7 Datei »u_feld.c« (Abschnitt 7.4)
400
D.8 Datei »u_text.c« (Abschnitt 8.6)
401
D.9 Datei »u_zeiger.c« (Abschnitt 9.4)
402
D.10 Datei »u_struktur.c« (Abschnitt 10.7)
404
D.11 Datei »u_datei.c« (Abschnitt 11.3)
405
D.12 Datei »u_fall_mehrere.c« (Abschnitt 12.2.3)
406
Index
409