Programmieren in C Eine Einführung in die Programmiersprache C Prof. Dr. Nikolaus Wulff 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 2 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 CVS auch von zu Hause aus ein- und ausgechecked sowie bearbeitet werden. © Prof. Dr. Nikolaus Wulff Programmieren in C 3 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&R 1989, 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 4 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 5 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 objektorientierten Konzepte – mit C Kenntnissen leicht zu erlernen. © Prof. Dr. Nikolaus Wulff Programmieren in C 6 Programmiersprachen 1950 1960 Assembler Cobol OO-Sprachen Fortran PL/1 Algol Lisp Simula BCPL Pascal 1970 Smalltalk-72 CLU C 1980 beta C++ Lisp Flavors Smalltalk-76 Ada Smalltalk Modula2 Lisp CLOS Eiffel Turbo-Pascal 1990 Oberon Java 2000 Modula3 C# © Prof. Dr. Nikolaus Wulff Programmieren in C 7 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 8 C in der Nussschale cont. • C Quelltexte bestehen aus Anweisungen. int x; x = 2+3; Eine Variable x wird definiert und mit dem Wert 2+3=5 belegt. • Anweisungen können zu Blöcken zusammengefasst werden, die durch geschweifte Klammern {} eingeleitet und beendet werden. if(x>4) { y = 2; } © Prof. Dr. Nikolaus Wulff Nur wenn die Variable x einen Wert größer als 4 hat wird der Block ausgeführt... Programmieren in C 9 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. int g; float r; char z; Typ Drei Variablen vom Typ Integer, Gleitkommazahl und Zeichen werden definiert. Die Namen/Bezeichner g, r und z sind willkürlich gewählt. Bezeichner • Einer definierten Variable wird zur Laufzeit ein entsprechender Speicherplatz zugewiesen. © Prof. Dr. Nikolaus Wulff Programmieren in C 10 Anweisungen und Sätze • Anweisungen werden zu Sätzen zusammengefasst. • Ein Satz wird durch ein Semikolon beendet: zpi = 2 * 3.14; • 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. © Prof. Dr. Nikolaus Wulff Programmieren in C 11 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 12 Hello World in C /** * Der C Klassiker */ 0 #include <stdio.h> /* Standard I/O Bibliothek einbinden */ /* main-Funktion ist der C Einstiegspunkt */ 1 int main() { /* Hello World per Funktion printf ausgeben */ 2 printf("Hello, World"); /* Das Programm mit return Wert 0 beenden */ return 0; 3 } • • • 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. © Prof. Dr. Nikolaus Wulff Programmieren in C 13 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 14 Compile & Link Schritte Hello.c Compiler stdio.h Hello.obj Linker Hello.exe © Prof. Dr. Nikolaus Wulff Bibliotheksfunktionen • 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. Programmieren in C 15 Der Entwicklungszyklus Editieren Testen (Debugging) Compilieren • Programmierung ist ein zyklischer Prozess: – Quellcode erstellen – Quellcode übersetzen – Programm testen • Durch Testen kann man die Anwesenheit von Fehlern zeigen, niemals aber deren Abwesenheit! © Prof. Dr. Nikolaus Wulff Programmieren in C 16 Programmieren mit Notepad © Prof. Dr. Nikolaus Wulff Programmieren in C 17 HelloWorld in Aktion Compile: Aufruf: © Prof. Dr. Nikolaus Wulff Programmieren in C 18 Entwickung mit der Eclipse IDE Quelltext Hello.c Projekt Struktur Ausgaben von gcc © Prof. Dr. Nikolaus Wulff Programmieren in C 19 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 20 Programmstart in der IDE Prog. Start Debugger Konsolenausgaben von HelloWorld.exe © Prof. Dr. Nikolaus Wulff Programmieren in C 21 Textausgabe per printf • Die Funktion printf ist kein Bestandteil der C Sprache sondern gehört zur C Bibliothek. • printf gestattet eine formatierte Ausgabe: printf(<Format>,<arg1>,...,<argN>); • Die Formatzeichenkette ist zwingend, weitere Argumente 1, ..., N sind optional. • Die Formatanweisung bestimmt wie die Argumente ausgegeben werden sollen und gestattet vielerlei Formatierungen... © Prof. Dr. Nikolaus Wulff Programmieren in C 22 Textformatierung • Zu jedem C Datentypen gehört eine entsprechende Formatanweisung, die mit dem %-Zeichen markiert wird: %... c d, i f s e, E g, G Typ char int, long float, double char* float, double float, double Bedeutung Einzelnes Zeichen Ganzzahl (Integer) Reelle Zahl (m.dddddd) Zeichenkette Reelle Zahl (m.ddddE±xx) E oder F Darstellung • Zusätzlich erfolgt mit %o und %x eine oktale und hexadezimale Ausgabe von Ganzzahlen. © Prof. Dr. Nikolaus Wulff Programmieren in C 23 Formatierte Ausgabe // Ausgabe mit printf double 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); • 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. © Prof. Dr. Nikolaus Wulff Programmieren in C 24