Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

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

Ähnliche Präsentationen


Präsentation zum Thema: "Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014."—  Präsentation transkript:

1 Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014 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 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 2

3 Programmstrukturen 2 Programmstrukturen im allgemeinsten Sinn:
Programmieren 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 summe int a, b = 123; // Definition a, b a = b; // Zuweisung summe = a + b; // arithm. Operation summe++; // Inkrement printf("%d", a); // Funktionsaufruf ; // leere Anweisung Programmieren in C - Peter Klingebiel - HS Fulda - DVZ Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 4

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 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 5

6 Blöcke 1 legt Lebensdauer von Variablen fest
Zusammenfassung mehrerer Anweisungen in 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: {} Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

7 Blöcke 2 Programmieren 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 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 8

9 Sequenzen 1 Anweisungen werden nacheinander ausgeführt
Beispiel: i = 4711; // statement1 i = i - 123; // statement2 printf("%d\n", i); // statement3 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 9

10 Sequenzen 2 Sequenz von Anweisungen kann auch als Flussdiagramm dargestellt werden Programmieren in C - Peter Klingebiel - HS Fulda - DVZ Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 10

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

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! Programmieren in C - Peter Klingebiel - HS Fulda - DVZ Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 12

13 if 1 if Pseudocode ... temperatur messen wenn temperatur < 15° dann heizung einschalten ... C-Code ... temp = mess_temperatur(); if(temp < 15) heizung(ON); ... Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

14 if 2 Bedingte Anweisung if Syntax: if (ausdruck) anweisung
Struktogramm Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

15 if 3 Flussdiagramm Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

16 if 4 Beispiel: Zeichen groß  klein int 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'; } ... Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

17 if 5 Beispiel: ctoggle.c 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 erforderlich if(temperatur > 15) heizung(OFF); 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!); } 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++ } } 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 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) Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

23 if else 1 if else Pseudocode temperatur messen wenn temperatur < 15° dann heizung einschalten sonst heizung ausschalten C-Code temp = mess_temperatur(); if(temp < 15) heizung(ON); else heizung(OFF); Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

24 if else 2 Bedingte Anweisung if … else
if (ausdruck) anweisung else anweisung Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

25 if else 3 Flussdiagramm 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 if int 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! Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

27 if else if else 1 Mehrfachverzweigungen if…else if…else
if (ausdruck_1) anweisung_1 else if(ausdruck_2) anweisung_2 else if(ausdruck_3) anweisung_ else if (ausdruck_n) anweisung_n else /* kann auch fehlen */ anweisung_else Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

28 if else if else 2 Syntaxdiagramm
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

29 if else if else 3 Beispiel: Notenberechnung int 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; 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): 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 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

32 Beispiel Schaltjahr 2 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

33 Beispiel Schaltjahr 3 Berechnung ohne Entscheidungen
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

34 switch 1 Mehrfache Alternative / Fallunterscheidung switch switch(expression){ case const1: statements1; break; case const2: statements2; break; default: statements_default; } 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 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

36 switch 3 Syntaxdiagramm
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

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

38 switch 5 Beispiel #define red 1 #define green 2 #define blue 3 int 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"); } Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

39 switch 6 Beispiel: lettercount.c
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

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

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 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 41

42 while 1 Abweisende Schleife while, manchmal auch kopfgesteuerte Schleife genannt Syntax while (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 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

43 while 2 Struktogramm Beispiel: int c; while ((c = getchar()) != EOF){ putchar(c); } Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

44 while 3 Flussdiagramm Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

45 while 4 Schleifenbedingung  expression Schleifenrumpf  statement
Beispiel: Pseudocode initialisiere produkt mit 2 solange produkt <= 25 ist verdopple produkt C-Code int produkt = 2; while(produkt <= 25) { produkt = 2 * produkt; } 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 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

47 do while 1 Nicht-annehmende Schleife do while, machmal auch: fußgesteuerte Schleife Syntax do anweisung while (ausdruck) Bedingung ausdruck wird erst am Ende des Schleifenkörperts geprüft  Schleife wird mindestens einmal durchlaufen 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); Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

49 do while 3 Flussdiagramm
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 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

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

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

53 for 1 Laufanweisung oder abweisenden Schleife mit for
Syntax for(ausdruck1; ausdruck2; ausdruck3) anweisung Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

54 for 2 Flussdiagramm Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

55 for 3 Beispiel: Summenbildung von 1 … 100 int x, i; x = 0; for (i = 1; i <= 100; i++) x = x + i; eine Alternative int x, i; for (x = 0, i = 1; i <= 100; i++) x += i; Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

56 for 4 die for-Schleife ist eigentlich eine while-Schleife ausdruck1 while(ausdruck2){ anweisung ausdruck3 } Beispiel von vorhin int prod = 2; while(prod <= 25) { prod = 2 * prod } int prod; for(prod = 2; prod <= 25; prod *= 2) ; Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

57 for 5 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 Form expression1, expression2 zuerst wird expression1, dann expression2 ausgewertet der Gesamtausdruck erhält den Wert des Ausdrucks rechts vom Komma expression2 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

59 Komma-Operator 2 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 Schleifenrumpf int i, sum; // Kein Komma-Operator for(i=1, sum=0; i<=10; sum += i, i++) ; Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

61 break und continue 1 Schleifensteuerung break continue
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 Endlosschleife while(1) ... for(;;) ... Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

62 break und continue 2 Beispiel: eingabegesteuertes Programm int 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 } } Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

63 break und continue 3 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; 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 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

66 Sprünge 3 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 66


Herunterladen ppt "Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014."

Ähnliche Präsentationen


Google-Anzeigen