Einführung in C++ (Teil 1)
Grundstruktur einfacher C++ Programme:
// Kommentar: Dieser Kommentar erstreckt sich bis zum Zeilenende.
/* Kommentar: Dieser Kommentar kann über mehrere Zeilen gehen.
Alles was zwischen /* und */ ist ein Kommentar
*/
#include <iostream.h>
// Compiler-Instruktionen
#include ...
...
void main( )
// Hauptfunktion
{
Vereinbarung von Variablen
// In diesem Bereich stehen alle Definitionen und
Anweisungen
// Befehle des Programms
}
Jedes C++ – Programm besteht aus einer Folge von Anweisungen, die nacheinander
ausgeführt werden. Nachdem das Programm die letzte Anweisung ausgeführt
hat wird es beendet.
Die einzelnen Befehle werden mit ";" voneinander getrennt. Dabei ist
es egal ob eine neue Zeile begonnen wird oder nicht:
int c;
int b;
ist folglich identisch mit
int c; int b;
(letzteres kann aber leicht unübersichtlich werden)
Der Quelltext des C++-Programms wird mit einem Text-Editor (z.B. nedit)
erstellt. Die Textdatei darf einen beliebigen Namen tragen, muß aber
die Erweiterung .cpp haben.
Beispiel 1:
//Programm Hallo.cpp
//Das Programm Hallo gibt das Wort Hallo auf dem Bildschirm aus.
#include <iostream.h>
void main()
{
cout << "Hallo" << endl;
}
C++ ist alleine nicht in der Lage auf den Bildschirm zu schreiben, daher
muß am Anfang des Programms eine Bibliothek aufgerufen werden:
#include <iostream.h>
Der Befehl für die Bildschirmausgabe ist:
| cout << "Hallo" <<
endl; |
/*Gibt das Wort Hallo auf dem Bildschirm aus.
Mit dem Befehl endl wird eine neue Zeile angefangen.*/ |
Befehl für die Eingabe:
| cin >> i; |
//Liest den Wert für
die Variable i von der Tastatur ein. |
Um aus dem Quelltext Hallo.cpp ein ausführbares Programm zu erzeugen
gibt man im Terminal folgendes Kommando ein:
> c++ Hallo.cpp
Normalerweise bekommt das Ergebnis der Compilierung den Standardnamen
a.out. Mit der Option -o Dateiname kann man dem Programm einen Namen seiner
Wahl geben.
> c++ -o Hallo Hallo.cpp
Gibt man zusätzlich noch die Option -Wall an, werden genauere Fehlermeldungen
ausgegeben.
> c++ -Wall -o Hallo Hallo.cpp
Um das Programm zu starten gibt man ein:
> chmod u+x Hallo
Dies ist nur notwendig, wenn das Programm noch nicht ausfübar ist.
> ./Hallo
Beispiel 2:
/*Programm Mittelwert
Dieses Programm berechnet den Mittelwert von zwei (vom Benutzer)
eingegebenen Zahlen*/
#include <iostream.h>
void main( )
{
| float Zahl1; |
// Deklaration der Variablen Zahl1 |
| cout << "Gib eine Zahl ein: "; |
// Eingabe der ersten Zahl |
| cin >> Zahl1; |
// Zahl1 wird eingelesen |
| float Zahl2; |
// Deklaration der Variablen Zahl2 |
| cout << "Gib eine weitere Zahl ein: "; |
// Eingabe der zweiten Zahl |
| cin >> Zahl2; |
// Zahl2 wird eingelesen |
| float Mittelwert; |
// Deklaration der Variablen Mittelwert |
/* Berechnung der Mittelwertes von Zahl1 und Zahl2 */
Mittelwert = (Zahl1+Zahl2)/2;
cout << "Der Mittelwert von "
<< Zahl1 << " und " <<
Zahl2
<<
" ist " << Mittelwert <<
endl;
}
Output:
Gib eine Zahl ein: 2
Gib eine weitere Zahl ein: 4
Der Mittelwert von 2 und 4 ist 3
Vor der Verwendung einer Variablen muß diese erst deklariert werden.
Nach der Deklaration ist die Variable im Programm bekannt und kann benutzt
werden.
Deklaration der Variablen Zahl1 vom Datentyp float: float
Zahl1
Weitere Datentypen sind im Anhang aufgeführt.Variablen können
überall im Programm definiert werden (nicht nur am Anfang, wie bei
manch anderer Programmiersprache). Sie können auch zusammen definiert
werden, wenn sie durch "," getrennt werden:
float Zahl1, Zahl2;
Im Programm Mittelwert stehen nach << drei verschiedene Arten
von Objekten:
1.) Ein Stück Text zwischen Anführungszeichen, wie
beispielsweise
"Gib eine Zahl ein: " nennt man einen string.
2.) Ein arithmetischer Ausdruck wie beispielsweise Zahl1.
3.) Ein Manipulator, nämlich endl, der den Übergang in eine
neue Zeile
bewirkt.
Assignment-statement: Mittelwert = (Zahl1+Zahl2)/2
Der Ausdruck rechts vom Gleichheitszeichen (Zuweisungsoperator) wird
berechnet und der Variablen Mittelwert zugewiesen.
Beispiel 3:
Dieses Programm hat die gleiche Funktion wie das Programm Mittelwert,
nur daß es unübersichtlicher aufgeschrieben ist.
//Programm Konfus
#include<iostream.h>
void main(){float
Zahl1;cout<<"Gib eine Zahl ein: "
;cin>>Zahl1;float Zahl2
;cout<<
"Gib eine weitere Zahl ein: ";cin
>> Zahl2;
float Mittelwert;Mittelwert
=(Zahl1+Zahl2)
/2;cout<<"Der Mittelwert von "
<< Zahl1<<" und "<<Zahl2<<
" ist "<<Mittelwert <<endl;}
Beispiel 4: Variablenmanipulation
// Programm zur Änderung von Variablen
#include <iostream.h>
void main( )
{
int i = 1;
cout << i << "
";
i = 2 * i + 2;
cout << i << endl;
i = 3 * i;
cout << i << "
" << 3 * i << endl;
}
Output:
1 4
12 36
Scope:
Den Wirkungsbereich einer Variablen nennt man Scope.
Definition Block: Ein Block ist ein Programmbereich, der durch ein
Paar geschweifter Klammern
{ } eingeschlossen ist.
Wird eine Variable innerhalb eines Blocks deklariert, so existiert
sie nur innerhalb des Blocks.
Beispiel 5:
//Programm Scope
#include <iostream.h>
void main( )
{
float x = 1.5;
{
cout << "x = " << x
<< endl;
//Hier ist x = 1.5
char x = 'A';
{
cout << "x = " <<
x << endl;
//Hier ist x = A
int x = 5;
cout << "x = "
<< x << endl;
//Hier ist x = 5
}
cout << "x = " <<
x << endl;
//Hier ist x = A
}
cout << "x = " << x
<< endl;
//Hier ist x = 1.5
}
Output:
x = 1.5
x = A
x = 5
x = A
x = 1.5
Der Inkrementierungs - und Dekrementierungsoperator:
Unter Inkrementierung wird die Addition von 1 verstanden und unter Dekrementierung
die Subtraktion von 1.
Inkrementierungsoperator: ++
Dekrementierungsoperator: --
i ++ und ++ i sind Kurzformen von i += 1 (i = i + 1).
i-- und --i sind Kurzformen von i -= 1 (i = i - 1).
Unterschied zwischen i ++ und ++i:
Beispiel 6:
//Programm increment
#include <iostream.h>
void main( )
{
int i = 0, j = 0, k = 0, n
= 0;
j = i++; k = ++n;
cout << "j = " <<
j << " " << "i =
" << i << endl;
cout << "k = " <<
k << " " << "n =
" << n << endl;
}
Output:
j = 0 i = 1
k = 1 n = 1
Schleifen:
Schleifen dienen zur Wiederholung von Anweisungen. Die Wiederholung
wird durch eine Bedingung kontrolliert, die nach jeder Wiederholung überprüft
wird. Innerhalb einer Schleife sollte es eine Veränderung derart geben,
daß die Bedingung irgendwann einmal unwahr wird, so daß die
Schleife abbricht.
1.) while - Schleife:
Syntax: while (Bedingung) Anweisung bzw.
{Anweisungen}
Die Anweisung wird ausgeführt, solange die Bedingung wahr ist.
Die Bedingung wird zuerst geprüft und danach die Anweisung ausgeführt.
Wenn die Bedingung von vornherein unwahr ist, wird die Anweisung nicht
ausgeführt.
Beispiel 7:
s = 0; i = 1;
while (i <= n)
{
s += i;
// s = 1 + 2 + 3 + ...
+ n
i++;
}
2.) for - Schleife:
Syntax: for (Initialisierung; Bedingung; Veränderung)
Anweisung bzw. {Anweisungen}
Beispiel 8:
s = 0;
for (int i = 0; i < n; i ++)
s += i;
// s = 1 + 2 + 3
+ ... + n
Die erste Anweisung in der Klammer initialisiert die Laufvariable i
(int wird nur gebraucht, wenn i noch keinen Typ zugewiesen bekommen hat).
Die Schleife wird solange ausgeführt, wie die zweite Anweisung wahr
ist. Falls die Bedingung wahr ist, wird die Anweisung und die Veränderung
der Laufvariablen ausgeführt.
Auswahl treffen mit if und switch:
Eine if - Anweisung erlaubt die Auswahl zwischen 2 Möglichkeiten.
Durch Verschachtelung kann eine Auswahl zwischen mehreren Möglichkeiten
getroffen werden. Dies kann bei größerer Verschachtelungstiefe
sehr unübersichtlich werden. Einfacher und übersichtlicher ist
dann die Fallunterscheidung mit switch.
1.) if - Anweisung:
| Syntax: |
if (Bedingung) |
//Anweisung1 wird nur ausgeführt |
| |
Anweisung1 |
//wenn die Bedingung erfüllt ist. |
| |
else |
//Ansonsten wird Anweisung2 (else- |
| |
Anweisung2 |
//Zweig) ausgeführt. |
Beispiel 9:
/* Römische Ziffern
Zu einer eingegebenen römischen Ziffer wird die zugehörige
arabische Ziffer angezeigt */
#include <iostream.h>
void main( )
{
int arabische_Ziffer = 0;
char roemische_Ziffer;
cout << "Gib eine römische Ziffer ein:
";
cin >> roemische_Ziffer;
if (roemische_Ziffer = = 'I') arabische_Ziffer =
1;
else if (roemische_Ziffer = = 'V') arabische_Ziffer
= 5;
else if (roemische_Ziffer = = 'X') arabische_Ziffer
= 10;
else if (roemische_Ziffer = = 'L') arabische_Ziffer
= 50;
else if (roemische_Ziffer = = 'C') arabische_Ziffer
= 100;
else if (roemische_Ziffer = = 'D') arabische_Ziffer
= 500;
else if (roemische_Ziffer = = 'M') arabische_Ziffer
= 1000;
if (arabische_Ziffer = = 0) cout
<< "Es wurde keine römische Ziffer "
"eingegeben!" << endl;
else cout << "Zugehörige arabische Ziffer:
" << arabische_Ziffer << endl;
}
Output:
Gib eine römische Ziffer ein: X
Zugehörige arabische Ziffer: 10
Zur Zweifachauswahl gehört auch der bedingte Ausdruck:
Syntax: Bedingung ? Ausdruck1 : Ausdruck2
Falls die Bedingung wahr ist, ist der Wert des gesamten Ausdrucks der
Wert von Ausdruck1, ansonsten der Wert von Ausdruck2. Ein Ausdruck mit
dem Bedingungoperator kann lesbarer durch eine if - Anweisung ersetzt werden,
wie das folgende Beispiel zeigt.
Beispiel 10:
/*Programm Vergleich. Dieses Programm vergleicht zwei vom Benutzer eingebene
Zahlen und gibt die größere von beiden aus.*/
#include <iostream.h>
void main( )
{
float a, b;
cout << "Gib die erste Zahl ein: "; cin
>> a;
cout << "Gib die zweite Zahl ein: ";
cin >> b;
//Möglichkeit 1
if (a < b) cout <<
"Die größere der beiden Zahlen " <<
a << " und " << b
<< " ist: " << b <<
endl;
else cout << "Die größere
der beiden Zahlen " << a << "
und " << b
<< " ist: " << a <<
endl;
//Möglichkeit 2
cout << "Die größere der
beiden Zahlen " << a << "
und " << b << " ist:
"
<< (a < b ? b : a)
<< endl;
}
Output:
Gib die erste Zahl ein: 3
Gib die zweite Zahl ein: 5
Die größere der beiden Zahlen 3 und 5 ist: 5
Die größere der beiden Zahlen 3 und 5 ist: 5
2.) switch - Anweisung:
| Syntax: |
switch (Ausdruck) |
|
{ case const1: Anweisungen break; |
| |
case const2: Anweisungen break; |
| |
... |
| |
default: Ersatzanweisungen |
|
} |
Für die Fallunterscheidung wird der Ausdruck ausgewertet und der
Programmablauf nach dem case fortgesetzt, dessen Konstante mit dem Wert
des Ausdrucks übereinstimmt.
Wichtig: Nach Ausführung der entsprechenden Anweisungen wird nicht
automatisch aus der
switch - Anweisung gesprungen. Erst
break führt zum Verlassen von switch.
Beispiel 11:
/* Römische Ziffern. Zu einer eingegebenen römischen Ziffer
wird die zugehörige arabische Ziffer angezeigt */
#include <iostream.h>
void main( )
{
int arabische_Ziffer = 0; char roemische_Ziffer;
cout << "Gib eine römische Ziffer ein:
";
cin >> roemische_Ziffer;
switch (roemische_Ziffer)
{
case 'I' : arabische_Ziffer = 1; break;
case 'V' : arabische_Ziffer = 5; break;
case 'X' : arabische_Ziffer = 10; break;
case 'L' : arabische_Ziffer = 50; break;
case 'C' : arabische_Ziffer = 100; break;
case 'D' : arabische_Ziffer = 500; break;
case 'M' : arabische_Ziffer = 1000; break;
default : arabische_Ziffer = 0;
}
if (arabische_Ziffer > 0)
cout << "Zugehörige arabische Ziffer: "<<
arabische_Ziffer << endl;
else cout << "Es wurde keine römische
Ziffer eingegeben!" << endl;
}
Anhang
Elementare Datentypen
| Datentyp |
Bedeutung |
Größe |
| char |
Zeichen |
8 Bit |
| int |
Integer |
16 Bit |
| short int oder nur short |
Integer |
8 Bit |
| long int oder nur long |
Integer |
32 Bit |
| float |
Fließkomma einfache Genauigkeit |
32 Bit |
| double |
Fließkomma doppelte Genauigkeit |
64 Bit |
Operatoren
| Operator |
Beispiel |
Bedeutung |
| Arithmetische Operatoren: |
|
|
| + |
i + 2 |
Addition |
| - |
i - 4 |
Subtraktion |
| * |
8 * i |
Multiplikation |
| / |
i / 3 |
Division |
| % |
i % 5 |
Modulo |
| ++ |
++ i |
vorherige Inkrementierung um Eins |
| |
i ++ |
nachfolgende Inkrementierung um Eins |
| -- |
-- i |
vorherige Dekrementierung um Eins |
| |
i -- |
nachfolgende Dekrementierung um Eins |
| = |
i = m + 5 |
Zuweisung |
| += |
i += 5 |
i = i + 5 |
| -= |
i -= 5 |
i = i - 5 |
| *= |
i *= 5 |
i = i * 5 |
| /= |
i /= 5 |
i = i / 5 |
| %= |
i %= 5 |
i = i % 5 |
| Relationale Operatoren: |
|
|
| < |
i < m |
kleiner als |
| > |
i > m |
größer als |
| <= |
i <= m |
kleiner gleich |
| >= |
i >= m |
größer gleich |
| == |
i == m |
gleich |
| != |
i != m |
ungleich |
| Logische Operatoren: |
|
|
| ! |
!Ausdruck |
logische Negation |
| && |
Ausdruck1 && Ausdruck2 |
logisches UND |
| || |
Ausdruck1 || Ausdruck2 |
logisches ODER |
Last update: 30.Dezember 2000
E-Mail: rcbruens@astro.uni-bonn.de