Programmieren in C Grundlagen C 4 Hochschule Fulda

  • Slides: 51
Download presentation
Programmieren in C Grundlagen C 4 Hochschule Fulda – FB AI Wintersemester 2014/15 http:

Programmieren in C Grundlagen C 4 Hochschule Fulda – FB AI Wintersemester 2014/15 http: //c-ai. rz. hs-fulda. de Peter Klingebiel, HS Fulda, DVZ

Anweisungen • Anweisung im allgemeinsten Sinn: Programmieren in C - Peter Klingebiel - HS

Anweisungen • Anweisung im allgemeinsten Sinn: Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 2

Ausdrücke 1 • Ausdrücke (siehe auch früherer Abschnitt) – Definitionen, Zuweisungen, … – arithmetische,

Ausdrücke 1 • Ausdrücke (siehe auch früherer Abschnitt) – Definitionen, Zuweisungen, … – arithmetische, logische, … Operationen, … • Bei Zuweisungen zu beachten: gültiger l-value und r-value – l-value (left, location) Variable mit Speicherplatz – r-value (right, read) auswertbarer Ausdruck • Beispiel: int i, j; i = 9 / 3; 45 = j; /* gültiger l-value */ /* ungültiger l-value */ Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 3

Ausdrücke 2 • Sind die Zuweisungen korrekt? Programmieren in C - Peter Klingebiel -

Ausdrücke 2 • Sind die Zuweisungen korrekt? Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 4

Blöcke 1 • Zusammenfassung mehrerer Anweisungen • Geklammert mit { } • v. a.

Blöcke 1 • Zusammenfassung mehrerer Anweisungen • Geklammert mit { } • v. a. bei Funktionen, 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 • Bei Namensgleichheit ist Variable des innersten Blocks sichtbar Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 5

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

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

Kontrollstrukturen • Kontrolle des Programmablaufs abhängig von Ergebnis von Ausdrücken • Selektionen / bedingte

Kontrollstrukturen • Kontrolle des Programmablaufs abhängig von Ergebnis von Ausdrücken • Selektionen / bedingte Anweisungen – Einfache Alternative if … else – Mehrfache Alternative if … else – Fallunterscheidung switch • Iterationen / Schleifen – Abweisende Schleife while – Annehmende Schleife do … while – Laufanweisung for Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 7

Selektionen 1 • Bedingte Anweisung if • Syntax: if (ausdruck) anweisung • Struktogramm Programmieren

Selektionen 1 • Bedingte Anweisung if • Syntax: if (ausdruck) anweisung • Struktogramm Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 8

Selektionen 2 • Bedingte Anweisung if … else if (ausdruck) anweisung else anweisung Programmieren

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

Selektionen 3 • Anweisung kann ein Block sein, bei mehreren Ausdrücken Verwendung von {

Selektionen 3 • 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 10

Selektionen 4 • Beispiel: Zeichen groß klein und vice versa int c; . .

Selektionen 4 • Beispiel: Zeichen groß klein und vice versa int c; . . . c = getchar(); if ( (c >= 'A' && (c >= 'a' && { if (c >= 'A' && c = c – 'A' + else c = c – 'a' + }. . . c <= 'Z') || c <= 'z')) c <= 'Z') 'a'; 'A'; Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 11

Selektionen 5 • Beispiel: ctoggle. c Programmieren in C - Peter Klingebiel - HS

Selektionen 5 • Beispiel: ctoggle. c Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 12

Selektionen 6 • Mehrfache Alternative if…else if (ausdruck_1) anweisung_1 else if(ausdruck_2) anweisung_2 else if(ausdruck_3)

Selektionen 6 • Mehrfache Alternative 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 13

Selektionen 7 • Syntaxdiagramm Programmieren in C - Peter Klingebiel - HS Fulda -

Selektionen 7 • Syntaxdiagramm Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 14

Selektionen 8 • Mehrfache Alternative / Fallunterscheidung switch(ausdruck){ case k 1: anweisung_1; break; case

Selektionen 8 • Mehrfache Alternative / Fallunterscheidung switch(ausdruck){ case k 1: anweisung_1; break; case k 2: anweisung_2; break; . . . default: anweisung_default; } Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 15

Selektionen 9 • Syntaxdiagramm Programmieren in C - Peter Klingebiel - HS Fulda -

Selektionen 9 • Syntaxdiagramm Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 16

Selektionen 10 • Beispiel enum color { red, green, blue }; enum color col

Selektionen 10 • Beispiel enum color { red, green, blue }; enum color col = red; switch(col) { case red: printf("Farbe: rotn"); break; case green: printf("Farbe: grünn"); break; case blue: printf("Farbe: blaun"); break; default: printf("Farbe: nicht definiert!n"); } Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 17

Selektionen 11 • Beispiel: lettercount. c Programmieren in C - Peter Klingebiel - HS

Selektionen 11 • Beispiel: lettercount. c Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 18

Selektionen 12 • Beispiel: mydraw 3. c Programmieren in C - Peter Klingebiel -

Selektionen 12 • Beispiel: mydraw 3. c Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 19

Iterationen 1 • Abweisende Schleife while, manchmal auch kopfgesteuerte Schleife genannt • Syntax while

Iterationen 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 20

Iterationen 2 • Struktogramm • Beispiel: int c; while ((c = getchar()) != EOF){

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

Iterationen 3 • Annehmende Schleife do while, machmal auch fußgesteuerte Schleife genannt • Syntax

Iterationen 3 • Annehmende Schleife do while, machmal auch fußgesteuerte Schleife genannt • 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 22

Iterationen 4 • Struktogramm • Beispiel char *s 1, *s 2; do *s 2++

Iterationen 4 • Struktogramm • Beispiel char *s 1, *s 2; do *s 2++ = *s 1++; while (*s 1); Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 23

Iterationen 5 • Beispiel: stringcopy() mit while -Schleife void stringcopy(char *s 1, char *s

Iterationen 5 • Beispiel: stringcopy() mit while -Schleife void stringcopy(char *s 1, char *s 2) { while(*s 1) *s 2++ = *s 1++; *s 2 = ''; } • Beispiel: void stringcopy mit do-Schleife void stringcopy(char *s 1, char *s 2) { do *s 2++ = *s 1++; while(*s 1); } Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 24

Iterationen 6 • Laufanweisung oder abweisenden Schleife mit for • Syntax for(ausdruck 1; ausdruck

Iterationen 6 • Laufanweisung oder abweisenden Schleife mit for • Syntax for(ausdruck 1; ausdruck 2; ausdruck 3) anweisung Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 25

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

Iterationen 7 • 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 26

Iterationen 8 • for-Schleife ist eigentlich eine while-Schleife ausdruck 1 while(ausdruck 2){ anweisung ausdruck

Iterationen 8 • for-Schleife ist eigentlich eine while-Schleife ausdruck 1 while(ausdruck 2){ anweisung ausdruck 3 } • Beispiel: stringcopy() mit for void stringcopy(char *s 1, char *s 2) { for ( ; *s 1; s 1++, s 2++) *s 2 = *s 1; *s 2 = ''; } Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 27

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

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

Iterationen 10 • Schleifensteuerung • break – bricht die Ausführung der Schleife bzw. switch.

Iterationen 10 • Schleifensteuerung • break – bricht die Ausführung der 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 29

Iterationen 11 • Beispiel: eingabegesteuertes Programm int c; while(1) { c = getchar(); if(c

Iterationen 11 • Beispiel: eingabegesteuertes Programm int c; while(1) { c = getchar(); if(c = 'Q') break; switch(c) { case 'A': funca(); break; case 'B': funcb(); break; . . . } } Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 30

Funktionen 1 • Funktionen sind Programmteile (Blöcke) mit Namen, ggfs. Parametern und ggfs. einem

Funktionen 1 • Funktionen sind Programmteile (Blöcke) mit Namen, ggfs. Parametern und ggfs. einem Rückgabewert • elementare Bausteine für Programme – gliedern umfangreiche Aufgaben in kleinere Komponenten – reduzieren Komplexität – Wiederverwendung von Komponenten – verbergen Details der Implementierung vor anderen Programmteilen (black box) Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 31

Funktionen 2 • dienen der Abstraktion • Name und Parameter abstrahieren – vom tatsächlichen

Funktionen 2 • dienen der Abstraktion • Name und Parameter abstrahieren – vom tatsächlichen Programmstück – von Darstellung und Verwendung der Daten • Verwendung – mehrfach benötigte Programmstücke werden einmal erstellt und können durch Angabe des Funktionsnamens aufgerufen werden – schrittweise Abstraktion möglich Entwurf top-down oder bottom-up Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 32

Funktionen 3 • Beispiel: Summenbildung int summe(int a, int b) { int sum =

Funktionen 3 • Beispiel: Summenbildung int summe(int a, int b) { int sum = 0, i; for(i = a; i <= b; i++) sum += i; return(sum); } • Beliebig immer wieder verwendbar: s 1 = summe(20, 50); s 2 = summe(2, 120); Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 33

Funktionen 4 • Beispiel Programmieren in C - Peter Klingebiel - HS Fulda -

Funktionen 4 • Beispiel Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 34

Funktionen 5 • vor Programmstart Programmieren in C - Peter Klingebiel - HS Fulda

Funktionen 5 • vor Programmstart Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 35

Funktionen 6 • Programmstart: Speicherreservierung Programmieren in C - Peter Klingebiel - HS Fulda

Funktionen 6 • Programmstart: Speicherreservierung Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 36

Funktionen 7 • Kopieren des aktuellen Parameters a Programmieren in C - Peter Klingebiel

Funktionen 7 • Kopieren des aktuellen Parameters a Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 37

Funktionen 8 • Aufruf der Funktion quadrat() Programmieren in C - Peter Klingebiel -

Funktionen 8 • Aufruf der Funktion quadrat() Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 38

Funktionen 9 • In Funktion quadrat(): berechnen Programmieren in C - Peter Klingebiel -

Funktionen 9 • In Funktion quadrat(): berechnen Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 39

Funktionen 10 • Returnwert liefern in a kopieren Programmieren in C - Peter Klingebiel

Funktionen 10 • Returnwert liefern in a kopieren Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 40

Funktionen 11 • Rückkehr aus quadrat() nach main() Programmieren in C - Peter Klingebiel

Funktionen 11 • Rückkehr aus quadrat() nach main() Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 41

Funktionen 12 • Nach Rückkehr Programmieren in C - Peter Klingebiel - HS Fulda

Funktionen 12 • Nach Rückkehr Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 42

Funktionen 13 • Funktionsdefinition • Schnittstelle (Typ, Name, Parameterliste) • Typ – Datentyp, der

Funktionen 13 • Funktionsdefinition • Schnittstelle (Typ, Name, Parameterliste) • Typ – Datentyp, der von Funktion zurückgeliefert wird – Kann beliebiger Typ sein – void kein Rückgabewert (Prozedur) • Name – Bezeichner kann beliebig gewählt sein – keine Schlüsselworte Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 43

Funktionen 14 • Syntaxdiagramm • Beispiel int add(int a, int b) { r =

Funktionen 14 • Syntaxdiagramm • Beispiel int add(int a, int b) { r = a + b; return(r); } Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 44

Funktionen 15 • Formale Parameter • beliebiger Typ, beliebiger Bezeichner • formale Parameter Platzhalter

Funktionen 15 • Formale Parameter • beliebiger Typ, beliebiger Bezeichner • formale Parameter Platzhalter für aktuelle an Funktion übergebene Parameter • in Funktion wie vorbelegte lokale Variable Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 45

Funktionen 16 • Beliebiger Block mit {} geklammert • Zusätzliche Anweisung return(ausdruck) Rückkehr aus

Funktionen 16 • Beliebiger Block mit {} geklammert • Zusätzliche Anweisung return(ausdruck) Rückkehr aus der Funktion • Bei void-Funktion: nur return • Nach Rückkehr aus Funktion Programm wird nach Funktionsaufruf fortgesetzt • Typ von Ausdruck und Funktion müssen übereinstimmen • Klammern bei return können entfallen Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 46

Funktionen 17 • Aufruf einer Funktion – jeder Funktionsaufruf ist ein Ausdruck – void-Funktionen

Funktionen 17 • Aufruf einer Funktion – jeder Funktionsaufruf ist ein Ausdruck – void-Funktionen können keine Teilausdrücke sein wie Prozedur in anderen Sprachen Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 47

Funktionen 18 • Die Ausdrücke in der Parameterliste werden vor dem Sprung in die

Funktionen 18 • Die Ausdrücke in der Parameterliste werden vor dem Sprung in die Funktion ausgewertet aktuelle Parameter • Anzahl und Typen der Ausdrücke der aktuellen Parameter müssen mit denen der formalen Parameter in der Definition der Funktion übereinstimmen • Die Auswertungsreihenfolge der Parameterausdrücke ist nicht festgelegt Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 48

Funktionen 19 • Regeln für Funktionen • Funktionen werden global definiert, damit keine lokalen

Funktionen 19 • Regeln für Funktionen • Funktionen werden global definiert, damit keine lokalen Funktionen möglich • main() ist normale Funktion, die aber beim Programmstart automatisch aufgerufen wird • Rekursion ist problemlos möglich: int fak(int n) { if(n == 1) return(1); else return(n * fak(n-1)); } Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 49

Funktionen 20 • Funktionen müssen deklariert sein, bevor sie aufgerufen werden können • Name,

Funktionen 20 • Funktionen müssen deklariert sein, bevor sie aufgerufen werden können • Name, Rückgabetyp und Parametertypen müssen dem Compiler bekannt sein • Funktionsdefinition Funktion ist automatisch deklariert und bekannt • sonst Prototype, z. B. in Headerdatei typ name ( liste der parametertypen ); • Beispiele: double sin(double); double cos(double x); Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 50

Funktionen 21 • Wdh: Parameterübergabe an Funktionen • call by value – aktuelle Parameter

Funktionen 21 • Wdh: Parameterübergabe an Funktionen • call by value – aktuelle Parameter werden in Speicherbereich der Funktion kopiert – in Funktion: Änderungen nur lokal in Funktion • call by reference – In C nur über Zeiger realisierbar – Adresse der Parameter werden in Funktion kopiert – Änderungen an Parametern Änderungen an den originalen Variablen Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 51