Grundelemente der C++ Programmierung
Transcription
Grundelemente der C++ Programmierung
1 2 Grundelemente der C++ Programmierung 2006 Pearson Education, Inc. All rights reserved. 2 2.1 Einführung 2.2 Erstes Programm in C++: Eine Zeile Text ausgeben 2.3 Varianten des ersten C++ Programms 2.4 Zweites C++ Programm: Ganze Zahlen addieren 2.5 Speicherkonzepte 2.6 Arithmetik 2.7 Fallunterscheidungen: Vergleichsoperatoren 2006 Pearson Education, Inc. All rights reserved. 3 2.1 Einführung • C++ Programmierung – Vier einführende Beispiele zeigen • Wie Meldungen ausgegeben werden • Wie Informationen vom Nutzer erhalten werden • Wie arithmetische Berechnungen durchgeführt werden • Wie Entscheidungen getroffen werden 2006 Pearson Education, Inc. All rights reserved. 2.2 Erstes Programm in C++: Eine Zeile Text ausgeben 4 • Einfaches Programm – Gibt eine Zeile Text aus – Illustriert eine Reihe von wichtigen Eigenschaften von C++ 2006 Pearson Education, Inc. All rights reserved. 1 // Fig. 2.1: fig02_01.cpp 2 // Text-printing program. 3 #include <iostream> // allows program to output data to the screen Outline 5 4 5 // function main begins program execution 6 int main() 7 { 8 fig02_01.cpp (1 von 1) std::cout << "Welcome to C++!\n"; // display message 9 10 return 0; // indicate that program ended successfully 11 12 } // end function main Welcome to C++! 2006 Pearson Education, Inc. All rights reserved. 2.2 Erstes Programm in C++: Eine Zeile Text ausgeben 6 • Kommentare – Erläutern das Programm anderen Programmierern • Verbessern die Lesbarkeit des Programms – Werden vom Compiler ignoriert – Einzeilenkommentare • Beginnen mit // • Beispiel // This is a text-printing program. – Mehrzeilenkommentare • Beginnen mit /* • Enden mit */ 2006 Pearson Education, Inc. All rights reserved. 7 Praxis-Tipp Jedes Programm sollte mit einem Kommentar beginnen, der den Zweck des Programms angibt, außerdem den Autor, das Datum und eine Versionsbezeichnung. (Im Rahmen dieser Folien wird aus Gründen der Übersichtlichkeit auf die Angabe von Autor, Datum und Versionsbezeichnung verzichtet.) 2006 Pearson Education, Inc. All rights reserved. 2.2 Erstes Programm in C++: Eine Zeile Text ausgeben 8 • Präprozessor Direktiven – Steuern i.w. textliche Ersetzungen und Ergänzungen – Werden vor der Compilierung vom Präprozessor verarbeitet – Beginnen mit # – Beispiel #include <iostream> – Veranlasst den Präprozessor, die Headerdatei <iostream> für Ein- und Ausgabestrom einzuschließen. 2006 Pearson Education, Inc. All rights reserved. 9 Häufiger Programmierfehler Wenn man vergisst, die <iostream> Headerdatei in ein Programm einzuschließen, das Daten von der Tastatur einliest oder an den Bildschirm ausgibt, meldet der Compiler einen Fehler. Der Compiler kann in solchen Fällen eine Bezugnahme auf Komponenten des Ein-/Ausgabestroms (z.B. std::cout) nicht erkennen. 2006 Pearson Education, Inc. All rights reserved. 2.2 Erstes Programm in C++: Eine Zeile Text ausgeben 10 • Leerraumzeichen (‘White space’) – Leere Zeilen, Leerzeichen und Tabulatoren – Eingesetzt, um Programme besser lesbar zu machen – Werden vom Compiler ignoriert 2006 Pearson Education, Inc. All rights reserved. 11 Praxis-Tipp Leere Zeilen und Leerzeichen sollten zur Verbesserung der Lesbarkeit eines Programms eingesetzt werden. 2006 Pearson Education, Inc. All rights reserved. 2.2 Erstes Programm in C++: Eine Zeile Text ausgeben 12 • Funktion main – Teil jedes C++ Programms • Genau eine Funktion jedes Programms muss main heißen. – Gibt einen Wert vom Typ einer ganzen Zahl (einen ‘integer’) zurück • Beispiel int main() – Der Funktionskörper wird in geschweifte Klammern ({}) eingeschlossen. • Anweisungen (‘statements’) – Weisen das Programm an, eine Aktion auszuführen – Alle Anweisungen enden mit einem Semikolon (;). 2006 Pearson Education, Inc. All rights reserved. 2.2 Erstes Programm in C++: Eine Zeile Text ausgeben 13 • Namensbereich (namespace) std:: • Gibt an, dass ein Name benutzt wird, der zum Namensbereich std gehört • Ein Namensbereich kann durch eine using Direktive für ein ganzes Programm angegeben werden (s. Abschnitt 2.7). • Standard Ausgabestrom-Objekt std::cout • Ist mit dem Bildschirm ‘verbunden’ • Ist in der Ein-/Ausgabestrom Headerdatei <iostream> definiert 2006 Pearson Education, Inc. All rights reserved. 2.2 Erstes Programm in C++: Eine Zeile Text ausgeben 14 • Ausgabeoperator << – Der rechte Operand wird in den linken Operanden eingefügt, d.h. hier: der rechte Operand wird ausgegeben. – Beispiel std::cout << "Hello"; – Die Zeichenkette "Hello" wird in den Standardausgabestrom eingefügt, d.h. auf dem Bildschirm dargestellt. • Escape Zeichen – Ein Zeichen, dem ein "\" (Backslash) vorangestellt ist • Zeigt die Ausgabe eines ‘speziellen’ Zeichens an – Beispiel "\n" – Der Cursor wird zum Anfang der nächsten Zeile bewegt. 2006 Pearson Education, Inc. All rights reserved. 15 Escapesequenz Beschreibung \n Zeilenwechsel. Positioniert den Cursor am Anfang der nächsten Zeile. \t Horizontaler Tabulator. Bewegt den Cursor zum nächsten Tabulator-Stopp. \r Wagenrücklauf. Positioniert den Cursor am Anfang der aktuellen Zeile; wechselt dabei nicht zur nächsten Zeile. \a Alarm. Gibt ein Signal auf den Systemlautsprecher. \\ ‘Backslash’. Benutzt zur Ausgabe dieses Zeichens. \' Einfaches Anführungszeichen. Benutzt zur Ausgabe dieses Zeichens. \" Doppeltes Anführungszeichen. Benutzt zur Ausgabe dieses Zeichens. Fig. 2.2 | Escapesequenzen. 2006 Pearson Education, Inc. All rights reserved. 16 Praxis-Tipp Viele Programmierer nehmen als letztes Zeichen, das von einer Funktion ausgegeben wird, das newline-Zeichen (\n). Das stellt sicher, dass die Funktion den Bildschirmcursor am Beginn einer neuen Zeile hinterlässt. Konventionen dieser Art unterstützen die Wiederverwendung von Software - ein Hauptziel der Softwareentwicklung. 2006 Pearson Education, Inc. All rights reserved. 17 Häufiger Programmierfehler Weglassen des Semikolons am Ende einer C++ Anweisung ist ein Syntaxfehler. (Präprozessordirektiven enden nicht mit einem Semikolon.) Die Syntax einer Programmiersprache legt die Regeln für die Erzeugung eines gültigen Programms in dieser Sprache fest. Ein Syntaxfehler tritt auf, wenn der Compiler Code vorfindet, der die Sprachregeln von C++ verletzt. Der Compiler gibt eine Fehlermeldung als Hilfe für den Programmierer aus, um den fehlerhaften Code zu finden und zu korrigieren. 2006 Pearson Education, Inc. All rights reserved. 18 Häufiger Programmierfehler Syntaxfehler werden auch Compilerfehler, Übersetzungsfehler oder Fehler zur Übersetzungszeit genannt, weil der Compiler sie während der Übersetzungsphase aufdeckt. Eine Ausführung des Programms ist unmöglich, solange nicht alle Syntaxfehler korrigiert sind. 2006 Pearson Education, Inc. All rights reserved. 2.2 Erstes Programm in C++: Eine Zeile Text ausgeben 19 •return Anweisung – Eine von verschiedenen Möglichkeiten, um eine Funktion zu beenden – Wird return am Ende von main eingesetzt, zeigt der Wert 0 eine erfolgreiche Beendigung des Programms an. – Beispiel: return 0; – main ist die einzige Funktion, bei der die return Anweisung weggelassen werden darf, obwohl ein Rückgabetyp (int) für main erklärt wurde. – Der Compiler ergänzt in diesem Fall automatisch die Anweisung return 0; 2006 Pearson Education, Inc. All rights reserved. 20 Portabilitäts-Tipp Im C++-Standard ist für main der Rückgabetyp int festgelegt. Ein Rückgabetyp void ist nicht standardkonform und führt bei manchen C++Compilern (nicht bei MS Visual C++) zu einer Fehlermeldung. Ein Rückgabetyp void für main sollte deshalb nicht verwendet werden. Bei Verwendung des standardkonformen Rückgabetyps int ist es jedoch erlaubt, im Fall von main die sonst ( d.h. in allen anderen Funktionen) erforderliche return Anweisung wegzulassen. 2006 Pearson Education, Inc. All rights reserved. 21 Praxis-Tipp Der komplette Funktionskörper jeder Funktion sollte um eine Ebene (z.B. drei Leerstellen) innerhalb der umschließenden Klammern eingerückt werden. Das verdeutlicht die Struktur eines Programms und macht das Programm besser lesbar. 2006 Pearson Education, Inc. All rights reserved. 22 Praxis-Tipp Die Breite für eine Einrückungsebene sollte einmal festgelegt und dann einheitlich angewendet werden. Die Einrückung kann durch die Tabulatortaste erfolgen, dabei ist jedoch zu beachten, dass Tabulatorstopps in verschiedenen Anwendungen unterschiedlich sind. Besser ist es, z.B. drei Leerstellen für eine Einrückungsebene zu benutzen. Dies kann in den meisten Entwicklungsumgebungen (auch MS Visual C++) so eingestellt werden. 2006 Pearson Education, Inc. All rights reserved. 23 2.3 Varianten des ersten C++ Programms • Zwei Beispiele – Text in eine einzige Zeile durch mehrere Anweisungen ausgeben (Fig. 2.3) • Jede Ausgabe wird an genau der Stelle fortgesetzt, an der die vorherige aufgehört hat. – Text in mehrere Zeilen durch eine einzige Anweisung ausgeben (Fig. 2.4) • Jede Escapesequenz ‘Zeilenwechsel (\n)’ positioniert den Cursor an den Anfang der nächsten Zeile • Zwei aufeinanderfolgende Zeilenwechsel (\n\n) geben eine Leerzeile aus. 2006 Pearson Education, Inc. All rights reserved. 1 // Fig. 2.3: fig02_03.cpp 2 // Printing a line of text with multiple statements. 3 #include <iostream> // allows program to output data to the screen Outline 24 4 5 // function main begins program execution 6 int main() 7 { 8 std::cout << "Welcome "; 9 std::cout << "to C++!\n"; 10 } // end function main fig02_03.cpp Mehrere Ausgabeanweisungen ergeben eine Zeile Ausgabe (1 von 1) Welcome to C++! 2006 Pearson Education, Inc. All rights reserved. 1 // Fig. 2.4: fig02_04.cpp 2 // Printing multiple lines of text with a single statement. 3 #include <iostream> // allows program to output data to the screen 4 5 // function main begins program execution 6 int main() 7 { 8 9 std::cout << "Welcome\nto\n\nC++!\n"; Verwendet ZeilenwechselZeichen, um in mehrere Zeilen auszugeben Outline 25 fig02_04.cpp (1 von 1) } // end function main Welcome to C++! 2006 Pearson Education, Inc. All rights reserved. 2.4 Zweites C++ Programm: Ganze Zahlen addieren 26 • Variablen – Namen von Speicherplätzen, in denen Werte abgespeichert werden – Gebräuchliche Datentypen (‘fundamental’, ‘primitiv’ oder ‘eingebaut’) • int – ganze Zahlen • char – Zeichen • double – Zahlen mit Nachkommastellen – Variablen müssen mit Typ und Namen definiert werden, bevor sie benutzt werden können: int integer1; int integer2; int sum; 2006 Pearson Education, Inc. All rights reserved. 1 // Fig. 2.5: fig02_05.cpp 2 3 // Addition program that displays the sum of two numbers. #include <iostream> // allows program to perform input and output Outline 27 4 5 // function main begins program execution 6 int main() 7 { Definition von ganzzahligen Variablen 8 // variable declarations 9 int number1; // first integer to add 10 int number2; // second integer to add 11 int sum; // sum of number1 and number2 12 fig02_05.cpp Nutzt den Eingabeoperator mit dem Standardeingabestrom für Nutzereingabe 13 std::cout << "Enter first integer: "; // prompt user for data 14 15 std::cin >> number1; // read first integer from user into number1 16 std::cout << "Enter second integer: "; // prompt user for data 17 std::cin >> number2; // read second integer from user into number2 (1 von 1) 18 19 sum = number1 + number2; // add the numbers; store result in sum 20 21 std::cout << "Sum is " << sum << std::endl; // display sum; end line 22 } // end function main Enter first integer: 45 Enter second integer: 72 Sum is 117 Strommanipulator std::endl gibt einen Zeilenwechsel aus und leert den Ausgabepuffer Verketten oder Kaskadieren von Ausgabeoperationen 2006 Pearson Education, Inc. All rights reserved. 2.4 Zweites C++ Programm: Ganze Zahlen addieren 28 • Variablen – Mehrere Variablen des gleichen Typs können in einer einzigen Anweisung definiert werden. • Liste mit Kommas als Trennzeichen: int number1, number2, sum; – Variablennamen • Gültige Bezeichner – Folge von Zeichen (Buchstaben, Ziffern, Unterstriche) – Dürfen nicht mit einer Ziffer beginnen – Unterscheiden zwischen Groß- und Kleinschreibung (‘Case sensitive’) 2006 Pearson Education, Inc. All rights reserved. 29 Praxis-Tipp Nach jedem Komma (,) sollte ein Leerzeichen gesetzt werden. Dies verbessert die Lesbarkeit von Programmen. Viele Programmierer ziehen es vor, jede Variable in einer eigenen Zeile zu deklarieren. Dies erlaubt auch, bei Bedarf einen erklärenden Kommentar zu der Variablen in den Rest der Zeile zu schreiben. 2006 Pearson Education, Inc. All rights reserved. 30 Portabilitäts-Tipp C++ erlaubt Bezeichner beliebiger Länge, aber die C++ Implementierungen begrenzen die Länge der Bezeichner. Benutzt man Bezeichner mit maximal 31 Zeichen, sollte die Portabilität sichergestellt sein. 2006 Pearson Education, Inc. All rights reserved. 31 Praxis-Tipp Bezeichner müssen so gewählt werden, dass sie eine Bedeutung innerhalb der Problemstellung des Programms haben (‘sprechende Bezeichner’). Dies hilft ein Programm selbsterklärend zu machen - man kann das Programm verstehen, indem man es einfach liest, statt auf Kommentare und Manuals angewiesen zu sein. 2006 Pearson Education, Inc. All rights reserved. 32 Praxis-Tipp Abkürzungen in Bezeichnern sollten vermieden werden. Dies erhöht die Lesbarkeit von Programmen. Bezeichner, die mit Unterstrichen oder doppelten Unterstrichen beginnen, sollten vermieden werden. C++ Compiler nutzen intern oft solche Namen. Auf diese Weise wird Verwirrung zwischen eigenen Namen und vom Compiler gewählten Namen vermieden. 2006 Pearson Education, Inc. All rights reserved. 2.4 Zweites C++ Programm: Ganze Zahlen addieren 33 • Objekt für den Eingabestrom – std::cin aus <iostream> • Normalerweise mit der Tastatur gekoppelt • Eingabeoperator >> – Erwartet, dass der Benutzer einen Wert eingibt und die Eingabetaste drückt – Speichert den eingegebenen Wert in der Variablen rechts vom Operator – Wandelt den Wert in den Typ der Variablen (wenn möglich) • Beispiel: std::cin >> number; • Liest eine mit der Tastatur eingegebene ganze Zahl zunächst als Folge von Zeichen • Wandelt die Zeichenfolge in eine ganze Zahl • Speichert die ganze Zahl in der Variablen number 2006 Pearson Education, Inc. All rights reserved. 34 Häufiger Programmierfehler Programme sollten die korrekte Eingabe aller Werte validieren, um zu verhindern, dass fehlerhaft eingegebene Informationen die Berechnungen im Programm beeinflussen. 2006 Pearson Education, Inc. All rights reserved. 2.4 Zweites C++ Programm: Ganze Zahlen addieren 35 • Zuweisungsoperator = – Weist den Wert auf seiner rechten Seite der Variablen auf seiner linken Seite zu – Binärer Operator (zwei Operanden) – Beispiel: sum = variable1 + variable2; – Addition der Werte von variable1 und variable2 – Speichern des Resultats in sum • Strommanipulator std::endl – Gibt einen Zeilenwechsel aus – Leert den Ausgabepuffer 2006 Pearson Education, Inc. All rights reserved. 36 Praxis-Tipp Auf beiden Seiten eines binären Operators sollten Leerzeichen stehen. Das hebt den Operator hervor und macht das Programm besser lesbar. 2006 Pearson Education, Inc. All rights reserved. 2.4 Zweites C++ Programm: Ganze Zahlen addieren 37 • Verkettung (Kaskadierung) von Ausgabeoperationen – Anwendung von mehreren Ausgabeoperatoren in einer einzigen Anweisung • Ausgabeoperation weiß, wie jeder Datentyp auszugeben ist – Beispiel std::cout << "Die Summe ist " << number1 + number2 << std::endl; – Schreibt erst "Die Summe ist " in den Ausgabestrom. – Danach wird die Summe von number1 und number2 als temporäre ganze Zahl berechnet, in eine Zeichenfolge umgewandelt und in den Ausgabestrom geschrieben. – Zum Schluss wird ein Zeilenwechsel ausgegeben und der Ausgabepuffer geleert. 2006 Pearson Education, Inc. All rights reserved. 38 2.5 Speicherkonzepte • Variablennamen – Entsprechen tatsächlichen Speicherplätzen • Jede Variable hat Name, Typ, Größe und Wert. – Wenn ein neuer Wert in der Variablen platziert wird, wird der alte Wert überschrieben. • In den Speicher schreiben ist ‘destruktiv’. • Für das Lesen von Variablen aus dem Speicher gilt dies nicht. – Beispiel sum = number1 + number2; – Wert von sum wird überschrieben – Werte von number1 und number2 bleiben intakt 2006 Pearson Education, Inc. All rights reserved. 39 Fig. 2.6 | Speicherplätze nach Berechnung und Abspeichern der Summe von number1 and number2. 2006 Pearson Education, Inc. All rights reserved. 40 2.6 Arithmetik • Arithmetische Operatoren + * Addition Subtraktion Multiplikation / Division Ganzzahlige Division schneidet Nachkommastellen ab 23 / 4 ergibt 5 % Modulo-Operator Gibt den Divisionsrest bei ganzzahliger Division zurück 23 % 4 ergibt 3 2006 Pearson Education, Inc. All rights reserved. 41 Häufiger Programmierfehler Der Versuch, den modulo-Operator (%) mit nichtganzzahligen Operanden zu benutzen, führt zu einer Fehlermeldung des Compilers. 2006 Pearson Education, Inc. All rights reserved. 42 2.6 Arithmetik • Gradlinige Anordnung – Erforderlich für arithmetische Ausdrücke in C++ – Alle Konstanten, Variablen und Operatoren erscheinen gradlinig hintereinander angeordnet. • Gruppierung von Unterausdrücken – Klammern werden in C++ Ausdrücken verwendet, um Unterausdrücke zu gruppieren. • Gleiche Vorgehensweise wie in algebraischen Ausdrücken – Beispiel a * ( b + c ) – Multipliziere a mit dem Wert von b + c 2006 Pearson Education, Inc. All rights reserved. 43 Operation arithmetischer Operator in C++ Algebraischer Ausdruck C++ Ausdruck Addition + f+7 f + 7 Subtraktion - p–c p - c Multiplikation * bm oder b· m b * m Division / x / y oder Modulo % r mod s x oder x : y y x / y r % s Fig. 2.7 | Arithmetische Operatoren. 2006 Pearson Education, Inc. All rights reserved. 44 2.6 Arithmetik • Regeln für den Operatorvorrang – Operatoren in Klammern werden zuerst ausgewertet. • Geschachtelte Klammern – Operatoren im innersten Klammernpaar zuerst – Als nächstes werden Multiplikation, Division, Modulo angewendet. • Die einzelnen Operatoren werden von links nach rechts angewendet. – Zum Schluss kommen Addition und Subtraktion. • Die einzelnen Operatoren werden von links nach rechts angewendet. 2006 Pearson Education, Inc. All rights reserved. 45 Operator(en) Operation(en) Reihenfolge der Auswertung (Vorrang) ( ) Klammern * / Multiplikation % Modulo + - Addition Subtraktion Division Zuerst ausgewertet. Bei geschachtelten Klammern wird der Ausdruck im innersten Klammerpaar zuerst ausgewertet. Mehrere nicht geschachtelte Klammerpaare werden von links nach rechts ausgewertet. Als Zweites ausgewertet. Wenn mehrere vorhanden sind, werden sie von links nach rechts ausgewertet. Zum Schluss ausgewertet. Wenn mehrere vorhanden sind, werden sie von links nach rechts ausgewertet. Fig. 2.8 | Vorrang von arithmetischen Operatoren. 2006 Pearson Education, Inc. All rights reserved. 46 Häufiger Programmierfehler Einige Programmiersprachen verwenden die Operatoren ** oder ^ um Exponentiation auszudrücken. C++ unterstützt diese Exponentiationsoperatoren nicht; der Versuch ihrer Verwendung führt zu Fehlermeldungen. 2006 Pearson Education, Inc. All rights reserved. 47 Praxis-Tipp Der Einsatz von redundanten Klammern in komplexen arithmetischen Ausdrücken kann die Ausdrücke klarer machen. 2006 Pearson Education, Inc. All rights reserved. 2.7 Fallunterscheidungen: Vergleichsoperatoren 48 • Bedingung – Ausdruck, der entweder wahr (true) oder falsch (false) sein kann – Kann mit Hilfe von Vergleichs- und Gleichheitsoperatoren formuliert werden •if Anweisung – Falls die Bedingung true ist, wird der Körper der if Anweisung ausgeführt. – Falls die Bedingung false ist, wird der Körper der if Anweisung nicht ausgeführt. 2006 Pearson Education, Inc. All rights reserved. 49 C++ Vergleichsoperator C++ Bedeutung der Bedingung C++ Bedingung > x > y x ist größer als y < x < y x ist kleiner als y >= x >= y x ist größer als oder gleich y Gleichheitsoperatoren <= x <= y x ist kleiner als oder gleich y = == x == y x ist gleich y ≠ != x != y x ist ungleich y Algebraischer Vergleichsoperator Vergleichsoperatoren Fig. 2.9 | Vergleichs- und Gleichheitsoperatoren. 2006 Pearson Education, Inc. All rights reserved. 50 Häufiger Programmierfehler Einen der Operatoren ==, !=, >= und <= mit Leerzeichen zwischen seinen beiden Zeichen zu schreiben ist ein Syntaxfehler. 2006 Pearson Education, Inc. All rights reserved. 51 Häufiger Programmierfehler Die Reihenfolge der beiden Zeichen in einem der Operatoren !=, >= und <= zu vertauschen (also =!, => und =< zu schreiben) ist normalerweise ein Syntaxfehler. Es kann vorkommen, dass != als =! zu schreiben nicht zu einem Syntaxfehler führt, in aller Regel dann aber zu einem logischen Fehler, der sich bei der Ausführung des Programms auswirkt. 2006 Pearson Education, Inc. All rights reserved. 52 Häufiger Programmierfehler Die Verwechslung des Gleichheitsoperators == mit dem Zuweisungsoperator = ist ein typischer Anfängerfehler. Der Gleichheitsoperator sollte als “ist gleich zu” gelesen werden und der Zuweisungsoperator sollte als “wird zu” oder “bekommt den Wert von” gelesen werden. 2006 Pearson Education, Inc. All rights reserved. 2.7 Fallunterscheidungen: Vergleichsoperatoren 53 • using-Deklarationen – Erlauben, dass Namen aus einem bestimmten Namensbereich innerhalb eines Programms verwendet werden können, ohne dass der Namensbereich jedesmal explizit angegeben werden muss. – Syntax: using std::cout; using std::cin; • using-Direktive – Schließt alle Namen eines Namensbereichs in ein Programm ein, so dass der Namensbereich nicht mehr bei jedem Namen angeführt werden muss. – Syntax: using namespace std; 2006 Pearson Education, Inc. All rights reserved. 1 // Fig. 2.13: fig02_13.cpp 2 // Comparing integers using if statements, relational operators 3 // and equality operators. 4 #include <iostream> // allows program to perform input and output 5 6 using std::cout; // program uses cout 7 using std::cin; 8 using std::endl; // program uses endl // program uses cin 9 10 // function main begins program execution 11 int main() 12 { Outline using Deklarationen vermeiden die Einleitung std:: im Programmtext 54 fig02_13.cpp (1 von 2) cout und cin können jetzt ohne std:: geschrieben werden 13 int number1 = 0; // first integer to compare (initialized to zero) 14 int number2 = 0; // second integer to compare (initialized to zero) 15 16 cout << "Enter two integers to compare: "; // prompt user for data 17 cin >> number1 >> number2; // read two integers from user 18 19 20 if( number1 == number2 ) cout << number1 << " == " << number2 << endl; 21 22 23 if( number1 != number2 ) Falls die Bedingung true ist (d.h., die Werte sind gleich), wird diese Anweisung ausgeführt cout << number1 << " != " << number2 << endl; 24 25 26 if( number1 < number2 ) cout << number1 << " < " << number2 << endl; 27 28 29 if( number1 > number2 ) cout << number1 << " > " << number2 << endl; 30 2006 Pearson Education, Inc. All rights reserved. 31 32 if( number1 <= number2 ) cout << number1 << " <= " << number2 << endl; 33 34 35 if( number1 >= number2 ) Outline 55 fig02_13.cpp cout << number1 << " >= " << number2 << endl; 36 } // end function main (2 von 2) Enter two integers to compare: 3 7 3 != 7 3 < 7 3 <= 7 Enter two integers to compare: 22 12 22 != 12 22 > 12 22 >= 12 Enter two integers to compare: 7 7 7 == 7 7 <= 7 7 >= 7 2006 Pearson Education, Inc. All rights reserved. 56 Praxis-Tipp using Deklarationen sollten direkt nach dem #include stehen, auf das sie sich beziehen. using Deklarationen sind einer using Direktive grundsätzlich vorzuziehen, weil so dass Konzept des Namensbereichs besser unterstützt wird. In Praktikum und Klausur ist eine using Direktive für den Namensbereich std erlaubt. 2006 Pearson Education, Inc. All rights reserved. 57 Praxis-Tipp Die Anweisung(en) im Körper einer if Anweisung sollten eingerückt werden, um die Lesbarkeit zu verbessern. Aus Gründen der Lesbarkeit sollte nicht mehr als eine Anweisung in einer Programmzeile stehen. 2006 Pearson Education, Inc. All rights reserved. 58 Häufiger Programmierfehler Ein Semikolon direkt nach der rechten Klammer der Bedingung einer if Anweisung ist meist ein logischer Fehler (jedoch kein Syntaxfehler!). Das Semikolon bewirkt, dass der Körper der if Anweisung leer ist, so dass die if Anweisung unabhängig von ihrer Bedingung keine Aktion ausführt. Die ursprünglich im Körper der if Anweisung stehende Anweisung wird danach auf alle Fälle ausgeführt, so dass das Ergebnis unabhängig von der if Bedingung wird. 2006 Pearson Education, Inc. All rights reserved. 59 Praxis-Tipp Eine lange Anweisung kann über mehrere Zeilen verteilt werden. In diesem Fall sollten sinnvolle Trennstellen, wie hinter einem Komma in einer kommagetrennten Liste, oder nach einem Operator in einem langen Ausdruck, gewählt werden. Alle so entstehenden Folgezeilen sollten auf die gleiche Weise eingerückt werden. 2006 Pearson Education, Inc. All rights reserved. 60 Operator Assoziativität Typ () von links nach rechts Klammern von links nach rechts multiplikativ * / + - von links nach rechts additiv << >> von links nach rechts Aus-/Eingabe < <= == != = % > >= von links nach rechts Vergleich von links nach rechts Gleichheit von rechts nach links Zuweisung Fig. 2.14 | Vorrang und Assoziativität der bisher besprochenen Operatoren. 2006 Pearson Education, Inc. All rights reserved. 61 Praxis-Tipp Vorrang und Assoziativität von Operatoren können in der entsprechenden Tabelle nachgesehen werden. Bei Unsicherheit über die Auswertungsreihenfolge in einem komplexen Ausdruck sollte der Ausdruck in kleinere Anweisungen zerlegt oder zusätzliche Klammern verwendet werden. Zuweisungsoperatoren (=) sind im Gegensatz zu den meisten anderen Operatoren rechtsassoziativ. 2006 Pearson Education, Inc. All rights reserved.