Inhaltsverzeichnis
    t3kitt3kitt3kit
    • Home
    • TeachingOpen
      • Lectures
      • Bachelor Theses
      • Master Theses
      • Dissertations
    • ResearchOpen
      • Activities
      • Computing Infrastructure
      • Characterization Lab
      • Annual Reviews
      • Active Public Projects
      • Completed Public Projects
      • Conferences
    • PublicationsOpen
      • Books and Book Editorships
      • Papers in Journals
      • Contributions to Books
      • Conference Presentations
      • Scientific Reports
      • Patents
      • Habilitation Theses
      • PhD Theses
      • Master's Theses
    • SoftwareOpen
      • Software
      • Download
      • License Agreement
    • StaffOpen
      • Active Staff
      • Former Staff
    • About UsOpen
      • Contact Us
      • Join Us
      • Partners
      • Imprint
      • Corporate Design
      • Sitemap
    • News

    Inhaltsverzeichnis

    • Vorwort
     
    • Inhalt
     
    • 1 Einführung
    1
      • 1.1 Was heißt Programmieren?
    1
      • 1.2 Algorithmen und Spezifikationen
    2
        • 1.2.1 Problemlösen durch Algorithmen
    2
        • 1.2.2 Spezifikationen
    3
        • 1.2.3 Algorithmen
    6
        • 1.2.4 Verifikation von Algorithmen
    6
    • 2 Grafische Darstellungsmittel
    9
      • 2.1 Struktogramme
    9
      • 2.2 Datenflussdiagramme
    11
      • 2.3 Programmablaufpläne
    15
    • 3 Die Entwicklungsumgebung
    19
      • 3.1 Projekte
    19
      • 3.2 Erstellen eines Projekts
    20
      • 3.3 Compiler oder Interpreter?
    21
      • 3.4 Übersetzen von Programmen
    22
      • 3.5 Compiler-Optionen
    24
      • 3.6 Beheben von Fehlern
    25
      • 3.7 Der Präprozessor
    25
        • 3.7.1 Die #include – Anweisung
    26
        • 3.7.2 Die #define – Anweisung
    27
        • 3.7.3 Makros
    27
        • 3.7.4 Vordefinierte Präprozessorkonstanten
    29
        • 3.7.5 Die #if – Anweisung
    30
        • 3.7.6 Die Anweisungen #ifdef und #ifndef
    31
    • 4 Erste Schritte
    33
      • 4.1 Grundlegendes
    33
      • 4.2 Was ist C?
    33
      • 4.3 Geschichte von C
    34
      • 4.4 Warum C?
    35
      • 4.5 Programmtextdateien
    35
        • 4.5.1 Der Programmtext
    35
        • 4.5.2 Die Header-Dateien
    35
      • 4.6 Kommentare
    36
      • 4.7 Die Funktion main
    37
      • 4.8 Hallo Welt
    38
      • 4.9 Beispiele
    39
        • 4.9.1 Reklameschrift
    39
        • 4.9.2 Leerzeilen
    39
        • 4.9.3 Quelltext temporär ausschneiden
    40
    • 5 Variablen, Konstanten
    41
      • 5.1 Eigenschaften von Variablen und Konstanten
    41
      • 5.2 Variablen
    41
        • 5.2.1 Definition von Variablen
    42
        • 5.2.2 Namen von Variablen
    42
        • 5.2.3 Initialisierung von Variablen
    43
      • 5.3 Konstanten
    44
      • 5.4 Arbeiten mit Variablen und Konstanten
    44
      • 5.5 Beispiele
    45
        • 5.5.1 Berechnung der Fläche und des Umfanges eines Rechtecks
    45
        • 5.5.2 Versuch einer zirkularen Zuweisung
    45
        • 5.5.3 Dreieckstausch
    45
    • 6 Numerische Datentypen
    47
      • 6.1 Ganze Zahlen
    47
        • 6.1.1 Qualifizierer
    47
        • 6.1.2 Literale
    48
        • 6.1.3 Zahlensysteme
    48
          • 6.1.3.1 Zweierkomplement
    49
          • 6.1.3.2 Zahlensysteme in C
    51
          • 6.1.3.3 Umwandlung von Binär-, Oktal- und Hexadezimalzahlen
    52
          • 6.1.3.4 Umwandlung einer Binärzahl ins Dezimalsystem
    52
          • 6.1.3.5 Umwandlung einer Dezimalzahl ins Binärsystem
    53
        • 6.1.4 Operatoren
    53
      • 6.2 Punktzahlen
    54
        • 6.2.1 Gleitpunkt-Zahlensysteme in C
    56
        • 6.2.2 Literale
    56
        • 6.2.3 Operatoren
    57
        • 6.2.4 Mathematische Funktionen
    57
      • 6.3 Zeichen
    58
        • 6.3.1 Literale
    59
        • 6.3.2 Der ASCII-Code
    59
        • 6.3.3 Operatoren
    61
        • 6.3.4 Funktionen für Zeichen
    61
      • 6.4 Wahrheitswerte
    62
      • 6.5 void
    62
      • 6.6 Typumwandlung
    62
      • 6.7 sizeof
    64
      • 6.8 Beispiele
    64
        • 6.8.1 Umfang und Fläche eines Kreises
    64
        • 6.8.2 Lösen quadratischer Gleichungen
    65
    • 7 Eingabe – Ausgabe
    67
      • 7.1 Ausgabefunktionen
    67
        • 7.1.1 Ausgabe einer ganzen Zahl
    68
        • 7.1.2 Ausgabe einer Gleitpunkt-Zahl
    69
        • 7.1.3 Ausgabe von Adressen
    70
        • 7.1.4 Ausgabe eines Zeichens
    70
        • 7.1.5 Ausgabe einer Zeichenkette
    71
        • 7.1.6 Weitere Formatierungsmöglichkeiten
    71
        • 7.1.7 Probleme mit printf
    72
        • 7.1.8 Die Platzhalter von printf
    72
      • 7.2 Eingabefunktionen
    72
        • 7.2.1 Eingabe einer ganzen Zahl
    73
        • 7.2.2 Eingabe einer Gleitpunkt-Zahl
    73
        • 7.2.3 Eingabe eines Zeichens
    73
        • 7.2.4 Eingabe einer Zeichenkette
    74
        • 7.2.5 Probleme mit scanf
    74
        • 7.2.6 Die Platzhalter von scanf
    75
      • 7.3 Ein- und Ausgabe von Zeichen
    76
      • 7.4 Beispiele
    76
        • 7.4.1 Umfang und Fläche eines Kreises
    76
        • 7.4.2 Fehlersuche
    76
    • 8 Ausdrücke
    77
      • 8.1 Allgemeines
    77
      • 8.2 Reihenfolge der Auswertung
    78
        • 8.2.1 Prioritäten
    78
        • 8.2.2 Assoziativitäten
    80
      • 8.3 Operatoren
    81
        • 8.3.1 Arithmetische Operatoren
    81
        • 8.3.2 Die Zuweisung
    82
          • 8.3.2.1 Inkrement und Dekrement
    83
          • 8.3.2.2 Abkürzungen
    87
        • 8.3.3 Logische Operatoren
    87
          • 8.3.3.1 Vergleichsoperatoren
    88
          • 8.3.3.2 Der Operator &&
    90
          • 8.3.3.3 Der Operator ||
    92
          • 8.3.3.4 Der Operator !
    93
        • 8.3.4 Der Operator ,
    94
        • 8.3.5 Der Operator ? :
    95
      • 8.4 Abstände
    95
      • 8.5 Beispiele
    96
        • 8.5.1 Teilbarkeit einer Zahl
    96
        • 8.5.2 Übungen zu logischen Ausdrücken
    96
        • 8.5.3 Berechnung der Signum-Funktion
    97
        • 8.5.4 Berechnung des Schaltjahres
    97
    • 9 Selektionen
    99
      • 9.1 Die if – Anweisung
    99
      • 9.2 Die switch – Anweisung
    103
      • 9.3 Beispiele
    104
        • 9.3.1 Lösen quadratischer Gleichungen
    104
        • 9.3.2 Berechnung der Einkommensteuer
    105
        • 9.3.3 Ein Menü
    107
        • 9.3.4 Osterregel nach Gauß
    107
    • 10 Iterationen
    109
      • 10.1 Die for - Anweisung
    109
      • 10.2 Die while - Anweisung
    111
      • 10.3 Die do - while - Anweisung
    112
      • 10.4 Besonderheiten der for - Anweisung
    113
        • 10.4.1 Weglassen von Ausdrücken
    113
        • 10.4.2 Mehrere Zähler
    115
      • 10.5 Die break - Anweisung
    115
      • 10.6 Die continue - Anweisung
    116
      • 10.7 Schachteln von Schleifen
    117
      • 10.8 Beispiele
    118
        • 10.8.1 Ein Kalender
    118
        • 10.8.2 Der Euklidische Algorithmus
    121
        • 10.8.3 Die ASCII-Tabelle
    122
        • 10.8.4 Gerade und ungerade Zahlen
    123
        • 10.8.5 Der Weihnachtsbaum
    123
        • 10.8.6 Ein Menü
    127
        • 10.8.7 Ein Zahlenratespiel
    128
    • 11 Funktionen
    131
      • 11.1 Definition einer Funktion
    131
        • 11.1.1 Namen von Funktionen
    131
        • 11.1.2 Parameter
    132
        • 11.1.3 Rückgabewerte
    133
        • 11.1.4 Der Rückgabewert der Funktion main
    134
        • 11.1.5 Ablauf eines Funktionsaufrufes
    135
      • 11.2 Deklaration einer Funktion
    137
        • 11.2.1 Externe Funktionen
    140
        • 11.2.2 Statische Funktionen
    140
      • 11.3 Beispiele
    140
        • 11.3.1 Leeren des Eingabepuffers
    140
        • 11.3.2 Kalender für ein Jahr
    141
        • 11.3.3 Einfacher Taschenrechner
    148
    • 12 Speicherklassen
    151
      • 12.1 Lokale Variablen
    151
        • 12.1.1 Die Blockstruktur von C
    151
        • 12.1.2 Variablen der Speicherklasse auto
    153
        • 12.1.3 Variablen der Speicherklasse register
    153
        • 12.1.4 Variablen der Speicherklasse static
    154
      • 12.2 Globale Variablen
    154
        • 12.2.1 Variablen der Speicherklasse extern
    155
        • 12.2.2 Variablen der Speicherklasse static
    156
      • 12.3 Übersicht über alle Speicherklassen in C
    156
    • 13 Felder
    159
      • 13.1 Eindimensionale Felder
    159
      • 13.2 Mehrdimensionale Felder
    161
      • 13.3 Initialisierung von Feldern
    163
      • 13.4 Konstante Felder
    165
      • 13.5 Felder als Parameter
    165
      • 13.6 Einfache Sortierverfahren
    166
        • 13.6.1 Minimum-Suche
    166
        • 13.6.2 Bubble Sort
    168
      • 13.7 Einfache Suchverfahren
    169
        • 13.7.1 Sequenzielles Suchen
    169
        • 13.7.2 Binäres Suchen
    170
      • 13.8 Beispiele
    171
        • 13.8.1 Multiplikation von Matrizen
    171
        • 13.8.2 Berechnung der Einkommensteuer – verbesserte Variante
    173
        • 13.8.3 Kopieren von Feldern
    174
    • 14 Zeiger
    175
      • 14.1 Allgemeines
    175
      • 14.2 Zeiger als Parameter
    179
      • 14.3 Die „Dualität“ von Zeigern und Feldern
    180
      • 14.4 Zeigerarithmetik
    182
      • 14.5 Komplexere Fälle: Felder von Zeigern, Zeiger auf Zeiger
    183
      • 14.6 Konstante Zeiger
    187
      • 14.7 Zeiger auf Funktionen
    188
        • 14.7.1 Adressen von Funktionen
    188
        • 14.7.2 Definition
    188
        • 14.7.3 Verwendung
    189
        • 14.7.4 Typdefinitionen mit typedef
    190
      • 14.8 Beispiele
    191
        • 14.8.1 Inkrement-Funktion
    191
        • 14.8.2 Lösen quadratischer Gleichungen – verbesserte Variante
    192
    • 15 Zeichenketten
    195
      • 15.1 Literale
    195
      • 15.2 Zeichenketten in C
    196
      • 15.3 Datentyp
    197
      • 15.4 Initialisierung von Zeichenketten
    198
      • 15.5 Elementare Funktionen für Zeichenketten
    199
      • 15.6 Felder von Zeigern auf Zeichenketten
    201
      • 15.7 Argumente der Funktion main
    203
      • 15.8 Beispiele
    204
        • 15.8.1 Vorzeitiges Ende einer Zeichenkette
    204
        • 15.8.2 Die Funktion strcpy
    204
        • 15.8.3 Die Funktion strlen
    206
        • 15.8.4 Die Funktion strcmp
    206
        • 15.8.5 Die Funktion atol
    207
        • 15.8.6 Kalender für ein Jahr – verbesserte Variante
    208
        • 15.8.7 Sortieren von Zeichenketten
    209
        • 15.8.8 Einfaches Verschlüsseln nach Julius Cäsar
    210
    • 16 Abgeleitete Datentypen
    211
      • 16.1 Richtlinien
    211
      • 16.2 Strukturen
    212
        • 16.2.1 Einfache Strukturen
    213
        • 16.2.2 Funktionen und Strukturen
    216
        • 16.2.3 Zeiger auf Strukturen
    217
        • 16.2.4 Felder von Strukturen
    218
        • 16.2.5 Bitfelder
    221
      • 16.3 Aufzählungen
    222
      • 16.4 Variante Strukturen
    224
      • 16.5 Rekursive Strukturen
    228
      • 16.6 Deklaration von abgeleiteten Datentypen
    228
      • 16.7 Typdefinition mit typedef
    230
      • 16.8 Beispiele
    231
        • 16.8.1 Ein Menü
    231
        • 16.8.2 Eine Adressverwaltung
    233
    • 17 Dateien
    239
      • 17.1 Datenströme
    239
      • 17.2 Öffnen und Schließen von Datenströmen
    240
      • 17.3 Ein- und Ausgabe
    243
      • 17.4 Beispiele
    245
        • 17.4.1 Kopieren von Dateien
    245
        • 17.4.2 Ausgeben von Dateien
    246
        • 17.4.3 Eine Adressverwaltung – verbesserte Variante
    246
    • 18 Rekursive Funktionen
    253
      • 18.1 Rekursive Algorithmen
    253
      • 18.2 Rekursive Funktionen in C
    254
      • 18.3 Beispiele
    256
        • 18.3.1 Binäres Suchen
    256
        • 18.3.2 Quicksort
    257
    • 19 Datenstrukturen
    261
      • 19.1 Datenstrukturen und abstrakte Datenstrukturen
    261
      • 19.2 Listen
    262
        • 19.2.1 Eigenschaften und Terminologie
    262
        • 19.2.2 Methoden und Implementierung
    263
          • 19.2.2.1 Einfügen eines neuen Elementes
    265
          • 19.2.2.2 Entfernen eines Elementes
    267
        • 19.2.3 Weitere Arten von Listen
    269
      • 19.3 Stapel und Schlangen
    270
        • 19.3.1 Stapel
    270
        • 19.3.2 Schlangen
    271
        • 19.3.3 Zirkularpuffer
    271
      • 19.4 Baum-Strukturen
    272
        • 19.4.1 Eigenschaften und Terminologie
    272
        • 19.4.2 Binäre Bäume
    274
        • 19.4.3 Binäre Suchbäume
    276
        • 19.4.4 Methoden
    277
          • 19.4.4.1 Traversieren von Bäumen
    277
          • 19.4.4.2 Suchen eines Elementes in einem binären Suchbaum
    278
          • 19.4.4.3 Einfügen eines neuen Elementes in einen binären Suchbaum
    279
          • 19.4.4.4 Löschen eines Elementes in einem binären Suchbaum
    279
      • 19.5 Heap-Strukturen
    283
        • 19.5.1 Eigenschaften
    283
        • 19.5.2 Methoden
    284
          • 19.5.2.1 Die Methode UpHeap
    284
          • 19.5.2.2 Die Methode DownHeap
    285
          • 19.5.2.3 Entfernen von Elementen
    286
          • 19.5.2.4 Aufbau eines Heaps durch Einfügen von Elementen
    287
          • 19.5.2.5 Aufbau eines Heaps in einem Feld
    287
          • 19.5.2.6 Sortieren mit Heaps
    287
      • 19.6 Hash-Strukturen
    289
        • 19.6.1 Hash-Funktion
    293
        • 19.6.2 Getrennte Verkettung
    294
        • 19.6.3 Eigenschaften
    296
      • 19.7 Vergleich der Datenstrukturen
    296
    • 20 Dynamischer Speicher
    299
      • 20.1 Aufgaben der Speicherverwaltung
    299
      • 20.2 Anfordern von Speicher
    300
      • 20.3 Verändern der Größe von Speicherblöcken
    303
      • 20.4 Freigeben von Speicher
    304
      • 20.5 Typische Fehler
    304
        • 20.5.1 Kein Speicher mehr frei
    305
        • 20.5.2 Freigabe mit einer falschen Adresse
    305
        • 20.5.3 Freigabe eines bereits freigegebenen Speichers
    305
        • 20.5.4 Freigabe eines Feldes
    306
        • 20.5.5 Freigabe einer Variable
    306
        • 20.5.6 Freigabe eines nicht initialisierten Zeigers
    306
        • 20.5.7 Zugriff auf einen ungültigen Speicher
    306
        • 20.5.8 Zugriff auf bereits freigegebenen Speicher
    307
        • 20.5.9 Zugriff mit falschen Indizes
    307
        • 20.5.10 Zugriff auf nicht initialisierten Speicher
    307
        • 20.5.11 Verlust des Speichers durch Überschreiben des Zeigers
    308
        • 20.5.12 Verlust des Speichers durch Verlust des Zeigers
    308
        • 20.5.13 Verlust des Speichers durch Rücksprung
    309
        • 20.5.14 Verlust des Speichers bei Rückgabe
    309
        • 20.5.15 Zu große Speicherblöcke
    310
    • 21 Numerik
    311
      • 21.1 Fehlerarten
    311
        • 21.1.1 Modellfehler
    311
        • 21.1.2 Datenfehler
    311
        • 21.1.3 Verfahrensfehler
    312
        • 21.1.4 Rundungsfehler
    312
      • 21.2 Mathematische Grundbegriffe
    312
        • 21.2.1 Relativer Fehler
    313
        • 21.2.2 Kondition
    313
      • 21.3 Sehr kleine und sehr große Zahlen
    315
        • 21.3.1 Ganze Zahlen
    315
        • 21.3.2 Punktzahlen
    315
        • 21.3.3 Summation von Punktzahlen
    316
      • 21.4 Auslöschung
    318
    • 22 Fehlerbehandlung
    319
      • 22.1 Behandlung von Fehlern im Programm
    322
        • 22.1.1 Fehlercodes
    322
        • 22.1.2 Fehlerweitergabe
    324
      • 22.2 Fehlerbehandlung mit Funktionen der Standard-Bibliothek
    325
        • 22.2.1 Die Fehlervariable errno
    325
        • 22.2.2 Fehlerausgabe
    326
        • 22.2.3 Programmende mit exit
    327
        • 22.2.4 Die Funktion atexit
    327
        • 22.2.5 Die Funktion assert
    327
      • 22.3 Signalbehandlung
    328
        • 22.3.1 Definition von Signalbehandlungsfunktionen
    329
        • 22.3.2 Abbruch mit abort
    330
    • 23 Ein exemplarisches Software-Projekt
    331
      • 23.1 Die Spezifikation
    331
      • 23.2 Präzisierung der Spezifikation
    332
      • 23.3 Bibliotheken
    333
        • 23.3.1 Wahl der Bibliothek
    334
        • 23.3.2 Verwendung von Bibliotheken
    334
      • 23.4 Realisierungsmöglichkeiten
    335
        • 23.4.1 Ansatz mit rekursiven Funktionen
    336
        • 23.4.2 Der Syntaxbaum
    337
        • 23.4.3 Der Auswertungsstapel
    338
      • 23.5 Entwurf
    339
        • 23.5.1 Beschreibung der Funktionen
    339
        • 23.5.2 Fehlerbehandlung
    340
      • 23.6 Implementierung des virtuellen Taschenrechners für den Textmodus
    340
        • 23.6.1 Das Modul main.o
    341
        • 23.6.2 Das Modul berechnung.o
    343
        • 23.6.3 Das Modul stapel.o
    346
        • 23.6.4 Das Modul eingabe.o
    349
        • 23.6.5 Die grafische Benutzeroberfläche
    351
      Literaturverzeichnis
    353
     
    • Books and Book Editorships
    • Papers in Journals
    • Contributions to Books
    • Conference Presentations
    • Scientific Reports
    • Patents
    • Habilitation Theses
    • PhD Theses
    • Master's Theses

    Institute for Microelectronics
    Head: Univ. Prof. Dipl.-Ing. Dr. techn. Tibor Grasser
    Deputy Head: O. Univ. Prof. Dipl.-Ing. Dr. techn. Dr.h.c. Siegfried Selberherr
    Contact Us    |    Join Us    |    Imprint
    © E360 - Institute for Microelectronics 2018