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

Preview:

Citation preview

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

Anweisungen

• Anweisung im allgemeinsten Sinn:

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 */

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

Ausdrücke 2

• Sind die Zuweisungen korrekt?

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

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

Blöcke 2

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

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

Selektionen 1

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

• Struktogramm

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

Selektionen 2

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

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

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';}...

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

Selektionen 5

• Beispiel: ctoggle.c

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

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

Selektionen 7

• Syntaxdiagramm

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

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

Selektionen 9

• Syntaxdiagramm

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

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

Selektionen 11

• Beispiel: lettercount.c

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

Selektionen 12

• Beispiel: mydraw3.c

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

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

Iterationen 2

• Struktogramm

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

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

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

Iterationen 4

• Struktogramm

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

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

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

Iterationen 6

• Laufanweisung oder abweisenden Schleife mit for

• Syntaxfor(ausdruck1; ausdruck2; ausdruck3) anweisung

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;

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

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

Iterationen 9

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(;;) ...

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

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)

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

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

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

Funktionen 4

• Beispiel

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

Funktionen 5

• vor Programmstart

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

Funktionen 6

• Programmstart: Speicherreservierung

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

Funktionen 7

• Kopieren des aktuellen Parameters a

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

Funktionen 8

• Aufruf der Funktion quadrat()

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

Funktionen 9

• In Funktion quadrat(): berechnen

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

Funktionen 10

• Returnwert liefern in a kopieren

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

Funktionen 11

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

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

Funktionen 12

• Nach Rückkehr

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

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

Funktionen 14

• Syntaxdiagramm

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

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

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

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

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

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

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

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

Recommended