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

Slides:



Advertisements
Ähnliche Präsentationen
Hochschule Fulda – FB ET Sommersemester 2010
Advertisements

Forschungszentrum caesar
Funktionen und Module Einführung anhand des Beispiels Wörter sortieren Timm Grams Fachhochschule Fulda Fachbereich Elektrotechnik und Informationstechnik.
Hochschule Fulda – FB ET Sommersemester 2010
Hochschule Fulda – FB ET Sommersemester 2010
Hochschule Fulda – FB ET Sommersemester 2010
Hochschule Fulda – FB ET Sommersemester 2010
Hochschule Fulda – FB ET Sommersemester 2010
Hochschule Fulda – FB ET Sommersemester 2010
Einführung in JavaScript II
der Universität Oldenburg
Java- Syntax.
Imperative Programmierung
Boolesche Ausdrücke Ist der Rückgabewert eines Ausdrucks vom Typ boolean, so wird dieser als Boolescher Ausdruck bezeichnet (nach dem Mathematiker George.
Hochschule Fulda – FB ET Sommersemester 2010
Informatik II Grundlagen der Programmierung Programmieren in C Add Ons Hochschule Fulda – FB ET Sommersemester Peter.
Die Skriptsprache Perl (2) Wolfgang Friebel DESY Zeuthen.
Batch-Programmierung Grundlagen
DVG Ablaufsteuerung
Einführung in die Programmierung Anweisungen und Datentypen
Grundkonzepte Java - Klassendefinition
Informatik 1 Übung 2.
Programmieren in C Zeichen-/Stringfunktionen Dynamischer Speicher
Einführung in die Programmierung
Wiederholte Programmausführung
2. Zustandsorientiertes Modellieren 2.1 Einfachauswahl
Programmieren in C Einführung
Programmieren in C Einführung
Programmieren in C Dynamische Listen / Bäume
Programmieren in C Grundlagen C 5
Informatik II Grundlagen der Programmierung Programmieren in C Benutzerinteraktion / Ein- und Ausgabe Hochschule Fulda – FB ET Sommersemester
Einführung in PHP.
Einführung in PHP 5.
CuP - Java Sechste Vorlesung Entspricht ungefähr Kapitel 3. 1 – 3
MODULA-2.
Datentypen: integer, char, string, boolean
Agenda für heute, 20. April, 2006 Wiederholte ProgrammausführungWiederholte Programmausführung Algorithmische Grundlagen Bedingungen zum Abbruch von Programmschleifen.
Agenda für heute, 7. April, 2005 Bedingte ProgrammausführungBedingte Programmausführung Algorithmische Grundlagen Vergleichsoperatoren, Wahrheitswerte.
Agenda für heute, 14. April, 2005 Wiederholte ProgrammausführungWiederholte Programmausführung Algorithmische Grundlagen Bedingungen zum Abbruch von Programmschleifen.
Programmieren in C Grundlagen C 3 Hochschule Fulda – FB AI Wintersemester 2013/14 Peter Klingebiel, HS Fulda, DVZ.
Programmieren in C Grundlagen C 2
BMEVIEEA100 Grundlagen der Programmierung
Vorlesung 3. if else Anweisung if (Ausdruck) Anweisung1 else Anweisung2 Ausdruck hat einen von 0 verschiedenen Wert, so wird Anweisung 1 ausgeführt. Bei.
PHP: Operatoren und Kontrollstrukturen
Informatik II Grundlagen der Programmierung Programmieren in C printf() mit variabler Feldbreite Hochschule Fulda – FB ET Sommersemester 2014
Programmieren in C Einführung
Hochschule Fulda – FB ET Sommersemester 2014
Hochschule Fulda – FB ET Sommersemester 2014
Hochschule Fulda – FB ET Sommersemester 2014
Hochschule Fulda – FB ET Sommersemester 2014
Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014
Informatik II Grundlagen der Programmierung Programmieren in C Ausflug printf() Hochschule Fulda – FB ET Sommersemester 2014
Hochschule Fulda – FB ET Sommersemester 2014
Programmieren in C Annäherung an C
Programmieren in C Grundlagen C 3
Programmieren in C Module und Bibliotheken Hochschule Fulda – FB AI Sommersemester Peter Klingebiel, HS Fulda, DVZ.
Programmieren in C Dateien
Programmieren in C Grundlagen C 2
Hochschule Fulda – FB AI Sommersemester 2014
Programmieren in C Sortieren, Suchen
Hochschule Fulda – FB AI Sommersemester 2014
Java Syntaxdiagramme Buchstabe A B Z a z ... Ziffer
Anführungszeichen?! echo 'Apfel$atf'; // ergibt: Apfel$aft
Software Engineering Struktogramme
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
TRUE und FALSE in C Der Wert 0 steht für FALSE Jeder von 0 verschiedene Wert steht für TRUE FALSE wird als 0 dargestellt TRUE wird als 1 dargestellt.
Programmieren in C Grundlagen C 2
Programmieren in C Wie speichert C
Unterschiedliche Kontrollstrukturen
 Präsentation transkript:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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_3 ... ... else if (ausdruck_n) anweisung_n else /* kann auch fehlen */ anweisung_else Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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