Einführung in die Programmierung mit C++ - KIP Wiki

Werbung
Seite 1
Einführung in die Programmierung mit C++
Teil II - Einführung in die strukturierte Programmierung
5. Kontrollstrukturen
C++ Einführungskurs – 15.10.2007 – http://wiki.kip.uni-heidelberg.de/ti/Informatik-Vorkurs
Anweisungen
© TI Uni-HD Alle Rechte vorbehalten
Seite 2
• leere Anweisung
;
• zusammengesetzte Anweisung, Anweisungsblock
{ Anweisung; .. }
• nach jeder einzelnen Anweisung folgt ein Strichpunkt
• nach einem Anweisungsblock folgt kein Strichpunkt
• Anweisungen in einem Block werden sequentiell abgearbeitet
• Abarbeitung beginnt mit der ersten Anweisung des main-Blocks
C++ Einführungskurs – 15.10.2007 – http://wiki.kip.uni-heidelberg.de/ti/Informatik-Vorkurs
© TI Uni-HD Alle Rechte vorbehalten
1
Bedingte Anweisungen I
Seite 3
• einfache Bedingungsabfrage
if ( Ausdruck ) Anweisung;
• wenn Ausdruck wahr dann Ausführung von Anweisung
• C++ interpretiert jeden Wert ungleich 0 als wahr
• Anweisungen können immer mitsamt Strichpunkt durch einen Block ersetzt werden
if ( Ausdruck ) {
Anweisung; ..
}
C++ Einführungskurs – 15.10.2007 – http://wiki.kip.uni-heidelberg.de/ti/Informatik-Vorkurs
© TI Uni-HD Alle Rechte vorbehalten
Bedingte Anweisungen II
Seite 4
• Bedingungsabfrage mit Alternative
if ( Ausdruck ) Anweisung_1; else Anweisung_2;
• wenn Ausdruck wahr dann Ausführung von Anweisung_1, sonst Anweisung_2
• Vorsicht bei Schachtelung von if-else: Zugehörigkeit von else beachten!
if ( Ausdruck_1 )
if ( Ausdruck_2 )
Anweisung_1;
else
Anweisung_2;
Anweisung_3;
oder?
if ( Ausdruck_1 )
if ( Ausdruck_2 )
Anweisung_1;
else
Anweisung_2;
Anweisung_3;
• besser: geschweifte Klammern benutzen
C++ Einführungskurs – 15.10.2007 – http://wiki.kip.uni-heidelberg.de/ti/Informatik-Vorkurs
© TI Uni-HD Alle Rechte vorbehalten
2
Bedingte Anweisungen III
Seite 5
• Mehrfachverzweigung
switch ( Ausdruck ) {
case Konstante_1:
Anweisung_1_1; ..
break;
case Konstante_2:
Anweisung_2_1; ..
break;
..
default:
Anweisung_x_1; ..
}
C++ Einführungskurs – 15.10.2007 – http://wiki.kip.uni-heidelberg.de/ti/Informatik-Vorkurs
© TI Uni-HD Alle Rechte vorbehalten
Bedingte Anweisungen IV
Seite 6
• zunächst Auswertung von Ausdruck
• ergibt sich Ausdruck zu einer der Konstanten eines case-Zweiges dann Abarbeitung
der darauf folgenden Anweisungen bis zur nächsten break-Anweisung
• steht zwischen case-Zweigen kein break dann wird Abarbeitung einfach fortgesetzt!
case-Zweige immer mit break beenden!
• wir kein passender case-Zweig gefunden dann wird default-Zweig gewählt
• default-Zweig ist optional
C++ Einführungskurs – 15.10.2007 – http://wiki.kip.uni-heidelberg.de/ti/Informatik-Vorkurs
© TI Uni-HD Alle Rechte vorbehalten
3
Schleifen I
Seite 7
• kopfgesteuerte Schleife mit einfacher Bedingung
while ( Ausdruck ) Anweisung;
• so lange Ausdruck wahr ist wird Anweisung ausgeführt
• wenn Anweisung nicht dazu führt, daß Ausdruck irgendwann falsch wird, dann
Endlosschleife!
C++ Einführungskurs – 15.10.2007 – http://wiki.kip.uni-heidelberg.de/ti/Informatik-Vorkurs
Schleifen II
© TI Uni-HD Alle Rechte vorbehalten
Seite 8
• fußgesteuerte Schleife mit einfacher Bedingung
do Anweisung; while ( Ausdruck );
• Anweisung wird mindestens einmal ausgeführt
• so lange Ausdruck wahr ist wird Anweisung wiederholt ausgeführt
C++ Einführungskurs – 15.10.2007 – http://wiki.kip.uni-heidelberg.de/ti/Informatik-Vorkurs
© TI Uni-HD Alle Rechte vorbehalten
4
Schleifen III
Seite 9
• flexible Schleife
for ( Initialisierung; Bedingung; Inkrement ) Anweisung;
• zunächst Ausführung von Initialisierung
• so lange Bedingung wahr ist wird jedesmal zuerst Anweisung dann Inkrement
ausgeführt
• Beispiel
const int groesse = 256;
int feld[groesse];
for ( int i = 0; i < groesse; ++i ) feld[i] = 2 * i;
C++ Einführungskurs – 15.10.2007 – http://wiki.kip.uni-heidelberg.de/ti/Informatik-Vorkurs
© TI Uni-HD Alle Rechte vorbehalten
Schleifen IV
Seite 10
• frühzeitiges Fortsetzen
while ( Ausdruck_1 ) {
Anweisung_1;
if ( Ausdruck_2 ) continue;
Anweisung_2;
}
• wenn Ausdruck_2 wahr dann wird sofort mit nächstem Schleifendurchlauf
begonnen; Anweisung_2 wird nicht ausgeführt
• continue kann in allen Schleifentypen eingesetzt werden
• bei geschachtelten Schleifen wird nur diejenige Schleife neu begonnen in deren
unmittelbaren Kontext die entsprechende continue-Anweisung auftritt
C++ Einführungskurs – 15.10.2007 – http://wiki.kip.uni-heidelberg.de/ti/Informatik-Vorkurs
© TI Uni-HD Alle Rechte vorbehalten
5
Schleifen V
Seite 11
• frühzeitiges Beenden
while ( Ausdruck_1 ) {
Anweisung_1;
if ( Ausdruck_2 ) break;
Anweisung_2;
}
• wenn Ausdruck_2 wahr dann wird Schleife sofort beendet, Anweisung_2 wird nicht
ausgeführt
• break kann in allen Schleifentypen eingesetzt werden
• bei geschachtelten Schleifen wird nur diejenige Schleife beendet, in deren
unmittelbaren Kontext die entsprechende break-Anweisung auftritt
C++ Einführungskurs – 15.10.2007 – http://wiki.kip.uni-heidelberg.de/ti/Informatik-Vorkurs
© TI Uni-HD Alle Rechte vorbehalten
Sprünge
Seite 12
• direkter Sprung
Anweisung_1;
goto Label;
Anweisung_2;
Label:
Anweisung_3;
• nach Anweisung_1 wird das Programm bei Label fortgesetzt, Anweisung_2 wird
übersprungen und direkt Anweisung_3 ausgeführt
• für Namen von Sprungzielen gelten selbe Regeln wie für andere Namen auch
• Einsatz von goto führt sehr leicht zu unübersichtlichen, schlecht strukturierten
Programmen und läßt sich selten rechtfertigen
C++ Einführungskurs – 15.10.2007 – http://wiki.kip.uni-heidelberg.de/ti/Informatik-Vorkurs
© TI Uni-HD Alle Rechte vorbehalten
6
Beispiel I
Seite 13
• Vokale zählen
#include <iostream>
int main()
{
char buffer[256];
int a = 0, e = 0, i = 0, o = 0, u = 0, n = 0;
std::cout << "Gib ein Wort ein: ";
std::cin >> buffer;
while ( buffer[n] != '\0' ) {
// '\0' ist Ende-Zeichen
switch ( buffer[n++] ) {
case 'a': case 'A': a++; break;
case 'e': case 'E': e++; break;
case 'i': case 'I': i++; break;
case 'o': case 'O': o++; break;
case 'u': case 'U': u++; break;
}
}
std::cout << a << " as, " << e << " es, " << i << " is, "
<< o << " os, " << u << " us" << std::endl;
return 0;
}
C++ Einführungskurs – 15.10.2007 – http://wiki.kip.uni-heidelberg.de/ti/Informatik-Vorkurs
© TI Uni-HD Alle Rechte vorbehalten
Beispiel II
Seite 14
• Feld sortieren
#include <iostream>
int main()
{
const int groesse = 10;
int feld[groesse] = { 42, 1, 23, 7, 15, 11, 8, 99, 34, 0 };
// Feld sortieren
for ( int i = 0; i < groesse - 1; ++i )
for ( int k = i + 1; k < groesse; ++k )
if ( feld[k] < feld[i] ) {
int copy = feld[k];
feld[k] = feld[i]; feld[i] = copy;
}
// Feld ausgeben
for ( int i = 0; i < groesse; ++i )
if ( i < groesse - 1 ) std::cout << feld[i] << ", ";
else std::cout << feld[i] << std::endl;
return 0;
}
C++ Einführungskurs – 15.10.2007 – http://wiki.kip.uni-heidelberg.de/ti/Informatik-Vorkurs
© TI Uni-HD Alle Rechte vorbehalten
7
Herunterladen