Beruflich Dokumente
Kultur Dokumente
Kontrollstrukturen
5.1 Verbundanweisung / Anweisungsblock
{
// Anweisung1;
// Anweisung2;
// Anweisung3;
}
if (Bedingung)
Bedingung falsch
{ Bedingung Anweisungen 2
Anweisungen 1 wahr falsch
}
else Anweisungen 1 Anweisungen 2 wahr
{
Anweisungen 2 Anweisungen 1
}
• Verschachtelung möglich …
• else if möglich
58
Ausdruck (Fallauswahl)
Fall 1 Fall 2 Fall 3 Fall 4 ... default
Anwei- Anw. Anw. Anw. ... Anw.
sung
59
switch (Ausdruck)
{
case Ausdruck1:
Anweisungen;
keine Klammern
Anweisungen;
break; break nicht vergessen, sonst wird der nächste
case Ausdruck2: case-Teil mit ausgeführt (kann auch Absicht sein)
Anweisungen;
break;
...
default: für den Fall, dass kein Ausdruck übereinstimmt
Anweisungen
}
60
Anweisung(en)
Aktualisierung
Ausdruck
Kopfgesteuert while (Bedingung)
{
Anweisungen; Anweisung
}
do
Fußgesteuert { Anweisung
Anweisungen;
}
while (Bedingung) Ausdruck
61
Ausdruck 1 Ausdruck 2 Ausdruck 3
for (Initialisierung; Bedingung; Aktualisierung)
Zählergesteuert {
Ausdruck 1
Anweisungen;
} Solange Ausdruck 2 wahr
Anweisung
Beispiel… Ausdruck 3
double fakultaet(int n)
{
double f=1.;
int i;
KEIN Semikolon !! (Warum?)
for (i = 2; i <= n; i++)
f *= i;
return f;
}
62
Anweisung
Gegenbeispiel… Ausdruck 3
63
5.5 Sprunganweisungen
64
5.5 Sprunganweisungen
int i = 0;
for (;;)
{
printf ("%d\n", i++);
if (i == 10)
break;
}
65
5.5 Sprunganweisungen
int i = 0;
for (;;)
{
if (i == 4) Warum geht‘s nicht weiter?
continue;
printf ("%d\n", i++);
if (i == 10)
break;
}
66
5.5 Sprunganweisungen
int i = 0;
67
6. Funktionen
6.1 Allgemeines
„Unterprogramme, Prozeduren, …“ (in C alles das gleiche…)
Typisches Beispiel: Einkapselung einer Berechnung
vgl. Praktikum !
Allgemeiner Aufbau
#include <stdio.h>
p = 1;
for (i = 1; i <= n; ++i)
p *= base;
return p;
}
// --------------------------------------------
main ()
{
int i;
69
6.2 Gültigkeitsbereiche von Variablen
#include <stdio.h>
int z = 5;
double f;
globales f
double fakultaet(int n)
{ double f=1.; lokales f
int i; • ist nur in diesem Block gültig
for(i=2; i<=n; i++) • wird erst bei Aufruf der Funktion im Sp. angelegt
f = f * i; • überdeckt hier globales f
return f;
}
main()
{
f = fakultaet(z); Zugriff auf globales f
printf("%g\n", f);
}
Anm.:
Globale Variablen sind auch eine Variante zur Kommunikation mit Funktionen…
70
Statische Variablen
• haben Default-Wert 0
71
Variablen in einzelnen Blöcken
int i;
for (i = 0; ...)
{
int k;
k = i * i;
printf("%d %d\n", i, k);
}
72
6.3 Funktionsdeklaration
Was passiert…?
73
74
Abhilfe: Funktionsdeklaration…
75
6.4 Standardbibliothek(en)
• Ein- / Ausgabe
• Datei-Ein- / Ausgabe
• Grenzwerte
• Mathematik
• Zufallszahlen
• Zeichenbehandlung
• Zeichenketten
• Konvertierung
• Speicherverwaltung
• Starten / Beenden
• Nicht-Standardfunktionen
Beispiele
76
6.5 Rekursion
Ruft eine Funktion sich selbst rekursiv auf, dann erhält jede Aktivierung
einen neuen Satz aller ihrer automatischen Variablen.
Typisches Beispiel 1:
77
Typisches Beispiel 2:
78
Eine Funktion wird in C++ nicht alleine über ihren Namen identifiziert,
sondern auch über die Anzahl (und den Typ) der Argumente
79
80
81
7. Zeiger und Vektoren
7.1 Einführung Zeiger / Pointer
- ursprünglich: direkter Zugriff für den Programmierer auf die Funktion des
Prozessors
- immer noch:
Übergabe von Variablen zwischen Programm und Funktion
Direkter Zugriff auf Elemente von Datenstrukturen
(Textzeichen, Bildpixel, …)
82
Operatoren:
p c
& Adress-Operator
1245052
* Inhalts-Operator … … 'a' …
1245051
1245052
1245053
83
int x = 1, y = 2, z[10];
int *ip; // ip ist ein Zeiger auf int
*ip += 1; // erhöht x um 1
++*ip; // erhöht x um 1
(*ip)++; // erhöht x um 1. Klammern notwendig!
84
Beliebte Beispielaufgabe:
Eine Funktion, die zwei Zahlen vertauschen soll.
tauscht nix…
Übergabe nur von Argumentwerten Funktion tauscht nur Kopien der Variablen
85
Lösung: Übergabe von Zeigern
86