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.