forked from pittlerf/ckurs2017
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathintro.tex
81 lines (70 loc) · 6.18 KB
/
intro.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
\section{Einleitung}
In diesem Skript wird die Programmiersprache \texttt{C} eingeführt.
\texttt{C} ist eine m\"{a}chtige Programmiersprache, die in vielen Bereichen zum Einsatz kommt.
Im Allgemeinen besteht Programmieren aus dem Schreiben von Quelltext (auch \emph{Code}) in einer Programmiersprache, der dann in ausführbaren Maschinencode übersetzt werden muss.
Den letzten Schritt nennt man Übersetzen (auch \emph{compilieren}), und das Programm, das diese Aufgabe übernimmt \emph{Compiler}.
\texttt{C} gehört zu den Programmiersprachen, für die zunächst der gesamte Quelltext geschrieben werden muss, um ihn dann zu Übersetzen.
Der übersetzte Code kann dann ausgeführt werden, man spricht auch vom ausführbaren Programm.
Es gibt mehrere Gründe, sich für \texttt{C} als Programmiersprache zu entscheiden, unter anderem:
\begin{itemize}
\item \texttt{C} erzeugt meist effizienten Maschinencode:\\
Es gibt sehr gute Compiler und die Sprache \texttt{C} lässt sich sehr gut in Maschinencode übersetzen.
\item \texttt{C} ist eine Hochsprache mit mächtigen Sprachelementen:\\
Man muss nicht die Details der benutzten Computerarchitektur kennen, um guten Quelltext zu erzeugen.
\item \texttt{C} ist sehr maschinennah:\\
Wenn man doch einmal die Details beispielsweise der CPU ausnutzen möchte, so ist das möglich.
\item \texttt{C} wird sehr häufig genutzt:\\
Es gibt viele bestehende \emph{Bibliotheken}, in denen nützliche Funktionalität implementiert ist und es ist relativ einfach, schnell Hilfe zu verschiedensten Problemen zu erhalten.
\end{itemize}
Viel der heute häufig genutzten Software ist ursprünglich in \texttt{C} geschrieben.
Der Inhalt dieses Skripts ist der folgende: Im ersten Teil werden die Grundlagen behandelt, mit deren Hilfe man einfache Fragestellungen in \texttt{C} umsetzen kann.
Dabei beginnen wir mit der grundlegenden Struktur eines \texttt{C} Programms und erklären seine Bestandteile.
Das Verständniss der folgenden Konzepte ist dabei fundamental:
\begin{enumerate}
\item Datentypen
\item Kontrollstrukturen
\item Funktionen
\end{enumerate}
Will man bespielsweise eine Reihe von Zahlen sortieren, so muss man zunächst entscheiden, ob ganze oder reelle Zahlen sortiert werden sollen.
Man muss sich also über den Datentyp klar werden.
Auf jedem \texttt{C} Datentyp sind bestimmte Operationen definiert.
Alle \texttt{C}-Datentypen und die dafür zur Verfügung stehenden Operationen werden eingeführt.
Um den Ablauf eines Programms beeinflussen zu können, braucht man allerdings mehr als Operationen auf Daten, nämlich sogenannte \texttt{C}-Kontrollstrukturen wie Schleifen und Verzweigungen.
Ein weiteres wichtiges Konzept sind Funktionen.
Im allgemeinen stellen Funktionen (im Idealfall kurze) mit Namen versehene Abschnitte im Programm dar, die dann über den Namen wieder aus dem Quelltext aufgerufen werden können.
Das kleinste ausführbare \texttt{C}-Programm besteht aus genau einer Funktion.
Funktionen bekommen Daten als Eingabe, führen bestimmte Operationen auf diesen Eingabedaten aus und liefern dann einen Rückgabewert.
Die oben bereits erwähnten Bibliotheken stellen im wesentlichen Funktionen zur Verfügung.
So wird zum Beispiel die Ein- und Ausgabe von Text in \texttt{C} über Bibliotheksfunktionen realisiert.
Wir werden zeigen, wie man Funktionen definiert und aufruft.
Der zweite Teil des Skripts behandelt zwei fortgeschrittene Konzepte von \texttt{C}, nämlich dynamische Speicherverwaltung und zusammengesetzte Datentypen.
Das Verständnis von dynamischer Speicherverwaltung in \texttt{C} kann in vielen Situationen unumgänglich sein.
Denken Sie an einen Algorithmus zum Sortieren von Zahlen: Wenn nicht von Anfang an klar ist, welche Länge die zu sortierenden Zahlenreihen haben werden, dann sollte man in der Lage sein, diese Länge dynamisch anzupassen
Zusammengesetzte Datenstrukturen sind sehr nützlich, um auf ein Problem angepasste Datentypen nutzen zu können.
Das ist unter anderem auch wichtig, weil damit unter Umständen Programme effizienter gemacht werden können.
Ferner werden wir sehen, dass zusammengesetzte Datentypen dabei helfen können, den Quelltext für eine gegebene Problemlösung verständlicher zu gestalten.
Ein sehr wichtiger in diese Richtung gehender Aspekt beim Programmieren ist auch das Kommentieren sowie das Code\-design.
Letzteres werden wir insbesondere in Form der sogenannten \emph{modularen} Programmierung kennenlernen.
Dies erhöht die Wiederverwendbarkeit von Code und erlaubt es auch Code zu verstehen, den man vor einem Jahr geschrieben hat.
Da sich die Sprache \texttt{C} im Laufe der Zeit verändert, existieren verschiedene sogenannte Standards.
In diesem Skript werden wir uns an den C99 Standard halten.\index{C99 Standard}
\subsection{Weitere Hilfe}
Dieses Skript erhebt nicht den Anspruch, die Programmiersprache \texttt{C} in allen Details und vollständig zu behandeln.
Es geht mehr darum, ein grundlegendes Verständnis von Programmierung zu bekommen und dies in \texttt{C} auf einfache Probleme anzuwenden.
Weitere Möglichkeiten von \texttt{C} und sogar andere Programmiersprachen kann man sich dann relativ leicht im Selbststudium aneignen.
Dazu gibt es eine Vielzahl von Büchern für jeden möglichen Geschmack und Anwendungsbereich.
Beispielsweise
\begin{itemize}
\item P.~Deitel und H.~Deitel, "C: How to program", Prentice Hall, 7th edition
\item S.~P.~Harbison, "C: A Reference Manual", Pearson, 5th edition
\item J.~Goll, U.~Bröckl, M.~Dausmann,"C als erste Programmiersprache", Teubner, 4., überarbeitete und erweiterte Auflage
\item W.H~Press,~B.P.~Flannery, S.A.~Teukolsky, W.T.~Vetterling, "Numerical Recipes in C book set: Numerical recipes in C. The art of scientific computing", Cambridge, 2th edition
\item H.~Gould und J.~Tobochnik, "{}An Introduction to Computer Simulation Methods: Applications to Physical Systems (Englisch)", Addison Wesley Longman, 3th edition
\end{itemize}
Bei konkreten Fragen ist auch das Internet oft sehr hilfreich.
Beispielsweise sei hier auf \texttt{stackoverflow.com} hingewiesen, wo fast jede Frage schon einmal gestellt und auch beantwortet wurde.
Dieses Dokument wurde mit \LaTeX\ erstellt und kann unter
\begin{center}
\url{https://github.com/urbach/c-kurs}
\end{center}
frei heruntergeladen werden.