Fachhochschule Frankfurt am Main FB 2 Fachhochschule Frankfurt am Main FB 2 Höhere Programmiersprache SS 2008 Modul 12: Höhere Programmiersprache SS 2008 Vorlesung 2: Programmieren mit C Fachhochschule Frankfurt am Main FB 2 Modul 12: Höhere Programmiersprache SS 2008 URL zur Lehrveranstaltung http://www.fbmnd.fh-frankfurt.de/~raimann • Dr. J. Raimann Folien zur Vorlesung, Übungsaufgaben, ... 1 Fachhochschule Frankfurt am Main FB 2 Fachhochschule Frankfurt am Main FB 2 Höhere Programmiersprache SS 2008 Modul 12: Höhere Programmiersprache SS 2008 Dev C++ • Kostenlose C/C++-Entwicklungsumgebung • Download der aktuellen Version unter folgender URL http://prdownloads.sourceforge.net/dev-cpp/devcpp-4.9.9.2_setup.exe -> anschließend muss ein Mirror-Server für den Download ausgewählt werden (z.B. Düsseldorf) • siehe auch Website des Herstellers: http://www. bloodshed.net • Es können auch andere Entwicklungsumgebungen verwendet werden, wie z.B. • MS Visual C++ (Express Edition) http:// www.microsoft.com/germany/express/product /visualcplusplusexpress.aspx Fachhochschule Frankfurt am Main FB 2 Modul 12: Höhere Programmiersprache SS 2008 Literatur • Die Programmiersprache C, hrsg. von RRZN, Universität Hannover, KFA (erhältlich bei H. Ünsal (Geb. 1, Raum 348), Kosten: 4,00 €) Siehe dazu auch: http://www.fh-frankfurt.de/de/ fh_ffm/verwaltung_einrichtungen / abteilungen/ rechenzentrum/arbeitsbereiche/it_service_centre/rrzn_handbuecher .html • Brian W. Kernighan/ Dennis M. Ritchie: "Programmieren in C", Hanser/Prentice Hall, 1990 • J. Goll/U. Bröckl/M. Dausmann: C als erste Programmiersprache, Vom Einsteiger zum Profi, 4. Aufl., Teubner, 2003 • H. Erlenkötter/V. Reher: Programmiersprache C: eine strukturierte Einführung, rororo Taschenbuch Im Internet • J. Wolf: C von A bis Z, - Das umfassende Handbuch für Linux, Unix und Windows; 2. aktualisierte und erweiterte Auflage 2006, zu finden unter http://www.galileocomputing.de/openbook/c_von_a_bis_z/ • Diverse C-Einführungen im WWW Dr. J. Raimann 2 Fachhochschule Frankfurt am Main FB 2 Fachhochschule Frankfurt am Main FB 2 Höhere Programmiersprache SS 2008 Modul 12: Höhere Programmiersprache SS 2008 "The only way to learn a new programming language is by writing programs in it" Brian W. Kernighan/Dennis M. Ritchie: The C Programming Language, 1978 Fachhochschule Frankfurt am Main FB 2 Modul 12: Höhere Programmiersprache SS 2008 Unterscheidung der Programmiersprachen • Maschinensprache (binäre Zeichenfolgen) • Maschinennahe Sprache (Assembler, mit mnemotechnischen Abkürzungen für die Binärfolgen) • Höhere Programmiersprachen, z.B. • Fortran, 1957 • Cobol, 1960 • Algol, 1960 • Basic, 1965 • PL/1, 1967 • Pascal, 1974 • C, ab 1972 • Ada, 1979 • Java, 1995 Dr. J. Raimann 3 Fachhochschule Frankfurt am Main FB 2 Höhere Programmiersprache SS 2008 Fachhochschule Frankfurt am Main FB 2 Modul 12: Höhere Programmiersprache SS 2008 Schematischer Ablauf der Problemlösung mit dem Computer Problem/ Aufgabenstellung Nachdenken Algorithmus Programmieren Programm in höherer Progr.sprache Übersetzen Programm in Maschinensprache Programmlauf Problemlösung Fachhochschule Frankfurt am Main FB 2 Modul 12: Höhere Programmiersprache SS 2008 Von der Idee zum Programm Summe zweier natürlicher Zahlen a und b Festlegung Algorithmus: Computer lateinisch „computare“, soviel wie „rechnen“ c=a+b IDE = Quelldatei (Source-File) erstellt mit Editor Integrated Development Environment Übersetzerprogramm (Compiler) Assembler / Maschinensprache LOAD a,%r0 LOAD b,%r1 Linker (Verbindung von fertigen Objekten) ADD %r0,%r1 STORE %r1,c Software Dr. J. Raimann 4 Fachhochschule Frankfurt am Main FB 2 Höhere Programmiersprache SS 2008 Fachhochschule Frankfurt am Main FB 2 Modul 12: Höhere Programmiersprache SS 2008 Editieren – Kompilieren – Linken • Programmieren bedeutet einen Algorithmus in einer definierten Sprache zu beschreiben -> Editieren • Geschriebene Programme müssen vor der Ausführung kompiliert, d.h. in Maschinensprache übersetzt werden (Compiler). • Zusätzlich werden häufig schon vorhandene Funktionen aus Funktionsbibliotheken in das Programm eingebunden (Linker). • Das Ergebnis des Linkens und Kompilierens ist eine .EXE-Datei in Maschinensprache, die vom Prozessor abgearbeitet werden kann Fachhochschule Frankfurt am Main FB 2 Modul 12: Höhere Programmiersprache SS 2008 Hilfsmittel zur Beschreibung von Algorithmen • Umgangssprache • • • • Pseudocode Programmablaufplan Datenflußplan Struktogramm Einlesen X Einlesen Y Wenn X > Y Dann Z = X Sonst Z = Y Ausgabe Z Der Motor M läuft solange die Tasten A und B gedrückt werden. Dr. J. Raimann 5 Fachhochschule Frankfurt am Main FB 2 Fachhochschule Frankfurt am Main FB 2 Höhere Programmiersprache SS 2008 Modul 12: Höhere Programmiersprache SS 2008 Geschichte der Programmiersprache C (1) • 1972 bis 1978: D. M. Ritchie, K.Thompson und B. W. Kernighan (Bell Laboratories der Fa. AT & T) entwickeln die Programmiersprache C parallel zu dem Betriebssystem Unix, dessen wesentliche Teile in C geschrieben sind • Zielsetzung: eine höhere Programmiersprache zu entwickeln, mit der das Betriebssystem UNIX neu geschrieben und auf andere Rechnertypen portiert werden konnte • C sollte die strukturierte Programmierung unterstützen und dennoch so schnell wie Assembler sein Fachhochschule Frankfurt am Main FB 2 Modul 12: Höhere Programmiersprache SS 2008 Geschichte der Programmiersprache C (2) • Von ALGOL wurde die Möglichkeit der strukturierten Programmierung für C übernommen. Hinsichtlich des Zeigerkonzepts besteht eine gewisse Ähnlichkeit mit der von N. Wirth entwickelten Programmiersprache Pascal. • 1989: Standardisierung durch ANSI • ab 1980: C++ als objektorientierte Erweiterung von C (B. Stroustrup) Dr. J. Raimann 6 Fachhochschule Frankfurt am Main FB 2 Fachhochschule Frankfurt am Main FB 2 Höhere Programmiersprache SS 2008 Modul 12: Höhere Programmiersprache SS 2008 Vorteile von C • universell einsetzbar • maschinennäher als die meisten anderen höheren Programmiersprachen -> kompakte und schnelle Codes • Nachteile von ASSEMBLER-Sprachen wurden vermieden • Gute, schnelle und auch kostenfreie Compiler erhältlich • Klar definierter Sprachstandard, weitgehend unabhängig von speziellen Hardware-Konfigurationen und Betriebssystemen. C-Programme sind daher in hohem Maße portabel. • Große Anzahl von Operatoren ermöglicht eine effiziente und kompakte Programmierung • C erzwingt eine strukturierte Programmierung • C enthält verhältnismäßig wenig Sprachelemente • Umfangreiche Bibliotheken mit Standard-Funktionen verfügbar Fachhochschule Frankfurt am Main FB 2 Modul 12: Höhere Programmiersprache SS 2008 Nachteile von C • C-Programme sind oft schwer lesbar • C verführt zu trickreichem und undurchsichtigem Programmieren • Es gibt in C viele Fallen (insbesondere im Zusammenhang mit Zeigern), die zu unvorhergesehenen Nebenwirkungen und Fehlem führen können, ohne dass der Compiler durch eine Fehlermeldung oder Warnung darauf aufmerksam machen würde. • Viele Fehler, z.B. Bereichsüberschreitungen bei der Indizierung von Arrays, werden nicht vom Compiler abgefangen • Fehlende strenge Typisierung von C ist nachteilig (strenge Typisierung heißt: für einen definierten Datentyp sind nur definierte Operationen zulässig) Dr. J. Raimann 7 Fachhochschule Frankfurt am Main FB 2 Höhere Programmiersprache SS 2008 Fachhochschule Frankfurt am Main FB 2 Modul 12: Höhere Programmiersprache SS 2008 Erstes C-Programm: Hello, World #include <stdio.h> /* Erstes C-Programm */ #include <stdlib.h> int main (void) { printf ("HELLO, WORLD\n") ; system("PAUSE"); return 0 ; } Fachhochschule Frankfurt am Main FB 2 Modul 12: Höhere Programmiersprache SS 2008 Grundlegende Eigenschaften und Elemente von C • Programmtext wird formatfrei eingegeben • Programmzeilen werden mit Semikolon ; abgeschlossen • Kommentare werden in /* ... */ eingeschlossen • mit # beginnende Anweisungen sind sogenannte PräprozessorAnweisungen • der Funktionskörper wird durch geschweifte Klammern { } begrenzt • Die Funktion main, die jedes C-Programm besitzen muss, stellt das Hauptprogramm dar • Mit return kann ein Wert an das aufrufende Programm zurückgegeben werden • \n ist eine sogenannte ESC-Sequenz, die einen Zeilenvorschub erzeugt Dr. J. Raimann 8 Fachhochschule Frankfurt am Main FB 2 Fachhochschule Frankfurt am Main FB 2 Höhere Programmiersprache SS 2008 Modul 12: Höhere Programmiersprache SS 2008 Grundlegende Eigenschaften und Elemente von C • keine Unterscheidung von Funktionen und Prozeduren • Unterscheidung von Groß-/Kleinschreibung • Namen (Bezeichner) können Ziffern, Buchstaben und den Unterstrich _ enthalten, wobei jedoch das erste Zeichen keine Ziffer sein darf. Zwischen Klein- und Großbuchstaben wird unterschieden. Namen dürfen keine Schlüsselwörter enthalten, da diese als Sprachbestandteile von C eine vordefinierte Bedeutung haben. • C-Schlüsselwörter werden klein geschrieben • der Befehl system ("PAUSE"); bewirkt, dass das Ausgabefenster bis zum Drücken einer Taste stehen bleibt. Um system verwenden zu können muss die Library stdlib.h in das Programm eingebunden werden Fachhochschule Frankfurt am Main FB 2 Modul 12: Höhere Programmiersprache SS 2008 Die Ausgabe-Funktion printf (formatierte Ausgabe) #include <stdio.h> #include <stdlib.h> main() { printf("Der Befehl printf kann "); printf("nicht nur Texte ausgeben \n"); printf("sondern auch rechnen:\n\n"); printf("Das Produkt von 13 * 7 ist %i \n", 13 * 7); system("PAUSE"); } %i = Formatangabe, fungiert als Platzhalter; der Wert von 13*7 wird hier eingesetzt und als Zahl formatiert ausgegeben Dr. J. Raimann \n = Escape-Sequenz -> Zeilenendezeichen (newline) 9 Fachhochschule Frankfurt am Main FB 2 Höhere Programmiersprache SS 2008 Fachhochschule Frankfurt am Main FB 2 Modul 12: Höhere Programmiersprache SS 2008 Ausgabe mit printf • Prototyp/Funktion ist definiert in stdio.h • Wichtige Formatanweisungen in Zeichenketten (Escape-Sequenzen): Fachhochschule Frankfurt am Main FB 2 Modul 12: Höhere Programmiersprache SS 2008 C – Schlüsselwörter (1) • auto • break Speicherklassenbezeichner Zum Herausspringen aus Schleifen oder der switch-Anweisung • case Auswahl-Fall in switch-Anweisung • char Typ-Bezeichner • const Attribut für Typangabe • continue Fortsetzungsanweisung • default Standardeinsprungmarke in switchAnweisung • do Teil einer Schleifen-Anweisung • double Typ-Bezeichner • else Dr. J. Raimann Teil einer Einfach- oder Mehrfachalternative 10 Fachhochschule Frankfurt am Main FB 2 Fachhochschule Frankfurt am Main FB 2 Höhere Programmiersprache SS 2008 Modul 12: Höhere Programmiersprache SS 2008 C – Schlüsselwörter (2) • enum Aufzählungstyp-Bezeichner • extern Speicherklassenbezeichner • float Typ-Bezeichner • for Schleifenanweisung • goto Sprunganweisung • if Teil einer Alternative oder bedingten Anweisung • int Typ-Bezeichner • long Typ-Modifizierer bzw. Typ-Bezeichner • register Speicherklassen-Bezeichner • return Rücksprung-Anweisung • short Typ-Modifizierer bzw. Typ-Bezeichner Fachhochschule Frankfurt am Main FB 2 Modul 12: Höhere Programmiersprache SS 2008 C – Schlüsselwörter (3) • signed Typ-Modifizierer bzw. Typ-Bezeichner • sizeof Operator zur Bestimmung der Größe von Variablen Dr. J. Raimann • static Speicherklassenbezeichner • struct Strukturvereinbarung • switch Auswahlanweisung • typedef Typnamenvereinbarung • union Datenstruktur mit Alternativen • unsigned Typ-Modifizierer bzw. Typ-Bezeichner • void Typ-Bezeichner • volatile Attribut für Typangabe • while Schleifenanweisung 11