Prof. Dr. Nikolaus Wulff
Programmieren in CProgrammieren in C
Eine Einführung in die Programmiersprache C
© Prof. Dr. Nikolaus Wulff Programmieren in C 2
Der Anfänger sollte nicht entmutigt sein,wenn er nicht die Voraussetzungen besitzt,um die Voraussetzungen zu verstehen ...
© Prof. Dr. Nikolaus Wulff Programmieren in C 3
Entwicklungsumgebung
• Alle Übungen und Praktika lassen sich auch von zu Hause aus bearbeiten. Es werden nur OpenSource Werkzeuge verwandt.
• Als Entwicklungsumgebung dient die Eclipse IDE.– Einheitliche Umgebung für Java und C.
– Minimierter einmaliger Lernaufwand.
• Der OpenSource gcc Compiler kann auch unter Windows, nach der Installation von Cygwin oder MinGW, verwendet werden...
• Sourcen können per Git/CVS auch von zu Hause aus ein- und ausgechecked sowie bearbeitet werden.
© Prof. Dr. Nikolaus Wulff Programmieren in C 4
Literatur
• B.W. Kernighan und D.M. Ritchie, Programmieren in C, 2.te Auflage ANSI C,
1978 &1988, ISBN 3-446-15497-3• C.L. Tondo und S. E. Gimpel,
Das C-Lösungsbuch zu K&R1989, ISBN 3-446-15946-0
• M. McGrath, C Programming in easy steps, 2.te Auflage, 2006, ISBN 1-84078-323-0
• H. Erlenkötter, Programmieren in C, 4.te Auflage 2001, ISBN 3-499-60074-9, in der ST Bibliothek von Studenten empfohlen „grünes Buch“...
• Sowie weitere Bücher der ST Bibliothek.
© Prof. Dr. Nikolaus Wulff Programmieren in C 5
Agenda
• Elementare Einführung• C Programm Syntax• Datentypen, Variablen und Konstanten• Operatoren und Ausdrücke• Kontrollstrukturen• Funktionen und Programmstruktur• Zeiger und Felder• Strukturen• Ein- / Ausgabe• Bibliotheksfunktionen
© Prof. Dr. Nikolaus Wulff Programmieren in C 6
Kurze Historie von C
• C wurde Anfang der siebziger Jahre von Kernighan und Ritchie für das UNIX Betriebssystem entwickelt.
• C ist eine sehr systemnahe Sprache, die es ermöglicht (fast) ohne Assembler auszukommen.
• ANSI C wurde 1988 standardisiert und existiert für nahezu alle Betriebssysteme.
• 1983 wurde die objektorientierte Erweiterung C++ von Bjarne Stroustrup in den Bell Laboratorien entwickelt.
• Viele Sprachen wie z.B. Java, C#, Perl, PHP, etc. besitzen eine C ähnliche Syntax und sind – bis auf die objektorien-tierten Konzepte – mit C Kenntnissen leicht zu erlernen.
© Prof. Dr. Nikolaus Wulff Programmieren in C 7
ProgrammiersprachenAssembler
Fortran
Algol
Simula Pascal
C
C++
Smalltalk-72 CLU
Modula2Ada
Oberon
Turbo-Pascal
beta
Eiffel
Lisp
LispFlavors
LispCLOS
BCPL
Modula3
Smalltalk
Smalltalk-76
Java
PL/1
Cobol
C#
1950
1960
1980
1970
2000
1990
OO-Sprachen
© Prof. Dr. Nikolaus Wulff Programmieren in C 8
C in der Nussschale
• Ein Programm besteht aus einer Menge von Anweisungen für den Computer.
• In den höheren Programmiersprachen sind diese Anweisungen in einer dem Menschen verständlichen, lesbaren Form notiert, dem sogenannten Quelltext ( Sourcecode).
• Dieser besteht aus einer Folge von Zeichen:– Den Buchstaben a-z, A-Z sowie dem Unterstrich _– Den Ziffern 0-9– Sonderzeichen und dem Leerzeichen
• Die Syntax der Sprache bestimmt die erlaubten Ausdrücke, die verwendet werden dürfen.
© Prof. Dr. Nikolaus Wulff Programmieren in C 9
C in der Nussschale cont.
• C Quelltexte bestehen aus Anweisungen.
• Anweisungen können zu Blöcken zusammenge-fasst werden, die durch geschweifte Klammern {} eingeleitet und beendet werden.
int x;x = 2+3;
Eine Variable x wird definiertund mit dem Wert 2+3=5 belegt.
if(x>4) { y = 2;}
Nur wenn die Variable x einen Wert größer als 4 hat wird der Block ausgeführt...
© Prof. Dr. Nikolaus Wulff Programmieren in C 10
C in der Nussschale cont.
• C kennt verschiedene Datentypen, wie z. B. Ganzzahlen (int), die reellen Zahlen (float) oder auch einzelne Zeichen (char) und Zeichenketten.
• Bevor eine Variable verwendet werden kann, muss diese entsprechend definiert werden.
• Einer definierten Variable wird zur Laufzeit ein entsprechender Speicherplatz zugewiesen.
int g;float r;char z;
Drei Variablen vom Typ Integer,Gleitkommazahl und Zeichen werdendefiniert. Die Namen/Bezeichner g, r und z sind willkürlich gewählt.
Typ Bezeichner
© Prof. Dr. Nikolaus Wulff Programmieren in C 11
Anweisungen und Sätze
• Anweisungen werden zu Sätzen zusammengefasst.
• Ein Satz wird durch ein Semikolon beendet:
• Dieser Satz bedeutet: Multipliziere die Zahl 2 mit der Zahl 3.14 und weise das Ergebnis einer Variablen mit dem symbolischen Namen „zpi“ zu.
• Zuerst wird die rechte Seite des Satzes (Anweisung Multipliziere) anschließend die linke Seite des Satzes (Anweisung Wertzuweisung des Ergebnisses an „zpi“) ausgeführt.
zpi = 2 * 3.14;
© Prof. Dr. Nikolaus Wulff Programmieren in C 12
Ein erstes Programm
• Wir erstellen das Programm „HelloWorld.exe“.
• HelloWorld ist sehr einfach und gibt nur den Text „Hello, World“ auf der Konsole aus...
• Jedes C Programm besitzt eine main Funktion, die vom Betriebssystem beim Start gerufen wird.
• Die main Funktion gibt nach der Abarbeitung an das Betriebssystem einen Rückgabewert zurück, der signalisiert, ob der Aufruf erfolgreich war (return 0) oder ein Fehler passierte, z.B. (return -1).
© Prof. Dr. Nikolaus Wulff Programmieren in C 13
/**
* Der C Klassiker
*/
#include <stdio.h> /* Standard I/O Bibliothek einbinden */
/* main-Funktion ist der C Einstiegspunkt */
int main() {
/* Hello World per Funktion printf ausgeben */
printf("Hello, World");
/* Das Programm mit return Wert 0 beenden */
return 0;
}
Hello World in C
• Die main-Funktion gibt die Zeichenkette „Hello, World“ mit der Bibliotheksfunktion printf aus.
• Die Funktion printf wird in der Datei stdio.h deklariert und per include Anweisung bekannt gemacht.
• Mit /* ... */ werden Kommentare in den (Quell)Text eingebunden.
1
2
0
3
© Prof. Dr. Nikolaus Wulff Programmieren in C 14
Vom Quelltext zum Programm
• Die „Hello World“ Anweisungen werden in einer Textdatei Hello.c abgespeichert.
• Damit daraus ein ablauffähiges Programm wird muss der Quelltext in Maschinencode übersetzt werden.
• Je nach Betriebssystem und verwendeten Compiler geschieht dies in mehreren Schritten:– Der Compiler erzeugt eine Objekt Datei
– Der Linker bindet diese mit Betriebssystemroutinen zum ausführbaren Programm
© Prof. Dr. Nikolaus Wulff Programmieren in C 15
Compile & Link Schritte
• Erstellen des Quelltext.
• Übersetzen
• Binden/Linken mit den Bibliotheksfunktionen des Betriebsystems.
• Test und Ausführung der Anwendung.
• Die einzelnen Schritte können manuell per Hand als auch automatisiert durchgeführt werden.
Hello.c
Hello.obj
Hello.exe
Compiler
Linker
stdio.h
Bibliotheks-funktionen
© Prof. Dr. Nikolaus Wulff Programmieren in C 16
Der Entwicklungszyklus
• Programmierung ist ein zyklischer Prozess:– Quellcode erstellen
– Quellcode übersetzen
– Programm testen
• Durch Testen kann man die Anwesenheit von Fehlern zeigen, niemals aber deren Abwesenheit!
Testen(Debugging) Compilieren
Editieren
© Prof. Dr. Nikolaus Wulff Programmieren in C 17
Programmieren mit Notepad
© Prof. Dr. Nikolaus Wulff Programmieren in C 18
HelloWorld in Aktion
Compile:
Aufruf:
© Prof. Dr. Nikolaus Wulff Programmieren in C 19
Entwickung mit der Eclipse IDE
Ausgaben von gcc
Quelltext Hello.c
Projekt Struktur
© Prof. Dr. Nikolaus Wulff Programmieren in C 20
Edit, Compile und Execute
• In der IDE wird der Quelltext editiert,
• anschließend (automatisch) compiliert
• und direkt ausgeführt– Hierzu die ausführbare Datei HelloWorld.exe selektieren
– das Kontextmenu mit der rechten Maus öffnen
– und „run as lokal C/C++ Application“ auswählen
– CYGWIN GDB Debugger bestätigen.
• Nach dem ersten Ausführen braucht die Debugger Umgebung nicht mehr bestätigt werden. Mit der grünen Pfeiltaste lässt sich das Programm direkt starten oder per „Wanzensymbol“ debuggen.
© Prof. Dr. Nikolaus Wulff Programmieren in C 21
Programmstart in der IDE
Konsolenausgaben von HelloWorld.exe
Debugger
Prog. Start
© Prof. Dr. Nikolaus Wulff Programmieren in C 22
Textausgabe per printf
• Die Funktion printf ist kein Bestandteil der C Sprache sondern gehört zur C Bibliothek.
• printf gestattet eine formatierte Ausgabe:
• Die Formatzeichenkette ist zwingend, weitere Argumente 1, ..., N sind optional.
• Die Formatanweisung bestimmt wie die Argumente ausgegeben werden sollen und gestattet vielerlei Formatierungen...
printf(<Format>,<arg1>,...,<argN>);
© Prof. Dr. Nikolaus Wulff Programmieren in C 23
• Zu jedem C Datentypen gehört eine entsprechende Formatanweisung, die mit dem %-Zeichen markiert wird:
• Zusätzlich erfolgt mit %o und %x eine oktale und hexadezimale Ausgabe von Ganzzahlen.
Textformatierung
BedeutungTyp%...
Einzelnes Zeichencharc
E oder F Darstellungfloat, doubleg, G
Reelle Zahl (m.ddddE±xx)float, doublee, E
Zeichenkettechar*s
Reelle Zahl (m.dddddd)float, doublef
Ganzzahl (Integer)int, longd, i
© Prof. Dr. Nikolaus Wulff Programmieren in C 24
Formatierte Ausgabe
• Die Formatanweisung enthält normalen Text sowie mit % eingeleitete Platzhalter für die auszugebenden Argumente.
• Die Anzahl an Stellen kann explizit gemacht werden.
• Zusätzlich können „Escape Sequenzen“ angegeben werden:– \n neue Zeile, \t horz. Tabulator, \v vert. Tabulator, \a Signalton
• Bei Gleitkommazahlen lassen sich die Stellen vor und nach dem Komma sowie die Mantisse angeben.
// Ausgabe mit printfdouble pi = 3.1415926;float eps = 1.E-12;printf("%c \n",'a');printf("%f \t %d \n", pi, 4711);printf("%s","Zeichenkette");printf("%E \n", eps);