Académique Documents
Professionnel Documents
Culture Documents
31
Explizite Typkonvertierungen
In einigen Fllen ist eine explizite Typkonvertierung unbedingt
erforderlich:
int a = 5;
int b = 2;
// In C/C++
double x = ((double) a ) / ((double) b); // x ist 2.5, sonst 2.0
In C++ auch erlaubt:
double x = double(a) / double(b)
// In C++ empfehlenswert:
double x = static_cast<double>(a) / static_cast<double>(b);
Peter Sobe
32
Aufzhlungstypen
Manchmal ist es sinnvoll, eine Vielzahl gleichartiger Konstanten zu
einer Menge zusammenzufassen. Jedes Element dieser Menge
bekommt eine Ordinalzahl Das erste Element erhlt z.B. die
Ordinalzahl 0, das zweite 1 usw.,
Beispiel:
enum Wochentag { Mon, Die, Mit, Don, Fri, Sam, Son };
Wochentag Tag;
Tag = Mon;
33
Operatoren (1)
Binre Operatoren
+
*
/
%
Addition
Subtraktion
Multiplikation
Division
Divisionsrest
<
<=
==
!=
>=
>
Vergleich
Alle Typen
&
|
^
<<
>>
bitw. UND-Verknpfung
bitw. ODER-Verknpfung
bitw. Exkl.-Oder-Verknpfung
bitw. Linksverschieben
bitw. Rechtsverschieben
Bitoperationen
Ganzzahlige
Typen
&&
||
log. UND-Verknpfung
log. ODER-Verknpfung
Logische
Verknpfungen
Boolesche Werte
Peter Sobe
Arithmetik
Zahlen, mit
Einschrnkung
Adressen
nur ganze Zahlen
34
Operatoren (2)
Unre Operatoren, Postfix- und Prfix-Operatoren
&
*
Adresse von
Inhalt von
Refernzierung
Dereferenzierung
alle Typen
Zeiger
+
-
pos. Vorzeichen
neg. Vorzeichen
Arithmetik
Zahlen
bitw. Invertierung
Bitoperationen
ganzz. Typen
logische Invertierung
Log. Verknpfung
boolesche Werte
Typecast
C-Allzweck-Cast
viele Typen
(type)
sizeof
sizeof
++
--
Peter Sobe
Inkrementierung
Dekrementierung
Ausdrcke
Typen
Postfix und Prfix
ganzz. Typen
und Zeiger
35
Operatoren (3)
Zuweisungs-Operatoren und sonstige Operatoren
=
Wertzuweisung
Zuweisung
Alle Typen
+=
-=
*=
/=
%=
Addition
Subtraktion
Multiplikation
Division
Divisionsrest
Arithmetik
und
Zuweisung
Zahlen, mit
Einschrnkungen,
Adressen
nur ganze Zahlen
&=
|=
^=
<<=
>>=
bitw. UND-Verknpfung
bitw. ODER-Verknpfung
bitw. Eckl.-Oder-Verkn.
bitw. Linksverschieben
bitw. Rechtsverschieben
Bitoperationen
und
Zuweisung
?:
,
ganzz. Typen
Ausdrcke
Ausdrcke
36
Einfache Anweisungen
Arithmetische Operatoren
Einfache Zuweisung =
Beispiel: summe=64;
Addition + bzw. +=
Beispiele: summe = zahl + 61;
summe = summe + 4;
summe += 4;
Subtraktion - bzw. -=
Multiplikation * bzw. *=
Division / bzw. /=
Modulo-Operator % bzw. %=
und weitere Operatoren ...
Peter Sobe
Jede Anweisung
wird durch ein
Semikolon
abgeschlossen
37
38
Vergleich
Beispiele:
if (zahl < 64) ...
if (zahl == 16) ...
if ((zahl >= 0) && (zahl <= 64)) ... // zahl aus dem Bereich [0..64]
bool bo = 5 > 7; // bo erhlt den Wert false
int a = 5 > 7; // a erhlt den Wert 0
int b = 5 < 7; // b erhlt den Wert 1
Peter Sobe
39
Logische Verknpfungen
Logische Verknpfungsoperatoren
Logisches Und &&
Logisches Oder ||
Logisches Nicht !
Beispiele:
if ( (!(zahl < 0)) && (!(zahl > 64))) ... // Alle drei Abfragen sind gleich
if ( (zahl >= 0) && (zahl <= 64) ) ... // bedeutend, sie testen, ob zahl
if ( zahl >= 0 && zahl <= 64 ) ... // in dem Bereich 0..64 liegt
Peter Sobe
40
41
Post-Increment:
// entspricht
int zahl2 =PreInc(zahl1);
// entspricht
int zahl2 =PostInc(zahl1);
// mit
int PreInc(int& i)
{
i = i + 1;
return i;
}
// mit
int PostInc(int& i)
{
int temp=i;
i = i + 1;
return temp;
}
Peter Sobe
42
2
3
/%
+-
binre arithmetische
Operatoren
<< >>
Shift-Operationen
5
6
Vergleichsoperatoren
7
8
9
&
^
|
Bitoperationen
10
11
&&
||
logische
Verknpfungen
12
Zuweisungsoperatoren
13
Komma-Operator
43
Inhalt
Inhalt:
4. Programmiersprache C
4.1 Programmaufbau in C
4.2 Basisdatentypen und einfache Anweisungen
4.3 Steuerfluss-Konstrukte
4.4 Arbeit mit indizierten Gren (Felder)
4.5 Arbeit mit Pointern
4.6 Zeichen und Zeichenketten
4.7 Funktionen
4.8 Strukturen
4.9 Typen, Variable und Konstante
Peter Sobe
44
4.3 Steuerfluss-Konstrukte
Peter Sobe
Verbundanweisung
if-Anweisung
switch-case-Konstrukt
while-Schleife
do-Schleife
for-Schleife
break-Anweisung
continue-Anweisung
45
Verbundanweisung
Verbundanweisung
Eine Verbundanweisung dient dazu, mehrere Anweisungen zu
einer zusammenzufassen.
Zu Beginn knnen auch Vereinbarungen stehen, die
dann aber nur innerhalb dieser Verbundanweisung gelten.
Eine Verbundanweisung kann auch leer sein, sie kann nur
Anweisungen enthalten, und sie kann auch nur Vereinbarungen
enthalten. Letzteres ist im allgemeinen nicht sinnvoll.
Beispiel in C:
{ float buffer;
buffer = x; x = y; y = buffer;
}
Peter Sobe
46
47
if-Anweisung (1)
Die if-Anweisung ist das Ausdrucksmittel fr die Selektion in C, C++.
Bedingung
ja
nein
Anw
if ( Bedingung) Anw;
if (Bedingung)
Verbundanweisung
Beispiel:
int monat;
printf("Bitte Monat Ihres Geburtsdatums eingeben:");
scanf("%d",&monat);
if (monat<1 || monat>12)
{ printf(falscher Wert fr Monat eingegeben!\n");
exit(EXIT_FAILURE);
}
Peter Sobe
48
if-Anweisung (2)
if ( Bedingung ) Anw1;
else Anw2;
Bedingung
ja
Anw1
nein
Anw2
if (Bedingung)
Verbundanweisung1
else
Verbundanweisung2
Beispiel:
char kuehlen = 0, heizen = 0;
if (temperatur-zielwert > 2)
{ printf("zu warm -> kuehlen\n");
kuehlen = 1;
}
else {
if (zielwert temperatur > 2 )
{ printf(zu kalt -> heizen\n");
heizen = 1;
}
} Peter Sobe
Informatik I, Wintersemester 11/12
49
?-Operator anstelle if
Bedingung
ja
nein
var1 = var2 var1 = var3
If else Konstruktion:
if ( Bedingung ) var1 = var2;
else var1 = var3;
Mit ?-Operator:
// Bedingte Zuweisung
var1 = (Bedingung ? var2 : var3 );
Bedingung
ja
nein
var1 = wert var2 = wert
If else Konstruktion:
if ( Bedingung ) var1 = wert;
else var2=wert;
Peter Sobe
Mit ?-Operator:
// Bedingte Zuweisung
(Bedingung ? var1 : var2 ) = wert;
50
switch-case-Konstrukt (1)
Zur Selektion unter mehreren alternativen Zweigen
Fallausdruck
Wert1 Wert2
Anw_1 Anw_2
...
sonst
... Anw_n Anw_0
switch(Fallausdruck)
{
case Wert_1:
Anw_1; break;
case Wert_2:
Anw_2; break;
case Wert_n:
Anw_n; break;
default: // kann entfallen
Anw_0;
}
Peter Sobe
51
switch-case-Konstrukt (2)
Beispiel
unsigned int tag, monat, jahr;
// Eingabe des Datums
switch(monat)
{
case 1:
printf("Januar"); break;
case 2:
printf("Februar"); break;
case 3:
printf("Maerz");break;
default:
printf("-undefiniert-");
}
Peter Sobe
52
while-Schleife (1)
Allgemeine Formen:
Bedingung
Anweisung
while ( Bedingung )
Verbundanweisung
53
while-Schleife (2)
Beispiel:
int summe = 0;
int i = 10;
while (i >= 1)
{ // entspricht while (i>0), entspricht while (i)
summe += i;
--i; // oder i--;
}
printf(Die Summe der Zahlen von 1 bis 10 ist %d \n, summe);
.
Peter Sobe
54
do-while-Schleife (1)
Allgemeine Formen:
Anweisung
Bedingung
55
do-while-Schleife (2)
Beispiel:
int summe = 0;
int i = 10;
do {
summe += i;
--i;
} while (i >= 1);
printf(Die Summe der Zahlen von 1 bis 10 ist %d \n,summe);
Peter Sobe
56
for-Schleife (1)
Entsprechende Form:
Zhlzyklus:
Lv = awert (s) ewert
Anw
Allgemeine Form:
for ( Init-Ausdruck ; Bedingung ; Schritt-Ausdruck )
Anweisung
for ( Init-Ausdruck ; Bedingung ; Schritt-Ausdruck )
Verbundanweisung
Solange die Bedingung erfllt ist, wird die Anweisung wiederholt.
Die Ausdrcke in der for-Schleife knnen auch leer sein.
Peter Sobe
57
for-Schleife (2)
Beispiel:
int i;
int summe = 0;
for (i = 10; i > 0; --i)
{
summe += i;
}
printf(Die Summe ist %d \n,summe);
Peter Sobe
58
for-Schleife (3)
Wirkungsweise einer for-Schleife als PAP:
for ( Init-Ausdruck ; Bedingung ; Schritt-Ausdruck )
Anweisung
Init-Ausdruck
nein
Bedingung
ja
Anweisung
Schritt-Ausdruck
Peter Sobe
59
break-Anweisung
Die break-Anweisung kann in allen Schleifen verwendet werden, um
die aktuelle Iteration vorzeitig zu beenden, d.h. vor Erreichen der
normalen Ende-Bedingung. Es wird danach aus der Schleife
herausgegangen.
Anwendung fr while-, do-while- und for-Schleifen
Beispiel:
for (i=0; i<imax; i++)
{ if (bedingung1) { break; }
...
if (bedingung2) { break; }
...
if (bedingung3) { break; }
...
}
Peter Sobe
60
continue-Anweisung
Die continue-Anweisung kann in allen Schleifen verwendet werden,
um die aktuelle Ausfhrung des Schleifenkrpers vorzeitig zu
beenden, d.h. vor Erreichen der normalen Ende-Bedingung. Es wird
dann mit der folgenden Iteration weiter gemacht.
Anwendung fr while-, do-while- und for-Schleifen
Beispiel:
for (i=0; i<imax; i++)
{
// do something
...
if (bedingung) { continue; }
...
// do somethinge else
...
}
Peter Sobe
61
Peter Sobe
62
Inhalt
Inhalt:
4. Programmiersprache C
4.1 Programmaufbau in C
4.2 Basisdatentypen und einfache Anweisungen
4.3 Streuerfluss-Konstrukte
4.4 Arbeit mit indizierten Gren (Felder)
4.5 Arbeit mit Pointern
4.6 Zeichen und Zeichenketten
4.7 Funktionen
4.8 Strukturen
4.9 Typen, Variable und Konstante
Peter Sobe
63
Felder in C
Felder stellen eine Reihung von Elementen gleichen Typs dar. Man
spricht auch von Vektoren oder arrays. Durch die Reihung
(hintereinander speichern) wird eine Ordnungsrelation ber die
Nummer (Position) des Elementes festgelegt. ber diese Nummer
(Index) wird dabei auch der Zugriff zum betreffenden Element
vorgenommen. In C hat das 1.Element die Nummer 0!
Element n-1
64
Beispiel:
float a[10];
a ist der Name des Feldes
10 ist die Anzahl der Elemente (a0 a1 a2 ... a9)
float ist der Typ der Elemente
R.Gromann / P. Sobe
65
Man beachte, dass die Anzahl der Elemente eine Konstante sein
muss. D.h. sind von Fall zu Fall unterschiedliche Elementanzahlen
vorhanden, so muss trotzdem das Feld mit einer konstanten, max.
notwendigen Elementeanzahl deklariert werden.
Innerhalb dieser maximalen Anzahl kann jeweils mit unterschiedlich
vielen Elementen gearbeitet werden. Der Speicherplatz ist fr die
maximale Anzahl reserviert, aber es werden aktuell ggf. weniger
Elemente belegt.
R.Gromann / P. Sobe
66
67
68
Mehrdimensionale Felder
Mehrdimensionale Felder (z.B. Matrizen als 2-dimensionale
Felder in der Mathematik) werden analog zum
eindimensionalen Fall deklariert.
Eine zustzliche Dimension wird durch eine weitere
Indexklammer angegeben.
Beispiel: float matrix[3][4];
dies ist eine Matrix mit 3 Zeilen und 4 Spalten. Der Zeilenindex
wird immer zuerst variiert. Diese Matrix hat die Struktur:
a00 a01 a02 a03
a10 a11 a12 a13
a20 a21 a22 a23
R.Gromann / P. Sobe
69
70
71