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 Peter Klingebiel, HS Fulda, DVZ

2 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ2 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

3 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ3 Programmstrukturen 2 Programmstrukturen im allgemeinsten Sinn:

4 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ4 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

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

6 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ6 Blöcke 1 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: {}

7 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ7 Blöcke 2

8 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ8 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

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

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

11 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ11Programmieren in C - Peter Klingebiel - HS Fulda - DVZ11 Entscheidungen 1

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

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

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

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

16 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ16 if 4 Beispiel: Zeichen groß klein int c;... c = getchar(); if ( (c >= 'A' && c = 'a' && c = 'A' && c <= 'Z') c = c – 'A' + 'a'; else c = c – 'a' + 'A'; }...

17 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ17 if 5 Beispiel: ctoggle.c

18 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ18 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);

19 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ19 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! ); }

20 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ20 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++ } }

21 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ21 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

22 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ22 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)

23 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ23 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);

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

25 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ25 if else 3 Flussdiagramm

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

27 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ27 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

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

29 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ29 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;

30 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ30 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):

31 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ31 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

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

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

34 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ34 switch 1 Mehrfache Alternative / Fallunterscheidung switch switch(expression){ case const1: statements1; break; case const2: statements2; break;... default: statements_default; }

35 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ35 switch 2 expression muss Integerergebnis liefern, also char, short, int, long expression wird ausgewertet … … und zur Stelle const gesprungen, die mit dem expression-Wert übereinstimmt bzw. zu default, wenn es keine Übereinstimmung gibt const muss eine Konstante sein Oft letzte Anweisung von statements break, um switch zu terminieren

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

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

38 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ38 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"); }

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

40 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ40Programmieren in C - Peter Klingebiel - HS Fulda - DVZ40 Schleifen 1

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

42 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ42 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

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

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

45 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ45 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; }

46 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ46 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

47 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ47 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

48 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ48 do while 2 Struktogramm Beispiel: do { printf( Zahl zwischen 4 und 22: ); scanf( %d, &zahl); } while(zahl 22);

49 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ49 do while 3 Flussdiagramm

50 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ50 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

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

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

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

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

55 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ55 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;

56 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ56 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) ;

57 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ57 for 5

58 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ58 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

59 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ59 Komma-Operator 2

60 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ60 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++) ;

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

62 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ62 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... } }

63 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ63 break und continue 3

64 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ64 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;

65 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ65 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

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


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

Ähnliche Präsentationen


Google-Anzeigen