Informatik II Grundlagen der Programmierung Programmieren in C Grundlagen C 4 Hochschule Fulda – FB ET Sommersemester 2010 http://www.rz.hs-fulda.de/et Peter Klingebiel, HS Fulda, DVZ
Anweisungen Anweisung im allgemeinsten Sinn: Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
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
Ausdrücke 2 Sind die Zuweisungen korrekt? Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
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
Blöcke 2 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
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
Selektionen 1 Bedingte Anweisung if Syntax: if (ausdruck) anweisung Struktogramm Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Selektionen 2 Bedingte Anweisung if … else if (ausdruck) anweisung else anweisung Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
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
Selektionen 4 Beispiel: Zeichen groß klein und vice versa 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
Selektionen 5 Beispiel: ctoggle.c Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Selektionen 6 Mehrfache Alternative 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
Selektionen 7 Syntaxdiagramm Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Selektionen 8 Mehrfache Alternative / Fallunterscheidung switch switch(ausdruck){ case k1: anweisung_1; break; case k2: anweisung_2; break; . . . default: anweisung_default; } Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Selektionen 9 Syntaxdiagramm Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Selektionen 10 Beispiel enum 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
Selektionen 11 Beispiel: lettercount.c Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Selektionen 12 Beispiel: mydraw3.c Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
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
Iterationen 2 Struktogramm Beispiel: int c; while ((c = getchar()) != EOF){ putchar(c); } Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Iterationen 3 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
Iterationen 4 Struktogramm Beispiel char *s1, *s2; do *s2++ = *s1++; while (*s1); Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Iterationen 5 Beispiel: stringcopy() mit while -Schleife void stringcopy(char *s1, char *s2) { while(*s1) *s2++ = *s1++; *s2 = '\0'; } Beispiel: void stringcopy mit do-Schleife void stringcopy(char *s1, char *s2) { do *s2++ = *s1++; while(*s1); } Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Iterationen 6 Laufanweisung oder abweisenden Schleife mit for Syntax for(ausdruck1; ausdruck2; ausdruck3) anweisung Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
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
Iterationen 8 for-Schleife ist eigentlich eine while-Schleife ausdruck1 while(ausdruck2){ anweisung ausdruck3 } Beispiel: stringcopy() mit for void stringcopy(char *s1, char *s2) { for ( ; *s1; s1++, s2++) *s2 = *s1; *s2 = '\0'; } Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Iterationen 9 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Iterationen 10 Schleifensteuerung break continue 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
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
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
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
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: s1 = summe(20, 50); s2 = summe(2, 120); Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Funktionen 4 Beispiel Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Funktionen 5 vor Programmstart Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Funktionen 6 Programmstart: Speicherreservierung Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Funktionen 7 Kopieren des aktuellen Parameters a Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Funktionen 8 Aufruf der Funktion quadrat() Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Funktionen 9 In Funktion quadrat(): berechnen Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Funktionen 10 Returnwert liefern in a kopieren Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Funktionen 11 Rückkehr aus quadrat() nach main() Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Funktionen 12 Nach Rückkehr Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
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
Funktionen 14 Syntaxdiagramm Beispiel int add(int a, int b) { r = a + b; return(r); } Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
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
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
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
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
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
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
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