Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Einführung in die Programmiersprache C/C++

Ähnliche Präsentationen


Präsentation zum Thema: "Einführung in die Programmiersprache C/C++"—  Präsentation transkript:

1 Einführung in die Programmiersprache C/C++
Seminar: "Einführung in C/C++" Einführung in die Programmiersprache C/C++ “Montag” Andreas Döring SS 2004

2 Organisation Homepage: www.inf.fu-berlin.de/inst/agbio
Seminar: "Einführung in C/C++" Organisation Homepage: Vormittags: Uhr Seminar Mo:  Raum 031  (Arnimallee 2-6) Di:  Raum 005  (Takustr. 9) Mi:  Raum 055  (Takustr.9) Do:  Raum 005  (Takustr.9) Nachmittags: Übungen am Rechner Raum 017 (Arnimallee 2-6) Es gibt keine benoteten Scheine Fortsetzung der Veranstaltung: “Hardcore C++” jeweils Freitag 10-12 Literatur Stroustrup, "Die C++ Programmiersprache" (2000), ISBN X, € 49,95 Lippman, Lajoie, "C++" (2002), ISBN , € 25,00 Josuttis, "The C++ Standard Library - A Tutorial and Reference" (2002), ISBN , c.a. € 55,00 Meyers, "Effektiv C++ programmieren" (1997), ISBN , € 29,95 Meyers, "Mehr Effektiv C++ programmieren" (1997), ISBN , € 29, Eine Art "Tipps & Tricks"-Fundgrube Kernighan, Ritchie, "Programmieren in C" (1990), ISBN , € 32, Der Klassiker zu C - nicht zu C++ Links finden sich auf der Veranstaltungshomepage.

3 Warum sind wir hier? Warum überhaupt C/C++? C++ ist schnell.
Seminar: "Einführung in C/C++" Warum sind wir hier? Warum überhaupt C/C++? C++ ist schnell. C++ ist weit verbreitet. C++ verfügt über viele Sprachkonstrukte. C++ erlaubt „maschinennahes“ Programmieren. Ziel des Kurses Die wichtigsten Sprachelemente lernen. Einfache Programme in C++ schreiben. Eventuell werden gewisse grundlegende Programmierkenntnisse vorausgesetzt. Trotz aller gegenteiligen Meldungen sind Programme in C/C++ immer noch deutlich schneller als z.B. vergleichbare Programme in Java. Aber Vorsicht: Schlecht programmiertes C++ kann langsamer sein als gut programmiertes Java. Wenn es nicht auf Geschwindigkeit oder Maschinennähe ankommt, ist eine andere Programmiersprache vielleicht die bessere Wahl. C/C++ hat einen zu großen Sprachumfang, als dass man im Rahmen eines Blockkurses auch nur annähernd eine erschöpfende Beschreibung davon geben könnte. Dafür sei auf die Vorlesung „Fortgeschrittene C++-Programmierung“ im SS04 (jeweils Freitag Uhr) hingewiesen. Die Maschinennähe ist ein Vor- und Nachteil zugleich: Vorteil, weil darin eines der Geheimnisse für die Effizienz von C/C++ ist, Nachteil, weil C/C++ deswegen schwieriger zu handhaben ist.

4 Seminar: "Einführung in C/C++"
Überblick Mo.: “Grundlagen” Compiler-Workflow, Deklarationen, Operatoren, Anweisungen, Funktionen, ... Di.: “Pointermagie” Zeiger, Referenzen, Felder, Speicherverwaltung Mi.: “Klassen” Klassendefinition, Member, Vererbung Do.: “Mehr Klassen” Operatoren, Polymorphie, Standardbibliotheken Einige Sprachelemente, die in diesem Kurs nicht vorkommen: unions templates virtuelle Basisklassen und virtuelle Funktionen exceptions pointer to functions Am 4. Tag geben wir einen groben Überblick, was in den Standardbibliotheken enthalten ist.

5 Die Geschichte von C/C++
Seminar: "Einführung in C/C++" Die Geschichte von C/C++ Was man wissen muss: C/C++ hat eine Geschichte! C++ ist aus C entstanden und (weitgehend) abwärts-kompatibel. Es gibt inzwischen einen Standard. Es gibt noch keinen Compiler, der den Standard vollständig erfüllt (aber alle entwickeln sich in diese Richtung) Für C existiert ein ANSI-C-Standard von 19988/89, dazu auch ein ISO/IEC Standard (9899). Für C++ gibt es den ISO/IEC Standard (14882) „Programming languages – C++“ von 1998. C wurde von Kernighan und Ritchie in den 70ern als Nachfolger für die Programmiersprache „B“ entwickelt. Anfang der 80er erweiterte Stroustrup die Sprache um Klassen gab ihr den Namen „C++“. Da C/C++ nicht auf einen Schlag entwickelt wurde, sondern das Produkt vieler Autoren und einer langjährigen Entwicklung ist, gibt es eine Vielzahl von Sprachkonstrukten, von denen inzwischen jedoch einige „aus der Mode“ gekommen sind. Außerdem hat die Sprache stellenweise mit ihrer Abwärtskompatibilität zu kämpfen.

6 C/C++ Eigenarten Imperative Programmiersprache.
Seminar: "Einführung in C/C++" C/C++ Eigenarten Imperative Programmiersprache. Über 60 reservierte keywords, teilweise mit mehrfacher Bedeutung. Der Quelltext wird durch einen Compiler zu einem lauffähigen Programm übersetzt. „Imperative Programmiersprache“: Es werden Instruktionen nacheinander abgearbeitet. Der Kontrollfluss wird durch Anweisungen gesteuert. C/C++-Programme zu compilieren dauert oft ziemlich lange – an JIT („just in time“) wie bei Java ist nicht zu denken. Das hat u.A. seinen Grund darin, dass C/C++-Compiler oft sehr gute Optimierer anwenden, um den produzierten Code möglichst schnell zu machen.

7 “Hallo Berlin!” Ein einfaches C++-Programm: #include <iostream>
Seminar: "Einführung in C/C++" “Hallo Berlin!” Ein einfaches C++-Programm: Speichern als test.cpp ab und compiliere mit: g++ test.cpp –o test Dann Programm ausführen mit: ./test #include <iostream> int main() { std::cout << "Hallo Berlin!"; return 0; } g++ ist der GNU C++ Compiler, der unter UNIX/LINUX-System weit verbreitet ist. #include ist ein ein Preprocessor-Befehl. Damit wird die Standardbibliothek „iostream“ in den Programmtext eingebunden. Man hätte auch #include ″iostream″ schreiben können, aber es ist üblich, die Namen von Standardbibliotheken in spitzen Klammern anzugeben. main ist der Name der Funktion, die als erstes im Programm aufgerufen wird. C/C++-Programme beginnen immer bei der Funktion main. int ist der Rückgabewert der Funktion main, im Beispiel wird 0 zurückgeliefert. std::cout wird in iostream definiert und ist ein Ausgabe-stream, (also die Konsole, wenn das Programm von der Kommandozeile aus ausgeführt wird). Mit dem Operator << wird der String „Hallo Berlin!“ nach std::cout geschrieben. std ist der Name eines Namespaces. Man beachte, dass Instruktionen mit einem ; abgeschlossen werden.

8 Der Workflow Input: .cpp und .h Dateien. Für jede .cpp Datei:
Seminar: "Einführung in C/C++" Der Workflow Input: .cpp und .h Dateien. Für jede .cpp Datei: Preprocessor: Headerdateien (.h) einfügen. Compiler: Erzeugt .obj Dateien. Linker: Erzeugt .exe Programm aus allen .obj Dateien. Nimmt Stücke aus verwendeten Libraries. Output: .exe Datei Statt .cpp sind auch die Endungen auch .c oder .C üblich. Alternativ zu .h werden auch .hpp oder (im Falle der neuen Standardbibliotheken) gar keine Extension verwendet. .obj Dateien werden von manchen Compilern auch als .o Dateien benannt. Die .h-Dateien heißen „Headerdateien“. Sie dienen dazu, dass die aktuelle .cpp mitbekommt, was in anderen .obj Dateien und in den Libraries an Funktionalität angeboten wird: In Headerdateien stehen Deklarationen (siehe unten).

9 Der Preprocessor Befehle für den Preprocessor beginnen mit #.
Seminar: "Einführung in C/C++" Der Preprocessor Befehle für den Preprocessor beginnen mit #. #include fügt eine Datei in den Quelltext ein. (z.B. eine Headerdatei) #define definiert ein Macro: Das Schlüsselwort wird im ganzen Programm durch den angegebenen Text ersetzt. #include <iostream> Einem #define kann man auch Argumente übergeben. Bsp: #define AUSGABE(a,b) cout << a << “ ist ” << b Nun wird AUSGABE(“meine Lieblingszahl”, 42); in cout << “meine Lieblingszahl” << “ist” << 42; übersetzt. Anmerkung: Es handelt sich um eine einfache Textersetzung. Macros können Texte erzeugen, die andere Macros enthalten, rekursive Macros sind jedoch nicht möglich. Anmerkung: Man verwende #define sparsam: Es gibt in C++ inzwischen deutlich bessere Konstrukte, die #define in den meisten Fällen ersetzen können. #define PI

10 Ein C/C++-Programm ist ein Text
Seminar: "Einführung in C/C++" Ein C/C++-Programm ist ein Text Quelltext ist case-sensitiv. Preprocessor: Befehle enden mit Zeilenumbruch. Compiler: Zeilenumbruch ist whitespace. Ausnahme: Kommentarezeilen beginnen mit // und enden mit dem nächsten Zeilenumbruch. Bsp: return 0; //gib eine 0 zurueck Anweisungen enden mit einem ; -Zeichen. Kein ; steht jedoch... ... hinter Preprocessor-Befehlen ... hinter } -Zeichen (außer bei Klassen und Enums)

11 Deklarationen & Definitionen
Seminar: "Einführung in C/C++" Deklarationen & Definitionen Deklaration von X = Beschreibung, was X ist Definition von X = Deklaration von X + Erzeugung von X Anmerkung: Ein X darf beliebig oft deklariert, aber nur einmal definiert werden. Mit Headerdateien können Symbole, die in einer .cpp definiert worden sind, auch anderen .cpp-Dateien mitgeteilt werden. Die anderen .cpp-Dateien benötigen dazu lediglich die Deklarationen für diese Symbole. Allerdings sollten Headerdateien nur Deklarationen und keine Definitionen enthalten, da sonst jede .cpp Datei ein neues X definieren würde. Spätestens der Linker beschwert sich mit einer Fehlermeldung, wenn ein und das selbe X mehrfach definiert worden sind, selbst wenn die Definitionen miteinander übereinstimmen. Grund: Bei jeder Definition wird ein weiteres X angelegt, und der Linker weiß nicht, welches davon er nehmen soll. Man beachte jedoch, dass durchaus der gleiche Bezeichner jeweils in verschiedenen { }-Blöcken als lokales Symbol definiert werden darf. Auch können die gleichen Bezeichner in unterschiedlichen namespaces jeweils für etwas anderes stehen. Wie Definitionen und Deklarationen im Einzelnen aussehen, wird auf den folgenden Folien beschrieben.

12 Variablen Variablen definieren: int j; float x, y;
Seminar: "Einführung in C/C++" Variablen Variablen definieren: int j; float x, y; Optional sind auch Initialisierungen möglich: int i = 32; float z = 2.781; char c = 'x'; Deklaration von Variablen mit extern: extern int i; Die Zuweisung von Initialisierungswerten ist nur bei Variablendefinitionen, nicht bei bloßen Deklarationen erlaubt.

13 Gültigkeit von Deklarationen
Seminar: "Einführung in C/C++" Gültigkeit von Deklarationen Regel 1: »Ein Symbol ist im Programmtext nur unterhalb seiner Deklaration bekannt.« Regel 2: »Eine Deklaration, die innerhalb eines { } -Blockes steht, gilt auch nur lokal innerhalb dieses Blockes.«

14 Seminar: "Einführung in C/C++"
“Eingebaute” Typen Jede Variable kann nur Werte eines bestimmten Typs speichern. char: Zahlen von 0 bis 255 signed char: Zahlen von -128 bis 127 short int: Zahlen von bis 32767 unsigned short int: Zahlen von 0 bis 65535 int: Zahlen von -231 bis 231-1 unsigned int: Zahlen von 0 bis 232-1 bool: 0 oder 1 Bei 64-bit-Maschinen kann int auch Zahlen von -263 bis und unsigned int Zahlen von 0 bis Dies ist eine Compilereinstellung. Es empfiehlt sich daher, sich nicht darauf zu verlassen, dass int genau 4 byte groß ist. Man kann statt int auch long int und statt unsigned int auch unsigned long int verwenden. Das sind zwar formal andere Typen, doch gewöhnlich passt jeweils das gleiche hinein, jedenfalls bei 32-bit-Maschinen. Näheres regelt der Compilerhersteller. Man kann weiterhin statt char auch unsigned char statt short int auch signed short int und statt int auch signed int. Außerdem kann man kurz short statt short int, unsigend short statt unsigned short int, long statt long int und unsigned long statt unsigned long int schreiben. Alles klar?

15 weitere “eingebaute” Typen
Seminar: "Einführung in C/C++" weitere “eingebaute” Typen Typen zur Speicherung von Kommazahlen: float: Fließkommazahl mit einfacher Genauigkeit double: Fließkommazahl mit doppelter Genauigkeit Ob sich float und double überhaupt voneinander unterscheiden, hängt von der verwendeten Maschine bzw. von dem verwendeten Compiler ab. Einzige Regel: double darf nicht „ungenauer“ als float sein. Typisch sind: float = 4-byte Fließkommazahl, double = 8-byte Fließkommazahl.

16 ... und was ist mit Buchstaben?
Seminar: "Einführung in C/C++" ... und was ist mit Buchstaben? Buchstaben sind ganze Zahlen: 'A' ==  einfache Anführungszeichen für einzelne Zeichen: ASCII-Code Auch Wahrheitswerte sind Zahlen: true == 1 (und alle anderen Zahlen 0) false == 0 (Zeichenketten sind allerdings komplizierter...) Da einzelne Zeichen auch Zahlen sind, kann man sie auch wie Zahlen behandeln: 'A' + 2 == 'C' 'F' < 'T'

17 Seminar: "Einführung in C/C++"
Felder (arrays) Felder = Mehrere Variablen, die im Speicher direkt hintereinander liegen. int X[20];  Ein Feld von int-Variablen int X[3]={2,3,5};  Auch Felder kann man initialisieren. int X[]={1,2,3,4};  Bei initialisierten Feldern kann man sich die Dimension sparen. Felder werden im nächsten Kapitel noch eingehender behandelt.

18 Strings sind Felder In C sind Stings einfach Arrays von char:
Seminar: "Einführung in C/C++" Strings sind Felder In C sind Stings einfach Arrays von char: char X[] = "hallo"; ist das gleiche wie char X[] = {104, 97, 108, 108, 111, 0}; Man beachte die Null am Ende! Mit der 0 wird das Ende des Strings angezeigt. Also Vorsicht: "a" braucht 2 bytes Speicher, während 'a' nur ein byte Speicher braucht. Diese Form der Strings stammen noch aus den frühsten Zeiten von C, inzwischen existiert im Standard eine Stringklasse basic_string, die häufig viel komfortabler zu verwenden ist als einfache C-Strings.

19 Seminar: "Einführung in C/C++"
Zeiger (pointers) Zeiger sind Variablen, deren Inhalt auf andere Variablen verweist. int * X;  Zeiger auf eine int Variable float * Y;  Zeiger auf eine flaot Variable Mit Pointern werden wir uns im nächsten Kapitel noch eingehender beschäftigen.

20 »Variablendefinitionen liest man von innen nach außen.«
Seminar: "Einführung in C/C++" kleine Lesehilfe Faustregel: Bsp: char * X1 [3];  array von pointern char (* X2) [3];  pointer auf array int X3 [10][3];  array von arrays int * const X4;  const pointer auf int int const * X5;  pointer auf const int »Variablendefinitionen liest man von innen nach außen.« const bedeutet, dass die Variable nicht verändert werden kann. Wird das dennoch versucht, so mahnt der Compiler dies als Fehler an.

21 Seminar: "Einführung in C/C++"
Casts Einige Typen werden von C/C++ automatisch als ein anderer Typ interpretiert. Bsp: short s = 30000; int i = s;  Kein Problem. char c = s;  Fehler! Passt nicht! Ein Cast erzwingt eine Uminterpretation: char c = (char) s;  Geht jetzt: c enthält nun modulo 256

22 Zuweisungen Variablen kann man Werte zuweisen: Bsp:
Seminar: "Einführung in C/C++" Zuweisungen Variablen kann man Werte zuweisen: Durch die Initialisierung Durch eine Zuweisung Bsp: int x = 12; // initialisiert x auf 12 x = 13; // setzt den Wert auf 13 int y = x + 1; // initialisiert y auf 14 Allgemein: L-VALUE = R-VALUE; Alle L-Values sind auch R-Values, das umgekehrte gilt nicht.

23 Operatoren Es gibt in C/C++ die üblichen Operatoren. Besonderheiten:
Seminar: "Einführung in C/C++" Operatoren Es gibt in C/C++ die üblichen Operatoren. Besonderheiten: Test auf Gleichheit ist == (und nicht etwa =) Test auf Ungleichheit ist != & und | stehen für bitweise UND bzw. ODER, && und || logisches UND bzw. ODER sind ~ steht für bitweises NOT, ! steht für logisches NOT Vorsicht: Die Zeichen * und [ ], die bei der Deklaration/Definition von Variablen benutzt werden, finden ebenfalls als Operatoren Verwendung, bedeuten dann aber natürlich etwas anderes.

24 ...noch mehr Operatoren Increment und Decrement: Zuweisungsoperatoren:
Seminar: "Einführung in C/C++" ...noch mehr Operatoren Increment und Decrement: ++X;  X = X + 1; --X;  X = X - 1; Zuweisungsoperatoren: z.B: X += 20;  X = X + 20; X -= 12;  X = X - 12; X *= Y;  X = X * Y; X /= 2;  X = X / 12; X <<= 1;  X = X << 1; ... Beispiele: int x, y; // definiert zwei Variablen x und y x = 12; // weist x eine 12 zu x += 4; // jetzt ist x == 16 y = ++x; // jetzt ist y und x sind == 17 y = x>>2; // jetzt ist y == 4 x = y | 1; // jetzt ist x == 5 (binäres oder) y = y && 15; // jetzt ist x == 1 (logisches und, 1 ist true)

25 Anweisungen Es gibt (unter anderem) folgende Anweisungen: if und else
Seminar: "Einführung in C/C++" Anweisungen Es gibt (unter anderem) folgende Anweisungen: if und else while und do for switch-case

26 if und else if (TEST) { IFBLOCK } else ELSEBLOCK
Seminar: "Einführung in C/C++" if und else if (TEST) { IFBLOCK } else ELSEBLOCK Wenn im IFBLOCK nur eine einzelne Anweisung steht, kann man die geschweiften Klammern { } auch weglassen. Das gleiche gilt auch für den ELSEBLOCK und alle anderen Anweisungsblöcke.

27 Seminar: "Einführung in C/C++"
while while (TEST) { BLOCK }

28 Seminar: "Einführung in C/C++"
do-while do { BLOCK } while (TEST);

29 Seminar: "Einführung in C/C++"
for for (INIT;TEST;STEP) { BLOCK }

30 switch-case switch (X) { case 1: case 2: //Code für X==1 und X==2
Seminar: "Einführung in C/C++" switch-case switch (X) { case 1: case 2: //Code für X==1 und X==2 break; case 3: //Code für X==3 default: //Code für alle anderen Werte von X } Wenn man das break weglässt, dann läuft das Programm in den nächsten case mit hinein. Bsp: switch (X) { case 10: //Code für X==10 case 13: //Code für X==10 und X==13 }

31 Quiz: Was gibt diese Programm aus?
Seminar: "Einführung in C/C++" Quiz: Was gibt diese Programm aus? int i = 14; for (i = 0; i < 10; ++i); { std::cout << i; } Antwort: Das Programm gibt „10“ aus. Grund: Die for-Anweisung endet mit einem Semikolon, darum tut sie nichts weiter als i bis 10 hochzuzählen. Im anschließenden { }-Block wird dann i einmal ausgegeben.

32 Funktionen Definition: Deklaration: int max (int x, int y) {
Seminar: "Einführung in C/C++" Funktionen Definition: Deklaration: int max (int x, int y) { if (x > y) return x; } return y; Wie oben bereits angemerkt, beginnt das Programm immer mit der Funktion main(). Mit return werden Werte zurück gegeben. Formale Parameter (im Beispiel x und y) sind lokale Variablen im {}-Block der Funktion. C/C++- Funktionen sind re-entrant: Bei jedem Funktionsaufruf wird ein neuer Satz lokaler Variablen erzeugt. int max (int x, int y);

33 ...nochmal Funktionen Funktionen ohne Rückgabewert: Funktionsaufruf:
Seminar: "Einführung in C/C++" ...nochmal Funktionen Funktionen ohne Rückgabewert: Funktionsaufruf: Argumente werden by value übergeben. void print (int x) { std::cout << x; } int y = max(1, 2); print (y); Funktionen ohne Rückgabewert kann man mit der Anweisung return; verlassen. Funktionsargumente werden in C/C++ immer by value übergeben, d.h. die formalen Parameter werden mit Kopien der Aufrufsargumente gefüttert. Es gibt jedoch in C++ einen Referenztyp, mit dem sich Argumentübergaben by reference realisieren lassen. Außerdem kann man sich stets auch damit behelfen, dass man statt einer Variablen X einen pointer auf X übergibt. Anmerkung: eine Variable kann nicht vom Typ void sein, aber Variablen vom Typ void * sind erlaubt.

34 (Notizseite) Seminar: "Einführung in C/C++" Aufgaben zum Montag:
Besorgen Sie sich Anna Egorovas kleines C++-Programm von der Veranstaltungshomepage (unter „Teaching“). Wenn Sie zum Programmieren Microsoft Visual Studio (.NET 2003) verwenden wollen, so liegen für Sie im ZIP-Archiv auch schon die notwendigen Projektdateien bereit. Bringen Sie das Programm zum laufen. Modifizieren Sie dann den Programmcode und spielen ein wenig mit den Möglichkeiten. 2. Aufgabe: Fügen Sie ihrem Projekt eine weitere .cpp- und eine header-Datei (.h) hinzu. Definieren Sie eine Funktion in der neuen .cpp Datei und rufen Sie diese von der main-Funktion aus auf. Machen Sie das gleiche mit einer Variablen. Was würde passiert, wenn Sie in der neuen .cpp-Datei eine weitere main-Funktion definieren würden? 3. Aufgabe: Finden Sie durch ein geeignetes kleines Programm heraus, in welcher Reihenfolge die Argumente bei einem Funktionsaufruf ausgewertet werden. 4. Aufgabe: Programmieren Sie einen kleinen Taschenrechner mit verschiedenen Operationen. Benutzen Sie std::cin und std::cout für die Ein- und Ausgabe. 5. Aufgabe: Schreiben Sie ein Programm, das mit std::cin eine Zahl X einliest und anschließend die X-te Fibonacci-Zahl fib(X) ausgibt. Dabei ist fib(i) wie folgt definiert: fib(0) = fib(1) = 1 fib(i+2) = fib(i+1) + fib(i), für i aus {0, 1, 2, ...} Wettbewerb: „Selbstreproduzierender Code“ Schreiben Sie ein möglichst kurzes Programm, das seinen eigenen Quellcode ausgibt. Dabei ist es nicht gestattet, den Quellcode aus einer Datei auszulesen. Gewonnen hat, wer bis Mittwoch das kürzeste Programm (Länge gemessen in Zeichen) abliefert. Der Sieger bekommt am Donnerstag als Preis eine Tafel Schokolade überreicht.


Herunterladen ppt "Einführung in die Programmiersprache C/C++"

Ähnliche Präsentationen


Google-Anzeigen