340 likes | 472 Views
Einführung in die Programmiersprache C/C++. “Montag” Andreas Döring doering@inf.fu-berlin.de SS 2004. Organisation. Homepage: www.inf.fu-berlin.de/inst/agbio
E N D
Seminar: "Einführung in C/C++" Einführung in die Programmiersprache C/C++ “Montag” Andreas Döring doering@inf.fu-berlin.de SS 2004
Seminar: "Einführung in C/C++" Organisation • Homepage: www.inf.fu-berlin.de/inst/agbio • Vormittags: 10.00-12.00 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
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.
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
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)
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; • }
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
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> • #define PI 3.141596
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)
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.
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;
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.«
Seminar: "Einführung in C/C++" “Eingebaute” Typen Jede Variable kann nur Werte eines bestimmten Typs speichern. char: Zahlen von 0 bis 255 signedchar: Zahlen von -128 bis 127 shortint: Zahlen von -32768 bis 32767 unsignedshortint: Zahlen von 0 bis 65535 int: Zahlen von -231 bis 231-1 unsigned int: Zahlen von 0 bis 232-1 bool: 0 oder 1
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
Seminar: "Einführung in C/C++" ... und was ist mit Buchstaben? Buchstaben sind ganze Zahlen: 'A' == 65 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...)
Seminar: "Einführung in C/C++" Felder (arrays) Felder = Mehrere Variablen, die im Speicher direkt hintereinander liegen. int X[20]; Ein Feld von 20 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.
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!
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
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.«
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 30000 modulo 256
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;
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
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; ...
Seminar: "Einführung in C/C++" Anweisungen Es gibt (unter anderem) folgende Anweisungen: • if und else • while und do • for • switch-case
Seminar: "Einführung in C/C++" if und else if (TEST) { IFBLOCK } else { ELSEBLOCK }
Seminar: "Einführung in C/C++" while while (TEST) { BLOCK }
Seminar: "Einführung in C/C++" do-while do { BLOCK } while (TEST);
Seminar: "Einführung in C/C++" for for (INIT;TEST;STEP) { BLOCK }
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 break; default: //Code für alle anderen Werte von X }
Seminar: "Einführung in C/C++" Quiz: Was gibt diese Programm aus? int i = 14; for (i = 0; i < 10; ++i); { std::cout << i; }
Seminar: "Einführung in C/C++" Funktionen Definition: Deklaration: int max (int x, int y) { if (x > y) { return x; } return y; } int max (int x, int y);
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);