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

Programmieren in C Grundlagen C 4 Hochschule Fulda – FB AI Sommersemester 2014 Peter Klingebiel, HS Fulda, DVZ

Embed Size (px)

Citation preview

Page 1: Programmieren in C Grundlagen C 4 Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C

Grundlagen C 4

Hochschule Fulda – FB AI

Sommersemester 2014

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

Peter Klingebiel, HS Fulda, DVZ

Page 2: Programmieren in C Grundlagen C 4 Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Anweisungen

• Anweisung im allgemeinsten Sinn:

Page 3: Programmieren in C Grundlagen C 4 Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

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; /* gültiger l-value */45 = j; /* ungültiger l-value */

Page 4: Programmieren in C Grundlagen C 4 Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Ausdrücke 2

• Sind die Zuweisungen korrekt?

Page 5: Programmieren in C Grundlagen C 4 Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

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

Page 6: Programmieren in C Grundlagen C 4 Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Blöcke 2

Page 7: Programmieren in C Grundlagen C 4 Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Kontrollstrukturen

• Kontrolle des Programmablaufs abhängig von Ergebnis von Ausdrücken

• Selektionen / bedingte Anweisungen– Einfache Alternative if … else– Mehrfache Alternative if … else if … else– Fallunterscheidung switch

• Iterationen / Schleifen– Abweisende Schleife while– Annehmende Schleife do … while– Laufanweisung for

Page 8: Programmieren in C Grundlagen C 4 Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Selektionen 1

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

• Struktogramm

Page 9: Programmieren in C Grundlagen C 4 Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Selektionen 2

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

Page 10: Programmieren in C Grundlagen C 4 Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

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++ }}

Page 11: Programmieren in C Grundlagen C 4 Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Selektionen 4

• Beispiel: Zeichen groß klein und vice versaint 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 12: Programmieren in C Grundlagen C 4 Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Selektionen 5

• Beispiel: ctoggle.c

Page 13: Programmieren in C Grundlagen C 4 Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Selektionen 6

• Mehrfache Alternative if…else if…else if (ausdruck_1) anweisung_1else if(ausdruck_2) anweisung_2else if(ausdruck_3) anweisung_3else if (ausdruck_n) anweisung_n... ...else /* kann auch fehlen */ anweisung_else

Page 14: Programmieren in C Grundlagen C 4 Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Selektionen 7

• Syntaxdiagramm

Page 15: Programmieren in C Grundlagen C 4 Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Selektionen 8

• Mehrfache Alternative / Fallunterscheidungswitchswitch(ausdruck){ case k1: anweisung_1;

break; case k2: anweisung_2; break; . . . default: anweisung_default;}

Page 16: Programmieren in C Grundlagen C 4 Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Selektionen 9

• Syntaxdiagramm

Page 17: Programmieren in C Grundlagen C 4 Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Selektionen 10

• Beispielenum color { red, green, blue };enum color col = red;switch(col) { 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 18: Programmieren in C Grundlagen C 4 Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Selektionen 11

• Beispiel: lettercount.c

Page 19: Programmieren in C Grundlagen C 4 Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Selektionen 12

• Beispiel: mydraw3.c

Page 20: Programmieren in C Grundlagen C 4 Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Iterationen 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 21: Programmieren in C Grundlagen C 4 Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Iterationen 2

• Struktogramm

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

Page 22: Programmieren in C Grundlagen C 4 Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Iterationen 3

• 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 23: Programmieren in C Grundlagen C 4 Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Iterationen 4

• Struktogramm

• Beispielchar *s1, *s2;do *s2++ = *s1++;while (*s1);

Page 24: Programmieren in C Grundlagen C 4 Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Iterationen 5

• Beispiel: stringcopy() mit while -Schleifevoid stringcopy(char *s1, char *s2){ while(*s1) *s2++ = *s1++; *s2 = '\0';}

• Beispiel: void stringcopy mit do-Schleifevoid stringcopy(char *s1, char *s2){ do *s2++ = *s1++; while(*s1);}

Page 25: Programmieren in C Grundlagen C 4 Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Iterationen 6

• Laufanweisung oder abweisenden Schleife mit for

• Syntaxfor(ausdruck1; ausdruck2; ausdruck3) anweisung

Page 26: Programmieren in C Grundlagen C 4 Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Iterationen 7

• 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 27: Programmieren in C Grundlagen C 4 Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Iterationen 8

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

• Beispiel: stringcopy() mit forvoid stringcopy(char *s1, char *s2){ for ( ; *s1; s1++, s2++) *s2 = *s1; *s2 = '\0';}

Page 28: Programmieren in C Grundlagen C 4 Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Iterationen 9

Page 29: Programmieren in C Grundlagen C 4 Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

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

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

Page 30: Programmieren in C Grundlagen C 4 Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Iterationen 11

• Beispiel: eingabegesteuertes Programmint c;while(1) { c = getchar(); if(c = 'Q') break; switch(c) { case 'A': funca(); break; case 'B': funcb(); break; ... }}

Page 31: Programmieren in C Grundlagen C 4 Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

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)

Page 32: Programmieren in C Grundlagen C 4 Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

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öglichEntwurf top-down oder bottom-up

Page 33: Programmieren in C Grundlagen C 4 Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Funktionen 3

• Beispiel: Summenbildungint summe(int a, int b){ int sum = 0, i; for(i = a; i <= b; i++) sum += i; return(sum);}

• Beliebig immer wieder verwendbar:s1 = summe(20, 50);s2 = summe(2, 120);

Page 34: Programmieren in C Grundlagen C 4 Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Funktionen 4

• Beispiel

Page 35: Programmieren in C Grundlagen C 4 Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Funktionen 5

• vor Programmstart

Page 36: Programmieren in C Grundlagen C 4 Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Funktionen 6

• Programmstart: Speicherreservierung

Page 37: Programmieren in C Grundlagen C 4 Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Funktionen 7

• Kopieren des aktuellen Parameters a

Page 38: Programmieren in C Grundlagen C 4 Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Funktionen 8

• Aufruf der Funktion quadrat()

Page 39: Programmieren in C Grundlagen C 4 Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Funktionen 9

• In Funktion quadrat(): berechnen

Page 40: Programmieren in C Grundlagen C 4 Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Funktionen 10

• Returnwert liefern in a kopieren

Page 41: Programmieren in C Grundlagen C 4 Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Funktionen 11

• Rückkehr aus quadrat() nach main()

Page 42: Programmieren in C Grundlagen C 4 Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Funktionen 12

• Nach Rückkehr

Page 43: Programmieren in C Grundlagen C 4 Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

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

Page 44: Programmieren in C Grundlagen C 4 Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Funktionen 14

• Syntaxdiagramm

• Beispielint add(int a, int b){ r = a + b; return(r);}

Page 45: Programmieren in C Grundlagen C 4 Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Funktionen 15

• Formale Parameter

• beliebiger Typ, beliebiger Bezeichner• formale Parameter Platzhalter für aktuelle

an Funktion übergebene Parameter• in Funktion wie vorbelegte lokale Variable

Page 46: Programmieren in C Grundlagen C 4 Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

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

Page 47: Programmieren in C Grundlagen C 4 Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Funktionen 17

• Aufruf einer Funktion

– jeder Funktionsaufruf ist ein Ausdruck– void-Funktionen können keine Teilausdrücke sein

wie Prozedur in anderen Sprachen

Page 48: Programmieren in C Grundlagen C 4 Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

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 Parameter-ausdrücke ist nicht festgelegt

Page 49: Programmieren in C Grundlagen C 4 Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

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));}

Page 50: Programmieren in C Grundlagen C 4 Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

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 Headerdateityp name ( liste der parametertypen );

• Beispiele:double sin(double);double cos(double x);

Page 51: Programmieren in C Grundlagen C 4 Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

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