Teil 1: Grundlagen der strukturierten Programmierung; Teil 2: Algorithmen und Datenstrukturen
Strukturiertes Programmieren in C
Dipl. Inform.med. Winfried Bantel
6. März 2001
Inhaltsverzeichnis
I Grundlagen der strukturierten Programmierung ... 5
1 Einleitung ... 6
1.1 Historie Programmiertechniken ... 6
1.2 Programmieren lernen ... 7
1.3 Einfache Lösungen sind die besten Lösungen ... 7
2 Algorithmen und Programme ... 9
2.1 Algorithmen ... 9
2.2 Darstellungsformen ... 11
2.3 Freitext ... 13
2.4 Pseudo-Code ... 13
2.5 Laufzeiten von Algorithmen ... 13
3 Einführung in C ... 14
3.1 Hello World ... 14
3.2 Programmiersprachen ... 14
3.3 Operatoren ... 16
3.4 C-Schlüsselwörter (Keywords) ... 16
3.5 Bezeichner ... 16
3.6 Kommentare ... 16
3.7 Programm-Layout ... 17
3.8 Der Präprozessor ... 18
3.9 Die Standardbibliothek ... 19
4 Einfache Datentypen ... 22
4.1 Einführung ... 22
4.2 Ganze Zahlen ... 23
4.3 Fließkommazahlen ... 26
5 Ausdrücke ... 28
5.1 Einführung ... 28
5.2 Operatoren ... 30
5.3 Funktionen ... 33
5.4 Typisierung ... 33
5.5 Reihenfolge bei der Berechnung von Ausdrücken ... 34
5.6 Übungen ... 34
6 Verzweigungen ... 35
6.1 Einführung ... 35
6.2 Die einfache Verzweigung (if-else) ... 36
6.3 Die mehrfache Verzweigung (switch-case) ... 40
6.4 Der ternäre Operator "? :" ... 41
6.5 Beispiele ... 41
6.6 Aufgaben und Übungen ... 45
7 Schleifen ... 46
7.1 Einführung ... 46
7.2 Die drei Schleifenarten ... 46
7.3 Darstellungsarten ... 47
7.4 Die zählergesteuerte Schleife ... 47
7.5 Die kopfgesteuerte Schleife ... 52
7.6 Die fußgesteuerte Schleife ... 54
7.7 Mischformen - Endlosschleife und Sprünge ... 55
7.8 Tipps zur Schleifenauswahl ... 56
7.9 Beispiele ... 57
7.10 Übungen ... 66
8 Zeiger ... 68
8.1 Zeiger ... 68
8.2 Einführung ... 68
8.3 Operatoren für Zeiger ... 68
8.4 Hauptspeichermodell ... 68
9 Modulare Programmierung ... 70
9.1 Einführung ... 70
9.2 Die Schnittstelle ... 72
9.3 Prototypen ... 73
9.4 Gültigkeitsbereich von Variablen ... 73
9.5 Globale Variablen ... 74
9.6 Call-by-value und Call-by-Reference ... 74
9.7 Module ... 75
9.8 Beispiele ... 76
9.9 Aufgaben ... 81
10 Strukturierte Datentypen ... 82
10.1 Konstanten ... 82
10.2 Aufzählungen ... 83
10.3 Felder ... 83
10.4 Zeichenketten (Strings) ... 85
10.5 Strukturen ... 88
10.6 Zeiger und Strukturen ... 89
10.7 Dynamische Felder ... 89
10.8 Eigene Typen ... 91
10.9 Beispiele ... 92
10.10Übungen ... 93
10.11Minesweeper ... 94
10.12Datums-Check ... 94
10.13Binär-Dezimal-Umwandlung ... 94
10.14Game of life ... 94
11 Sortieren ... 95
11.1 Einführung ... 95
11.2 Bubble-Sort ... 95
11.3 Sortieren durch direktes Tauschen ... 97
11.4 Quicksort ... 99
11.5 Beispiele ... 99
II Algorithmen und Datenstrukturen ... 101
12 Dateiverarbeitung ... 102
12.1 Einführung ... 102
12.2 Ö nen und schließen ... 102
12.3 Dateien mit variabler Satzlänge ... 105
12.4 Dateinamen als Parameter ... 106
12.5 Datenaustausch mit Tabellenkalkulationsprogrammen ... 107
12.6 Beispiele ... 108
13 Rekursion ... 111
13.1 Einführung ... 111
13.2 Einfache Anwendungen ... 113
13.3 Vor- und Nachteile von Rekursion ... 115
13.4 Weitere Anwendungen ... 117
13.5 Backtracking-Algorithmen ... 127
13.6 Übungen ... 136
14 Dynamische Datenstrukturen ... 139
14.1 Einführung ... 139
14.2 Die sortierte lineare Liste ... 140
14.3 Der Kellerspeicher (Stack) ... 144
14.4 Die Schlange (Queue) ... 145
A C-Standard-Bibliothek ... 149
A.1 Einführung ... 149
A.2 stdio.h ... 149
A.3 ctype.h ... 151
A.4 math.h ... 152
A.5 string.h ... 152
A.6 time.h ... 153
A.7 stdlib.h ... 153
A.8 limits.h ... 153
A.9 oat.h ... 154
B C-Syntax ... 155
C Priorität der Operatoren ... 157
D ASCII-Tabelle ... 158
Teil I
Grundlagen der strukturierten Programmierung
Kapitel 1
Einleitung
1.1 Historie Programmiertechniken
bis 60er-Jahre Unstrukturierte Programmierung
70er-Jahre Strukturierte Programmierung
80er-Jahre Modulare Programmierung
90er-Jahre Objektorientierte Programmierung
1.1.1 Vor der strukturierten Programmierung
In den 60er-Jahre war das GOTO-Statement (Sprunganweisung) der wichtigste Teil in den Programmen, die gesamte Ablaufsteuerung musste über GOTO programmiert werden. Dies hatte zur Folge, daß die Programme sehr schlecht verständlich waren, schwierig zu warten und Programmierung als "Kunst" verstanden wurde.
1.1.2 Strukturierte Programmierung
Ende der 60er entwickelte sich unter den Informatikern eine Debatte um Sinn und Unsinn des GOTOs. Auslöser war eine Veröentlichung von Dijkstra namens "Goto Statements Considered Harmful" 1968.
Dijkstra: "Jeder Programmierer, der ein fehlerfreies Programm entwerfen möchte muß sich davon überzeugen, daß sein Programm terminiert. In einem Programm, in dem eine unbegrenzte Anzahl von GOTO-Anweisungen eingebracht wurde, ist es sehr schwer zu sagen, an welcher Stelle das Programm bei einem Fehler hängt, bzw. nicht terminiert. Bei der strukturierten Programmierung gibt es nur zwei Möglichkeiten, daß ein Programm nicht abbricht. Entweder bei einer Rekursion oder in einer Wiederholungsschleife. Das macht die Fehlersuche wesentlich einfacher."
Diese Verö entlichung kann als die Geburtsstunde der Strukturierten Programmierung angesehen werden.
Es wurde ein mathematischer Beweis geführt, daß sich jede Programmieraufgabe über eine Abfolge der folgenden drei Ablaufstrukturen lösen lässt:
- Sequenz
- Auswahl
- Wiederholung
Ein zweites Ziel der strukturierten Programmierung war die Top-Down-Entwurfsmethode (vom Groben zum Detail), die durch die strukturierte Programmierung unterstützt wurde (Wirth).
So standen die 70er Jahre im Zeichen der strukturierten Programmierung. Unter dem Ziel des wiederverwendbaren Codes kam in den 80ern die Modulare Programmierung hinzu.
Seit den 90ern heißt das Schlagwort "Objektorientierte Programmierung". Diese erweitert die strukturierte modulare Programmierung nochmals.
Die Programmiersprache Cwurde Anfang der 70 von Brian Kernighan und Dennis Ritchie an den Bell-Laboratories entwickelt und Mitte der 80er von Bjarne Stroustroup um objektorientierte Konzepte zu C++erweitert. Aber auch andere strukturierte Programmiersprachen wie Pascal wurden im Lauf der Zeit zu objektorientierten Sprachen erweitert (Object-Pascal, Delphi).
C hat einen hohen Verbreitungsgrad, ist als Programmiersprache von Kleinst- bis hin zu Groß- rechnern verfügbar und auf allen Betriebssystemen zu Hause. Es eignet sich für Einsteiger zum Erlernen der Strukturierten Programmierung und kann später durch C++zum Erlernen der Objektorientierten Programmierung weitergeführt werden.
[...]
Häufig gestellte Fragen zu "Strukturiertes Programmieren in C"
Was ist das Ziel der strukturierten Programmierung?
Das Ziel der strukturierten Programmierung ist es, Programme verständlicher, wartbarer und weniger fehleranfällig zu machen. Dies wird durch die Verwendung von drei grundlegenden Ablaufstrukturen erreicht: Sequenz, Auswahl und Wiederholung. Die Top-Down-Entwurfsmethode wird ebenfalls unterstützt.
Was sind die drei grundlegenden Ablaufstrukturen der strukturierten Programmierung?
Die drei grundlegenden Ablaufstrukturen sind Sequenz, Auswahl (Verzweigung) und Wiederholung (Schleife).
Was ist der Unterschied zwischen unstrukturierter und strukturierter Programmierung?
In der unstrukturierten Programmierung (vor den 70er Jahren) wurde hauptsächlich das GOTO-Statement verwendet, was zu schwer verständlichen und schwer wartbaren Programmen führte. Die strukturierte Programmierung vermeidet GOTO-Anweisungen und verwendet stattdessen die drei grundlegenden Ablaufstrukturen, was zu besser strukturierten und verständlicheren Programmen führt.
Was ist modulare Programmierung?
Modulare Programmierung ist ein Ansatz, bei dem ein Programm in separate, unabhängige Module unterteilt wird, die jeweils eine bestimmte Funktion ausführen. Dies fördert die Wiederverwendbarkeit von Code und erleichtert die Wartung und Erweiterung von Programmen.
Was ist objektorientierte Programmierung?
Objektorientierte Programmierung (OOP) ist ein Programmierparadigma, das auf dem Konzept von "Objekten" basiert, die Daten (Attribute) und Code (Methoden) enthalten. OOP-Konzepte wie Vererbung, Polymorphie und Kapselung ermöglichen die Entwicklung komplexer und flexibler Anwendungen.
Welche Programmiersprachen werden in Bezug auf die Konzepte der strukturierten Programmierung erwähnt?
Die Programmiersprachen C, Pascal und C++ werden erwähnt. C eignet sich gut zum Erlernen der strukturierten Programmierung und kann später mit C++ auf objektorientierte Programmierung erweitert werden. Pascal wurde ebenfalls zu Object-Pascal (Delphi) erweitert, um objektorientierte Konzepte zu unterstützen.
Was sind Zeiger in C?
Zeiger sind Variablen, die die Speicheradresse einer anderen Variablen speichern. Sie ermöglichen den direkten Zugriff auf den Speicher und werden häufig verwendet, um Datenstrukturen wie Listen und Bäume zu implementieren.
Was ist Rekursion?
Rekursion ist eine Programmiertechnik, bei der sich eine Funktion selbst aufruft. Rekursion kann verwendet werden, um Probleme zu lösen, die sich in kleinere, ähnliche Teilprobleme zerlegen lassen.
Was sind dynamische Datenstrukturen?
Dynamische Datenstrukturen sind Datenstrukturen, deren Größe zur Laufzeit geändert werden kann. Beispiele hierfür sind lineare Listen, Kellerspeicher (Stacks) und Schlangen (Queues).
Was ist die C-Standardbibliothek?
Die C-Standardbibliothek ist eine Sammlung von vordefinierten Funktionen und Makros, die in C-Programmen verwendet werden können. Sie bietet Funktionen für Ein- und Ausgabe, Zeichenkettenverarbeitung, mathematische Berechnungen, Zeitfunktionen und mehr.
Was sind Beispiele für Sortieralgorithmen, die im Dokument erwähnt werden?
Die Sortieralgorithmen Bubble-Sort, Sortieren durch direktes Tauschen und Quicksort werden erwähnt.
Welche Datentypen werden in C erwähnt?
Ganze Zahlen, Fließkommazahlen, Aufzählungen, Felder (Arrays), Zeichenketten (Strings) und Strukturen werden erwähnt.
- Arbeit zitieren
- Winfried Bantel (Autor:in), 2001, Strukturierte Programmierung in C, München, GRIN Verlag, https://www.hausarbeiten.de/document/101160