Organisatorisches Wenn Sie kommen ... ... kommen Sie pünktlich Einführung in die Programmierung in C Hochschule Regensburg 13.03.2012.-13.07.2012 Universitätsstraße 31, 93053 Regensburg Aus Respekt vor Ihren Mitstudierenden, während der Vorlesung ... ... keine Gespräche ... keine Telefonate ... bringen Sie sich adäquat ein Prof. Dr. Jan Dünnweber ... Rück- und Zwischenfragen: Gerne! Kontakt http://dps.hs-regensburg.de [email protected] Sprechstunde, i.d.R. Freitags 11:30-12:30, sonst nach Vereinbarung Prof. Dr. Jan Dünnweber, Folie 2 von 20 DPS-Homepage (Distributed and Parallel Systems) Programmierung 1 In medias res: Unix und C Warum eigentlich Unix? Unix Varianten (FreeBSD, OpenBSD, NetBSD, Linux, . . . ) für jede gängige Hardware-Architektur kostenlos erhältlich Kostenlose Compiler, Debugger, IDEs, . . . (GNU Software, fsf.org) Der komplette Quell-Code des Systems ist verfügbar ... und Warum C? Relativ alte Sprache (erste Version 1971) aber im Bereich der Systemprogrammierung noch immer die Sprache der Wahl C ist kompakt, transparent, maschinennah und hoch-performant C ist nicht objekt-orientiert, high-level, plattformunabhängig C ist eine optimale Grundlage für das Erlernen von C++, Java, etc. Standardwerk zu C: Brian W. Kernighan, Dennis M. Ritchie Programmieren in C 2. Auflage, Hanser Verlag, 1990 http://dps.hs-regensburg.de ISBN: 3-446-15492-3 Prof. Dr. Jan Dünnweber, Folie 3 von 20 Programmierung 1 Prof. Dr. Jan Dünnweber, Folie 4 von 20 Programmierung 1 Literatur Werkzeuge für die C-Programmierung 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 Jürgen Wolf, C von A bis Z, 1200 Seiten, 2009 ISBN 978-3836214117 Jürgen Wolf, Grundkurs C, 9,90 EUR, 2010 ISBN 978-3836215466 P. Prinz und T. Crawford, C in a Nutshell, 2006 ISBN 978-0-596-00697-6 Steve Oualline, Practical C Programming, 1997 ISBN 978-1-56592-306-5 H. Erlenkötter, Programmieren in C, 4.te Auflage 2001 ISBN 3-499-60074-9, 12 EUR Von Studenten empfohlen: “grünes Buch” ... Prof. Dr. Jan Dünnweber, Folie 5 von 20 Programmierung 1 Editor, Compiler, IDE, etc. Alle Übungen lassen sich auch von zu Hause aus bearbeiten. Es werden nur OpenSource Werkzeuge verwendet Als Entwicklungsumgebung dient die Eclipse IDE ◮ ◮ Einheitliche Umgebung für Java und C Minimierter einmaliger Lernaufwand Alternativ könenn (für die ersten Übungen) auch nur die rudimentären UNIX-Tools (vi & emacs) verwendet werden. Auch diese werden in der Vorlesung behandelt Der OpenSource gcc Compiler kann auch unter Windows, nach der Installation von Cygwin oder MinGW benutzt werden Prof. Dr. Jan Dünnweber, Folie 6 von 20 Alle Schlüsselwörter von C Programmierung 1 C in einem Semester In der folgenden Tabelle sind alle Schlüsselwörter von ANSI C aufgelistet: auto break case char continue default do double enum extern float for if int long register short signed sizeof static switch typedef union unsigned volatile while Um zügig in die Programmierung einzusteigen, wird die Verwendung einzelner Befehle und Konzepte vorweg genommen (z. B. I/O), bevor die Grundlagen systematisch eingeführt werden const else goto return struct void Fundamentale Konzepte (z. B. Adress- und Speicherverwaltung) werden wir mehrfach besprechen Zur Kontrolle des eigenen Lernfortschritts ist v. a. die eigenständige Bearbeitung der Übungsaufgaben nötig In der Vorlesung werden wir den meisten Schlüsselwörtern wieder “begegnen” (nicht allen: z. B. goto nicht, da die Verwendung schnell zu schlechtem Programmierstil “verführt”, ⇒ Edsger Dijkstras Artikel in ACM 3/68: Go To Statement Considered Harmful) Wir wollen das Ziel im Auge behalten daher Schnellkurs aber kein Crash-Kurs Prof. Dr. Jan Dünnweber, Folie 7 von 20 Programmierung 1 Prof. Dr. Jan Dünnweber, Folie 8 von 20 Programmierung 1 Agenda Kurze Historie von C Anfang der siebziger Jahre von Kernighan und Ritchie für UNIX entwickelt Inhalte der Vorlesung 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. Elementare Einführung C Programm Syntax Datentypen, Variablen und Konstanten Operatoren und Ausdrücke, Kontrollstrukturen 1983 wurde die objektorientierte Erweiterung C++ von Bjarne Stroustrup in den Bell Laboratorien entwickelt Viele Sprachen wie z. B. Java, Objective C, Perl, PHP etc. besitzen eine C ähnliche Syntax und sind mit C Kenntnissen leicht zu erlernen: Man muss sich nur noch die objektorientierten Paradigma aneignen Funktionen und Programmstruktur Zeiger, Felder und Strukturen Ein- / Ausgabe und weitere Bibliotheksfunktionen Prof. Dr. Jan Dünnweber, Folie 9 von 20 Programmierung 1 Prof. Dr. Jan Dünnweber, Folie 10 von 20 90s Die wichtigsten Programmiersprachen Java Programmierung 1 Prinzipien der C-Programmierung Ein Programm besteht aus einer Menge von Anweisungen für den Computer Delphi Oberon C++ Ada ML Modula C Prolog Smalltalk Pascal BCPL SIMULA 60s PL360 LISP 50s COBOL Prof. Dr. Jan Dünnweber, Folie 11 von 20 PL/1 ALGOL 68 Basic ALGOL Assembler Programmierung 1 Fortran 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. Jan Dünnweber, Folie 12 von 20 Programmierung 1 Aufbau von C Programmen Primitive Datentypen C-Programme bestehen aus Ausdrücken. (i. e. ;-terminated expressions) Beispiel: int x; /* Eine Variable x wird deklariert */ x = 2 + 3; /* Der Variableninhalt wird als 2+3=5 definiert */ Anweisungen können zu Blöcken zusammengefasst werden, die durch geschweifte Klammern eingeleitet und beendet werden. Beispiel: if(x>4) /* Nur wenn x größer ist als 4 ... */ y = 2; /* ... wird der Block ausgeführt */ Übung: Machen Sie sich anhand der Referenz http://sourceware.org/gdb/current/onlinedocs/gdb mit dem GNU-Debugger vertraut, analysieren Sie einfache Beispiele von http://www.c.happycodings.com Prof. Dr. Jan Dünnweber, Folie 13 von 20 Programmierung 1 Anweisungen und Ausdrücke Bevor eine Variable verwendet wird, muss diese deklariert werden, d. h. Typ und Name werden vereinbart Beispiel: int g; /* g ist eine ganze Zahl */ float r; /* r ist eine rationale Zahl */ char z; /* z ist eine einzelnes Zeichen */ Die Bezeichner (≈ Namen) g, r, z sind willkürlich gewählt Den deklarierten Primitiven wird zur Laufzeit automatisch der entsprechende Speicherplatz zugewiesen Prof. Dr. Jan Dünnweber, Folie 14 von 20 Programmierung 1 Ein erstes Programm Anweisungen (instructions) werden in C zu Ausdrücken (expressions) zusammengefasst Ein Ausdruck wird immer durch ein Semikolon beendet, z. B. zpi = 2 * 3.14; Dieser Ausdruck 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. Jan Dünnweber, Folie 15 von 20 C stellt verschiedene primitive Datentypen bereit, z. B. ganze Zahlen (int), rationale Zahlen (float) und einzelne Zeichen (char) Programmierung 1 Testausgabe auf dem Bildschirm Jedes C Programm besitzt eine main Funktion, die vom Betriebssystem beim Programmstart aufgerufen 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 nicht (return −1 bzw. Fehlercode) #include <stdio.h> int main(int argc, char ∗∗argv) { printf("Studieren ist toll!\n"); return 0; } Prof. Dr. Jan Dünnweber, Folie 16 von 20 /∗ Hello World ∗/ Programmierung 1 Bestandteile des C-“Klassikers” Hello World /∗ Der C Klassiker∗/ #include <stdio.h> /∗ Standard I/O Deklarationen einbinden∗/ /∗ main−Funktion ist der C Einstiegspunkt ∗/ int main(int argc, char ∗∗argv) { /∗ Hello World per Funktion printf ausgeben ∗/ printf("Hello World!\n"); /∗ Das Programm mit return Wert 0 beenden ∗/ return 0; } Die main Funktion gibt die Zeichenkette “Hello Word” mit der Bibliotheksfunktion printf aus Die Funktion printf wird in der Datei stdio.h deklariert und per include Anweisung bekannt gemacht Was haben wir gelernt? Zusammenfassung C ist eine “alte” aber immer noch moderne Programmiersprache C ist den Hochsprachen zuzurechenen, d. h. C muss vor der Ausführung in Assembler übersetzt werden Es gibt wenige Schlüsselwörter aber mächtige Kontrollstrukturen Werkzeuge sind frei verfügbar (www.gnu.org) Der sichere Umgang mit Variablen und Kontrollstrukturen, wie Zuweisungen, Schleifen, Bedingungen usw. erfordern v. a. viel Übung .. Mit /* ... */ werden Kommentare im Quelltext markiert Prof. Dr. Jan Dünnweber, Folie 17 von 20 Programmierung 1 Prof. Dr. Jan Dünnweber, Folie 18 von 20 Programmierung 1