Informatik für Ingenieure Grundlagen und Programmierung in С von Prof. Dr. Axel Böttcher und Prof. Dr. Franz Kneißl Fachhochschule Regensburg Oldenbourg Verlag München Wien
Inhalt Vorwort 5 1 Grundbegriffe der Computertechnik 15 1.1 Einführung 15 1.2 Anwendungsprogramme 17 1.3 Betriebssysteme 19 1.4 Hardware 21 1.5 Prozessoren, Busse und Speicher 22 1.5.1 Das Bussystem 22 1.5.2 Der Prozessor 25 1.5.3 Der Speicher 25 1.5.4 Peripheriegeräte 27 1.6 Die Befehlsebene 28 1.7 Die Logikebene 33 2 Zahlendarstellung 37 2.1 Zahlensysteme für ganze Zahlen 37 2.2 Rechnen mit Potenzen 38 2.3 Umwandlung zwischen Zahlensystemen 39 2.3.1 Zielverfahren: Multiplikationsmethode 40 2.3.2 Quellverfahren: Divisionsmethode 40 2.4 Rechnen im Dualsystem 41 2.5 Rechnerinterne Darstellung von ganzen Zahlen 43 2.5.1 Das Eins-Komplement 44 2.5.2 Das Zwei-Komplement 46
8 Inhalt 2.6 Darstellung und Umwandlung gebrochener Zahlen 48 2.6.1 Zielverfahren: Divisionsmethode 49 2.6.2 Quellverfahren: Multiplikationsmethode 50 2.7 Rechnerinterne Darstellung gebrochener Zahlen 50 2.8 Fragen 51 2.9 Aufgaben 51 3 Zeichencodes 53 3.1 7 Bit ASCII 54 3.2 8 BitlSO 8859 56 3.3 16 Bit Unicode 57 3.4 Fragen 59 4 Einführung in das Programmieren in С 61 4.1 Syntaxdiagramme 65 4.2 Praxis des Programmierern 67 4.3 Aufgaben 69 5 Grundelemente, Variablen, Konstanten, Datentypen 71 5.1 Übersicht 71 5.2 Programmstruktur 72 5.3 Lexikalische Grundvoraussetzungen 73 5.3.1 Zeichensätze 73 5.3.2 Formatfreie Schreibweise 75 5.3.3 Bezeichner 76 5.3.4 Einschränkungen 77 5.4 Variablen und Konstanten 77 5.4.1 Variablen und Konstanten zur Compilezeit, Deklaration 77 5.4.2 Variablen und Konstanten zur Ladezeit 79 5.4.3 Variablen und Konstanten zur Laufzeit 79 5.4.4 Verschiedene Konstanten-Begriffe 80
Inhalt 9 5.5 Elementare Datentypen 81 5.5.1 Ganzzahlige Datentypen 82 5.5.2 Gleitpunkttypen 86 5.5.3 Beispielprogramm 88 5.5.4 Benutzerdefinierte Typen 90 5.6 Fragen 93 5.7 Aufgaben 94 6 Formatierte Ein- und Ausgabe 95 6.1 Formatierte Ausgabe 95 6.1.1 Die Formatelemente für formatierte Ausgabe 96 6.1.2 Beispiele 98 6.1.3 Fehlerquellen 99 6.2 Formatierte Eingabe 99 6.2.1 Beispiel zur formatierten Eingabe: 101 6.2.2 Besonderheiten und Fehlerquellen: 101 6.3 Aufgaben 102 7 Operatoren und Ausdrücke 103 7.1 Arithmetische Ausdrücke 106 7.2 Der Zuweisungsoperator 107 7.3 Zusammengesetzte Operatoren 108 7.4 Unitäre arithmetische Operatoren 108 7.5 Der Kommaoperator 109 7.6 Wahrheitswerte und logische Ausdrücke 109 7.7 Der konditionale Operator 111 7.8 Aufgaben 112 8 Logische und bitweise Operatoren 115 8.1 Logische Verknüpfungen 115 8.2 Bitweise Operatoren 116 8.3 Fragen 121 8.4 Aufgaben 121
10 Inhalt 9 Standardbibliothek 123 9.1 Ein/Ausgabe 124 9.2 Datei-Ein/Ausgabe 124 9.3 Grenzwerte 126 9.4 Mathematik 127 9.5 Zufallszahlen 128 9.6 Zeichenbehandlung 129 9.7 Zeichenketten 130 9.8 Konvertierung Intern-/Extern-Darstellung 130 9.9 Speicherverwaltung 131 9.10 Starten/Beenden 132 9.11 Nicht-Standardfunktionen 132 9.12 Aufgaben 133 10 Kontrollstrukturen 135 10.1 Bedingte Verzweigung 136 10.2 Auswahl (Fallunterscheidung) 139 10.3 Laufschleifen (Wiederholungsanweisungen) 140 10.3.1 Die while-anweisung 141 10.3.2 Die do-while-anweisung 143 10.3.3 Anwendung: Bestimmung von Nullstellen einer Funktion 144 10.3.4 Die for-anweisung 146 10.4 Sprunganweisungen 148 10.4.1 Die continue- und break-anweisungen 148 10.4.2 Die go to-anweisung 149 10.4.3 Die return-anweisung 149 10.5 Aufgaben 150 11 Präprozessor 151 11.1 Die ftinclude-direktive 151 11.2 Symbolische Konstanten 152 11.3 Vordefinierte Symbole 153
Inhalt 11 11.4 Makros 154 11.5 Bedingte Compilierung 156 11.6 Beispielprogramm: Testversion Newton-Raphson 158 12 Algorithmen: Reaktive Programme, Automaten 161 12.1 Endliche Automaten 163 12.2 Direkte Implementierung von Automaten..., 165 12.3 Beispielprogramm: Verkaufsautomat 166 12.4 Erkennende Automaten 168 12.5 Aktionen in Automaten-Programmen 170 12.6 Fragen 171 12.7 Aufgaben 172 12.7.1 DFÜ-Protokolle 172 12.7.2 Filter für Escape-Sequenzen in HTML Dateien 174 13 Vektoren 179 13.1 Abgeleitete Typen in C, Übersicht 179 13.2 Eindimensionale Vektoren 180 13.2.1 Deklarationssyntax 180 13.2.2 Zugriff auf Ganz- und Komponenten-Variable 181 13.3 Zur Deklarations-Syntax in С 183 13.4 Mehrdimensionale Vektoren 184 13.5 Fragen 187 13.6 Aufgaben 188 14 Algorithmen: Sortierverfahren, Zufallszahlen 191 14.1 Sortieren 191 14.1.1 Bubblesort 192 14.1.2 Sortieren durch Auswahl 192 14.1.3 Bucket Sort 193 14.2 Zufallszahlen 194 14.2.1 Ein Simulator 195 14.2.2 Zufallszahlen mit bestimmten Eigenschaften 197
12 Inhalt 14.3 Fragen 200 14.4 Aufgaben 201 15 Algorithmen: Lineare Gleichungssysteme 205 15.1 Die Gauß-Elimination 205 15.2 Algorithmus 207 15.3 Programm 207 15.4 Aufgaben 208 16 Pointer 209 16.1 Übersicht 209 16.2 Programmierung mit Pointern 209 16.2.1 Funktionsprinzip 209 16.2.2 Syntax 211 16.2.3 Zugriff auf Pointer oder Bezugsvariable 211 16.2.4 Pointer ohne Bezugsvariable, Nullpointer, void* 213 16.3 Pointerund Vektoren 214 16.3.1 Vektoren und Pointer-Arithmetik 214 16.3.2 Vektorzugriff in Pointerschreibweise 215 16.3.3 Vektoren von Pointern, Pointer auf Vektoren 216 16.4 Dynamische Variable mitmalloc und free 219 16.5 Auswahl-Sort durch Zeigervertauschung 222 16.6 Pointerund const 223 16.7 Fragen 224 16.8 Aufgaben 226 17 Unterprogramme 227 17.1 Syntax 228 17.2 Der Parametermechanismus 231 17.3 Referenzparameter 234 17.4 Lokale, globale und statische Variablen 237 17.5 Funktionsdeklarationen, Modularisierung und Headerdateien 241
Inhalt 13 17.6 Fragen 244 17.7 Aufgaben 245 18 Algorithmen: Grafikausgabe 247 18.1 Programmpaket für Grafikausgaben 247 18.2 Kurven zeichnen 250 18.3 Programmiertechniken: Funktion als Argument 251 18.4 Aufgabe - 252 18.5 Koordinatentransformationen 253 18.6 Aufgabe j 255 18.7 Professionelle Programmiertechniken am Beispiel Koordinatentransformation 255 18.7.1 Namensgebung und Bezeichner 256 18.7.2 Programmstruktur 258 18.7.3 Beispielprogramm: Koordinatentransformation 258 18.8 Aufgaben 260 19 Dateien 261 19.1 Der Datentyp FILE 262 19.2 Formatierte Ein-/Ausgabe 263 19.2.1 Formatierte Ausgabe mit fprintf () 263 19.2.2 Formatierte Eingabe mit fscanf () 264 19.2.3 Weitere Funktionen für das formatierte Einlesen von Datei: 265 19.3 Standarddateien 265 19.4 Binäre Ein-/Ausgabe 266 19.5 Aufgaben 268 20 Structs und komplexe Datenstrukturen 269 20.1 Strukturen mit struct 269 20.2 Zeiger auf Strukturen 272 20.3 Anwendungsbeispiel: Komplexe Zahlen 272 20.4 Listen 273 20.5 Exkurs: Rekursive Funktionen 277
20.6 Aufgaben 278 21 Algorithmen: Graphentheorie 279 21.1 Problemstellung 279 21.2 Darstellung von Graphen durch Matrizen 282 21.3 Der Algorithmus von Dijkstra 284 21.4 Fragen 289 21.5 Aufgaben 289 22 Algorithmen: Interpretative Implementierung von Automaten 291 22.1 Programmiertechniken: Pointerauf Funktionen 291 22.2 Schema zur Umsetzung in Programme 292 22.3 Beispielprogramm 295 22.4 Fragen 296 22.5 Aufgaben 297 22.5.1 Erzeugung eines Paritätsbits 297 22.5.2 Escape-Sequenz-Filter interpretativ 297 23 Fortgeschrittene Themen 299 23.1 Typumwandlungen 299 23.1.1 Anlässe von Typumwandlungen 299 23.1.2 Art der Typumwandlungen 301 23.2 Union-Typen 304 23.3 Argumente und Rückgabewert von main (...) 307 24 Literatur 311 25 Index 313