Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen /...

66
Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014 http://c-et.rz.hs-fulda.de Peter Klingebiel, HS Fulda, DVZ

Transcript of Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen /...

Page 1: Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014 .

Informatik IIGrundlagen der Programmierung

Programmieren in C

Programmstrukturen / Kontrollstrukturen

Hochschule Fulda – FB ET

Sommersemester 2014

http://c-et.rz.hs-fulda.de

Peter Klingebiel, HS Fulda, DVZ

Page 2: Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014 .

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 2Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 2

Programmstrukturen 1

• Programmstrukturen legen fest, wie die Anweisungen des Programms ausgeführt werden

• seqentiell– mach dies - dann mach das - dann mach jenes

• bedingt– wenn dies zutrifft - dann mach das

• wiederholt– solange dies zutrifft - mach jenes

• Programmstrukturen steuern Programmfluss

Page 3: Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014 .

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 3

Programmstrukturen 2

• Programmstrukturen im allgemeinsten Sinn:

Page 4: Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014 .

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 4Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 4

Anweisungen

• Einfache Anweisungen (statements oder genauer expressions) werden mit einem Semikolon ; abgeschlossen

• Eine "leere" Anweisung besteht nur aus einem Semikolon ;

• Typische Beispiele:int summe; // Definition summeint a, b = 123; // Definition a, ba = b; // Zuweisungsumme = a + b; // arithm. Operationsumme++; // Inkrementprintf("%d", a); // Funktionsaufruf; // leere Anweisung

Page 5: Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014 .

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 5Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 5

Ausdrücke

• Ausdrücke (expressions)– Definitionen, Zuweisungen, …

– arithmetische, logische, … Operationen, …

• Bei Zuweisungen zu beachten: gültiger l-value und r-value– l-value (left, location) Variable mit Speicherplatz,

der ein Wert zugewiesen werden kann

– r-value (right, read) auswertbarer Ausdruck / Wert

• Beispiele:int i, j;i = 9 / 3; // i - gültiger l-value 45 = j; // 45 - ungültiger l-value

Page 6: Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014 .

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 6

Blöcke 1

• Zusammenfassung mehrerer Anweisungenin einen Block (compound statement)

• Blöcke werden mit { } geklammert • bei Funktionen und Kontrollstrukturen• aber auch lokale Blöcke, Unterblöcke

– zur Definition z.B. von lokalen Variablen,insbesondere Hilfsvariablen

• legt Lebensdauer von Variablen fest• legt Sichtbarkeit (Scope) von Variablen fest• Blöcke werden nicht mit einem Semikolon

abgeschlossen• "leerer" Block: {}

Page 7: Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014 .

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 7

Blöcke 2

Page 8: Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014 .

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 8Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 8

Kontrollstrukturen

• Alle Programme können mit drei Arten von Kontrollstrukturen ausgedrückt werden

• Sequenz– Anweisungen / Ausdrücke werden der Reihe nach

abgearbeitet und ausgeführt

• bedingte Verzweigung, C kennt drei Arten: – if– if / else– switch

• Wiederholung, C kennt drei Arten:– while– do / while– for

Page 9: Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014 .

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 9Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 9

Sequenzen 1

• Anweisungen werden nacheinander ausgeführt

• Beispiel:i = 4711; // statement1i = i - 123; // statement2printf("%d\n", i); // statement3

Page 10: Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014 .

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 10Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 10

Sequenzen 2

• Sequenz von Anweisungen kann auch als Flussdiagramm dargestellt werden

Page 11: Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014 .

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 11Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 11

Entscheidungen 1

Page 12: Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014 .

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 12Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 12

Entscheidungen 2

• Aktion soll nur dann ausgeführt werden, wenn eine Bedingung zutrifft:

Einsatz von Verzweigungen Programmierung von Entscheidungen• Bedingung ist ein logischer Wahrheitswert,

also true (in C != 0) oder false (in C == 0)• Bedingung kann auch ein Ausdruck sein,

der einen Wahrheitswert liefert• Beispiele:

– (x < 4711)– ((c & EAD_R) && (c & EAD_D1))– (i = 1) // Zuweisung!

Page 13: Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014 .

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 13

if 1

• if• Pseudocode

...

temperatur messenwenn temperatur < 15° dann heizung einschalten...

• C-Code...

temp = mess_temperatur();if(temp < 15) heizung(ON);...

Page 14: Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014 .

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 14

if 2

• Bedingte Anweisung if• Syntax:if (ausdruck) anweisung

• Struktogramm

Page 15: Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014 .

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 15

if 3

• Flussdiagramm

Page 16: Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014 .

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 16

if 4

• Beispiel: Zeichen groß kleinint c;...c = getchar();if ( (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z')){ if (c >= 'A' && c <= 'Z') c = c – 'A' + 'a'; else c = c – 'a' + 'A';}...

Page 17: Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014 .

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 17

if 5

• Beispiel: ctoggle.c

Page 18: Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014 .

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 18

if 6

• nach Bedingung (expression) darf kein Semikolon stehen

• sonst wird statement immer ausgeführt:if(temperatur > 15); heizung(OFF); // immer ausgeführt!

• nach statement Semikolon erforderlich heizung(OFF);

• folgt nach (expression) nur ein statement, sind Blockklammern { } nicht erforderlichif(temperatur > 15) heizung(OFF);

Page 19: Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014 .

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 19

if 7

• zur Sicherheit sollten aber immer Blockklammern { } verwendet werden

• sonst wird 2. Statement immer ausgeführt:if(temperatur > 15) heizung(OFF); printf(OFF!); // immer ausgeführt

• Einrückung hat keine Bedeutung• Korrekt:if(temperatur > 15) { heizung(OFF); printf(OFF!);}

Page 20: Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014 .

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 20

if 8

• Anweisung kann ein Block sein, bei mehreren Ausdrücken Verwendung von { } notwendig

• Beispiel:int c, i;...c = getchar();

if (c != EOF) { if(i < 32) { putchar(c); i++ }}

Page 21: Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014 .

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 21

if 9

• in (expression) unbedingt unterscheiden:• Zuweisungsoperator =• Vergleichsoperator ==• Bedingung ist wegen Zuweisung immer wahr,

wenn b != 0:if(a = b) printf(a gleich b!); // immer!

• denn: Zuweisung ist ein gültiger Ausdruck• gemeint war aber eher:if(a == b) printf(a gleich b!); // wenn a == b

Page 22: Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014 .

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 22

if 10

• Integerwerte in Bedingungen (expression) werden als Wahrheitswerte ausgewertet:

• True (expression) ist ungleich 0• False (expression) ist gleich 0• Beispiel:if((x % 2) == 0) printf(%d ist gerade!, x);

• Äquivalent:if( !(x % 2)) printf(%d ist gerade!, x);

• if(expr != 0) entspricht if(expr)

Page 23: Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014 .

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 23

if else 1

• if else• Pseudocode

temperatur messenwenn temperatur < 15° dann heizung einschaltensonst heizung ausschalten

• C-Codetemp = mess_temperatur();if(temp < 15) heizung(ON);else heizung(OFF);

Page 24: Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014 .

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 24

if else 2

• Bedingte Anweisung if … else if (ausdruck) anweisungelse anweisung

Page 25: Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014 .

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 25

if else 3

• Flussdiagramm

Page 26: Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014 .

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 26

if else 4

• Werden zwei if-Anweisungen nacheinander benötigt, gehört ein else immer zum direkt voranstehenden ifint n = 0, a = 4, b = 2, z = 0;if(n > 0) | if(n > 0) { if(a > b) | if(a > b) z = a; | z = a; else | } else z = b; | z = b;

• Wie ist der Wert von z?• Blockstruktur beachten!

Page 27: Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014 .

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 27

if else if else 1

• Mehrfachverzweigungen if…else if…else if (ausdruck_1) anweisung_1else if(ausdruck_2) anweisung_2else if(ausdruck_3) anweisung_3... ...else if (ausdruck_n) anweisung_nelse /* kann auch fehlen */ anweisung_else

Page 28: Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014 .

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 28

if else if else 2

• Syntaxdiagramm

Page 29: Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014 .

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 29

if else if else 3

• Beispiel: Notenberechnungint punkte;float note;...if(punkte <= 30) note = 5.0;else if(punkte <= 50) note = 4.0;else if(punkte <= 65) note = 3.0;else if(punkte <= 80) note = 2.0;else note = 1.0;

Page 30: Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014 .

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 30

Bedingte Bewertung

• Schon bekannt ? : expr1 ? expr 2 : expr3

• Verkürzte Formulierung von Bedingungen• Auswertung

– Erst Auswertung von expr1– Wenn expr1 ≠ 0 dann gesamter Ausdruck expr2– Sonst gesamter Ausdruck expr3

• Beispiel max(a, b) und min(a, b):

Page 31: Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014 .

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 31

Beispiel Schaltjahr 1

• Algorithmus zur Schaltjahrbestimmung:• ein Jahr ist ein Schaltjahr,

– wenn die Jahreszahl ohne Rest durch 4 teilbar ist– wobei alle 100 Jahre das Schaltjahr ausfällt– es sei denn, die Jahreszahl ist durch 400 teilbar

• Formulieren Sie ein Programm,– das eine Jahreszahl jahr einliest– die Variable schaltjahr auf true setzt, wenn jahr ein Schaltjahr ist

– jahr und „ist ein Schaltjahr“ oder „ist kein Schaltjahr“ ausgibt

Page 32: Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014 .

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 32

Beispiel Schaltjahr 2

Page 33: Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014 .

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 33

Beispiel Schaltjahr 3

• Berechnung ohne Entscheidungen

Page 34: Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014 .

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 34

switch 1

• Mehrfache Alternative / Fallunterscheidungswitchswitch(expression){ case const1: statements1;

break; case const2: statements2; break; . . . default: statements_default;}

Page 35: Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014 .

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 35

switch 2

• expression muss Integerergebnis liefern, also char, short, int, long

• expression wird ausgewertet …• … und zur Stelle const<n> gesprungen,

die mit dem expression-Wert übereinstimmt• bzw. zu default, wenn es keine

Übereinstimmung gibt• const<n> muss eine Konstante sein• Oft letzte Anweisung von statements<n> break, um switch zu terminieren

Page 36: Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014 .

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 36

switch 3

• Syntaxdiagramm

Page 37: Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014 .

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 37

switch 4

Page 38: Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014 .

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 38

switch 5

• Beispiel#define red 1#define green 2#define blue 3int color;switch(color) { case red: printf("Farbe: rot\n"); break; case green: printf("Farbe: grün\n"); break; case blue: printf("Farbe: blau\n"); break; default: printf("Farbe: nicht definiert!\n");}

Page 39: Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014 .

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 39

switch 6

• Beispiel: lettercount.c

Page 40: Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014 .

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 40Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 40

Schleifen 1

Page 41: Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014 .

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 41Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 41

Schleifen 2

• Sollen Aufgaben wiederholt ausgeführt werden, sind Schleifen in C zu verwenden

• C kennt drei Arten von Schleifen• Schleifen mit abweisendem Charakter

Schleifenbedingung (expression) wird vor Durchlauf durch Schleifenkörper geprüft

• Schleifen mit nicht abweisendem Charakter Schleifenkörper wird durchlaufen und danach wird Schleifenbedingung geprüft

• Schleifen mit bekannter fester Wiederholung oder fester Schrittweite

Page 42: Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014 .

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 42

while 1

• Abweisende Schleife while, manchmal auch kopfgesteuerte Schleife genannt

• Syntaxwhile (ausdruck) anweisung

• Bedingung ausdruck wird vor Ausführung vom Schleifenkörper anweisung geprüft

• Schleifenkörper wird nur ausgeführt, wenn Bedingung ausdruck wahr ist

Page 43: Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014 .

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 43

while 2

• Struktogramm

• Beispiel:int c;while ((c = getchar()) != EOF){ putchar(c);}

Page 44: Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014 .

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 44

while 3

• Flussdiagramm

Page 45: Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014 .

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 45

while 4

• Schleifenbedingung expression• Schleifenrumpf statement• Beispiel:• Pseudocodeinitialisiere produkt mit 2solange produkt <= 25 ist verdopple produkt

• C-Codeint produkt = 2;while(produkt <= 25) { produkt = 2 * produkt;}

Page 46: Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014 .

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 46

while 5

• Schleifen wiederholte Ausführung von Aufgaben

Schleifen sollen meist irgendwann enden• das ist nicht der Fall,• wenn es beabsichtigt ist

– while(1) { } // Endlosschleife– Schleife wird dann i.d.R. im Schleifenkörper verlassen– if(expression) break; // Schleife terminieren

• oder ein Programmierfehler verhindert, dass Schleifenbedingung jemals false wird

Page 47: Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014 .

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 47

do while 1

• Nicht-annehmende Schleife do while, machmal auch: fußgesteuerte Schleife

• Syntaxdo anweisungwhile (ausdruck)

• Bedingung ausdruck wird erst am Ende des Schleifenkörperts geprüft

Schleife wird mindestens einmal durchlaufen

Page 48: Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014 .

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 48

do while 2

• Struktogramm

• Beispiel:do { printf(Zahl zwischen 4 und 22: ); scanf(%d, &zahl);} while(zahl < 4 || zahl > 22);

Page 49: Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014 .

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 49

do while 3

• Flussdiagramm

Page 50: Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014 .

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 50

Kombination 1

• eine Schleife innerhalb einer anderen Schleife ist möglich

• allgemein: Kontrollstrukturen können verschachtelt werden

• die Verschachtelungstiefe ist beliebig• damit sind komplexe Abläufe zur Realisierung

von Algorithmen möglich• Aufgabe: Vom Zahlenbereich 1 bis 9 soll für jede

Zahl die Fakultät n! = 1*2*..*n berechnet und ausgegeben werden

Page 51: Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014 .

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 51

Kombination 2

Page 52: Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014 .

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 52

Kombination 3

Page 53: Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014 .

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 53

for 1

• Laufanweisung oder abweisenden Schleife mit for

• Syntaxfor(ausdruck1; ausdruck2; ausdruck3) anweisung

Page 54: Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014 .

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 54

for 2

• Flussdiagramm

Page 55: Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014 .

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 55

for 3

• Beispiel: Summenbildung von 1 … 100int x, i;

x = 0;for (i = 1; i <= 100; i++) x = x + i;

• eine Alternativeint x, i;

for (x = 0, i = 1; i <= 100; i++) x += i;

Page 56: Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014 .

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 56

for 4

• die for-Schleife ist eigentlich eine while-Schleifeausdruck1while(ausdruck2){ anweisung ausdruck3}

• Beispiel von vorhin– int prod = 2;while(prod <= 25) { prod = 2 * prod}

– int prod;for(prod = 2; prod <= 25; prod *= 2) ;

Page 57: Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014 .

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 57

for 5

Page 58: Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014 .

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 58

Komma-Operator 1

• Der Komma-Operator , bewirkt, dass die Ausdrücke auf beiden Seiten des Kommas von links nach rechts ausgewertet werden

• Allgemeine Formexpression1, expression2

• zuerst wird expression1, dann expression2 ausgewertet

• der Gesamtausdruck erhält den Wert des Ausdrucks rechts vom Komma expression2

Page 59: Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014 .

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 59

Komma-Operator 2

Page 60: Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014 .

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 60

Komma-Operator 3

• Häufige Verwendung des Komma-Operators in for-Schleifen

• in der Initialisierung (expression1)• in der Re-Initialisierung (expression3)• Beispiel:// Summenberechnung ohne Schleifenrumpfint i, sum; // Kein Komma-Operator

for(i=1, sum=0; i<=10; sum += i, i++) ;

Page 61: Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014 .

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 61

break und continue 1

• Schleifensteuerung• break

– bricht die Ausführung einer Schleife bzw. switch-Anweisung ab und verlässt diese

• continue– bricht den aktuellen Schleifendurchlauf ab– setzt mit Ausführung des Schleifenkopfes fort

• Endlosschleifewhile(1) ...for(;;) ...

Page 62: Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014 .

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 62

break und continue 2

• Beispiel: eingabegesteuertes Programmint c;while(1) { // Endlosschleife c = getchar(); // Kommando lesen if(c = 'Q') // Q -> Beenden break; // while verlassen switch(c) { case 'A': funca(); break; // switch verlassen case 'B': funcb(); break; // switch verlassen ... }}

Page 63: Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014 .

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 63

break und continue 3

Page 64: Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014 .

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 64

Sprünge 1

• Mit der Sprunganweisung kann zu einer beliebigen Marke (Label) gesprungen werden

• name– beliebiger Name einer Marke

• goto– Sprunganweisung: Verzweigung zum Label name

• Beispiel:marke:…goto marke;

Page 65: Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014 .

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 65

Sprünge 2

• es gibt nur ganz wenige Ausnahmen, bei denen goto sinnvoll einsetzbar ist– … etwa in Echtzeitanwendungen – … oder bei systemnaher Programmierung– … oder um aus sehr tiefen Verschachtelungen

sehr schnell wieder zu einer wohldefinierten Stelle zurückzukehren

• goto ist (fast) immer verzichtbar• goto macht Programme fehleranfällig• goto ist schlechter Programmierstil

Page 66: Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014 .

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 66

Sprünge 3