5. Funktionen in C Funktionen in C ________________________________________________________________________________________________________________________________ V. Matoušek: Informationsverarbeitung / FH Regensburg 5-1 5. Funktionen in C Aufgabe: Es sind drei Paare von interger-Variablen zu vergleichen und die größere Werte zu wählen – c = max (a,b) m = max (k,l) w = max (u,v) Im einfachen Programm schreiben wir: if (a > b) c = a else . . . c = b; if (k > l) m = k else . . . m = l; if (u > v) w = u else . . . w = v; /* Algorithmus wird */ /* dreimal */ /* definiert */ ________________________________________________________________________________________________________________________________ V. Matoušek: Informationsverarbeitung / FH Regensburg 5-2 5. Funktionen in C Funktionen gehören zur Kategorie von Unterprogrammen – Werwendung der Funktion ermöglicht den Algorithmus nur einmal definieren (beschreiben), aber dreimal verwenden. ________________________________________________________________________________________________________________________________ V. Matoušek: Informationsverarbeitung / FH Regensburg 5-3 5. Funktionen in C Prinzip: #include <stdio.h> float my_max (float x, float y) { if (x > y) return (x); else return (y); } int main () { float a, b, c, k, l, m, u, v, w; . . . c = my_max (a, b); . . . m = my_max (k, l); . . . w = my_max (u, v); . . . } #include <stdio.h> function max (x,y) if (x > y) else max = x max = y return main program VAR Definitionen . . . c = max (a, b) . . . m = max (k, l) . . . w = max (u, v) . . . ________________________________________________________________________________________________________________________________ V. Matoušek: Informationsverarbeitung / FH Regensburg 5-4 5. Funktionen in C Definition der Funktion: [<Typ>] <Funktionsname> ( [<Argumentenliste>] ) { <Definitionen> <Anweisungen> ... return ( <Rückgabewert> ); } Beispiel: leere Funktion Dummy ( ) { } ________________________________________________________________________________________________________________________________ V. Matoušek: Informationsverarbeitung / FH Regensburg 5-5 5. Funktionen in C Beispiel: Funktionen für Zeichenkonversionen char to_lower (char c) { if (c >= ′A′ && c <= ′Z′) return (c + ′a′ - ′A′); else return (c); } char to_upper (char c) { if (c >= ′a′ && c <= ′z′) return (c – (′a′ - ′A′)); else return (c); } ________________________________________________________________________________________________________________________________ V. Matoušek: Informationsverarbeitung / FH Regensburg 5-6 5. Funktionen in C Verwendung: #include <stdio.h> #define LENGTH 80 char To_Lower (char c) { if (c >= 'A' && c <= 'Z') return (c + 'a' - 'A'); else return (c); } char To_Upper (char c) { if (c >= 'a' && c <= 'z') return (c – ('a' - 'A')); else return (c); } ________________________________________________________________________________________________________________________________ V. Matoušek: Informationsverarbeitung / FH Regensburg 5-7 5. Funktionen in C int main () { int i; char TEXT[LENGTH], TEXT_OUT[LENGTH]; printf ("\n\t Demonstration von Zeichenkonversionen \n"); printf ("\t ------------------------------------- \n\n"); printf (" Den beliebigen Text (hoechstens 80 Zeichen) eingeben: \n > "); gets (TEXT); for (i=0; (TEXT[i]!='\0') && (i<LENGTH); i++) TEXT_OUT[i] = To_Lower (TEXT[i]); TEXT_OUT[i] = '\0'; printf ("\n Konvertierter Text (Kleinb.) : %s\n", TEXT_OUT); for (i=0; (TEXT[i]!='\0') && (i<LENGTH); i++) TEXT_OUT[i] = To_Upper (TEXT[i]); TEXT_OUT[i] = '\0'; printf ("\n Konvertierter Text (Grossb.) : %s\n", TEXT_OUT); printf ("\n"); } ________________________________________________________________________________________________________________________________ V. Matoušek: Informationsverarbeitung / FH Regensburg 5-8 5. Funktionen in C /* Programm C6_1.c - Verwendung einfacher Funktion */ # include < stdio.h > int max ( int x, int y ) /* E/A Bibliothek */ { if ( x > y ) return ( x ); else return ( y ); /* Liefert den größeren Wert zurück */ } main ( ) { /* Hauptmodul */ int a, b, c, d; /* Definition von Variablen */ int zw1, zw2; printf (" \n \ t \t Suche des größten Wertes \n \n "); printf (" \n Bitte die Eingabewerte eingeben \n \n "); printf (" A = "); scanf (" %i ", &a ); printf (" B = "); scanf (" %i ", &b ); printf (" C = "); scanf (" %i ", &c ); printf (" D = "); scanf (" %i ", &d ); zw1 = max ( a, b ); zw2 = max ( c, d ); zw1 = max ( zw1, zw2 ); printf (" \n Der größte Wert ist: %i \n \n \n ", zw1 ); } ________________________________________________________________________________________________________________________________ V. Matoušek: Informationsverarbeitung / FH Regensburg 5-9 5. Funktionen in C /* Programm C6_1a.c - Verwendung einfacher Funktion */ # include < stdio.h > int max ( int x, int y ) /* E/A Bibliothek */ { /* Liefert den größeren Wert zurück */ if ( x > y ) return ( x ); else return ( y ); } main ( ) { /* Hauptmodul */ int a, b, c, d; /* Definition von Variablen */ printf (" \n \ t \t Suche des größten Wertes \n \n "); printf (" \n Bitte die Eingabewerte eingeben \n \n "); printf (" A = "); scanf (" %i ", &a ); printf (" B = "); scanf (" %i ", &b ); printf (" C = "); scanf (" %i ", &c ); printf (" D = "); scanf (" %i ", &d ); printf (" \n Der größte Wert ist : %i \n \n \n ", max ( max ( a, b ), max ( c, d ) ) ); } ________________________________________________________________________________________________________________________________ V. Matoušek: Informationsverarbeitung / FH Regensburg 5-10 5. Funktionen in C /* Programm C6_3.c - Verwendung einfacher Funktion */ # include <stdio.h> neue_zeile ( int x ) { int zaehler; for ( zaehler = 1; zaehler <= x ; zaehler++ ) printf ( "\n" ); } main ( ) { int eingabe; neue_zeile (3); printf (" Der 1. Satz "); neue_zeile (2); printf (" Der 2. Satz "); neue_zeile (4); printf (" Wieviel Zeilenvorschübe soll ich ausgeben ? "); scanf ("%i", &eingabe); neue_zeile (eingabe); printf (" Der 3. Satz "); neue_zeile (2); } ________________________________________________________________________________________________________________________________ V. Matoušek: Informationsverarbeitung / FH Regensburg 5-11 5. Funktionen in C Felder in C ► eindimensionale – Vektoren ► mehrdimensionale – Matrizen – höherer Ordnung Definition Eindimensionale: Indizes: 0 1 <Typ> <Name> [ <Umfang> ] ; 2 3 4 N–2 N–1 ... ________________________________________________________________________________________________________________________________ V. Matoušek: Informationsverarbeitung / FH Regensburg 5-12 5. Funktionen in C Mehrdimensionale: <Typ> <Name> [ <Umfang> ] ... [ <Umfang> ]; Beispiel: Matrix von 5 x 5 ganzzahligen Elementen: Definition: int M[5][5]; Repräsentation: (Index i) 0 1 2 3 4 (Index j) 0 1 2 M[0][1] M[3][2] 3 4 Indexierung: M[i][j] j ... Spaltenindex i ... Zeilenindex ________________________________________________________________________________________________________________________________ V. Matoušek: Informationsverarbeitung / FH Regensburg 5-13 5. Funktionen in C /* Modifiziertes Programm C4_1.c – Summe und Mittelwert #include <stdio.h> main ( ) */ /* E/A Bibliothek */ { /* Nur Hauptmodul */ int x, anzahl; double zahl[100], summe = 0.0, mittelwert ; /* Definition von Variablen */ printf ("\n\t\t S t a t i s t i k \n\n"); /* Ausgabekopf */ printf ("\n Wieviel Werte wollen Sie eingeben ? "); scanf ("%i", &anzahl); /* Eingabe von anzahl */ printf ("\n"); for (x=0; x<anzahl; x++) { /* Eingabeschleife */ printf (" Bitte %i . Zahl eingeben : ", x+1); scanf ("%lf", &zahl [ x ] ); /* oder zahl + x Eingabe von summierten Zahlen */ } for (x=0; x<anzahl; x++) /* Berechnungsschleife */ summe = summe + zahl [x] ; /* Summierung */ mittelwert = summe / (double)anzahl; /* Mittelwert */ printf ("\n Summe der Zahlen /* Ausgaben */ = %lf", summe); printf ("\n Mittelwert der Zahlen = %lf \n\n", mittelwert); } ________________________________________________________________________________________________________________________________ V. Matoušek: Informationsverarbeitung / FH Regensburg 5-14 5. Funktionen in C /* Modifiziertes Programm C4_2.c */ /* Tabelle von Produkten - zwei geschachtelte Schleifen */ #include <stdio.h> #define N 10 main ( ) { int TABELLE [N] [N]; int i, j; for (i=0; i<N; i++) /* Tabelle anfüllen - äußere Schleife */ for (j=0; j<N; j++) /* innere Schleife */ TABELLE [i] [j] = i * j ; printf ("\n\n"); printf ("\n\t T a b e l l e 10 x 10 \n\n"); for (i=0; i<N; i++) { /* Tabelle ausgeben - äußere Schleife */ printf ("\n"); for (j=0; j<N; j++) printf ("%4i", TABELLE [i] [j] ); /* innere Schleife */ /* Ausgabe */ } printf ("\n\n"); } ________________________________________________________________________________________________________________________________ V. Matoušek: Informationsverarbeitung / FH Regensburg 5-15 5. Funktionen in C /* Programm C6_2.c - Verwendung einfacher Funktion */ # include < stdio.h > char upper ( char c ) /* E/A Bibliothek */ { /* Inhalt c in Großbuchstaben umwandeln */ if ( c >= 'a' && c <= 'z' ) return ( c - 'a' + 'A' ); else return ( c ); } main ( ) { /* Hauptmodul */ char satz [80] ; /* Definition von Variablen */ char SATZ [80] ; int i = 0; printf (" \n \t \t Zeichenketteumwandlung \n \n "); printf (" \n Bitte die Zeichenkette eingeben : "); scanf ("%s", satz ); while ( satz [ i ] != '\0' ) /* Eingabe von Zeichenkette */ { SATZ [ i ] = upper ( satz [ i ] ); i++ ; } printf (" \n Konvertierte Zeichenkette : %s \n \n \n ", SATZ ); } ________________________________________________________________________________________________________________________________ V. Matoušek: Informationsverarbeitung / FH Regensburg 5-16 5. Funktionen in C /* Programm C6_2a.c -- Verwendung einfacher Funktion -- Variante mit Funktions-Prototyp */ # include < stdio.h > /* E/A Bibliothek */ char upper ( char ); main ( ) /* Funktions-Prototyp */ { /* Hauptmodul */ char satz [80] , SATZ [80] ; /* Definition von Variablen */ int i = 0; printf (" \n \t \t Zeichenketteumwandlung \n \n "); printf (" \n Bitte die Zeichenkette eingeben : "); scanf ("%s", satz ); /* Eingabe von Zeichenkette */ while ( satz [ i ] != '\0' ) SATZ [ i++ ] = upper ( satz [ i ] ); printf (" \n Konvertierte Zeichenkette : %s \n \n \n ", SATZ ); } char upper ( char c ) { /* Inhalt c in Großbuchstaben umwandeln */ if ( c >= 'a' && c <= 'z' ) return ( c - 'a' + 'A' ); else return ( c ); } ________________________________________________________________________________________________________________________________ V. Matoušek: Informationsverarbeitung / FH Regensburg 5-17 5. Funktionen in C /* Programm C6_4.c - Verwendung einfacher Funktion */ #include <stdio.h> int getline (char s[ ], int lim) { char c; int /* liest eine Textzeile und liefert */ /* */ die Zeilenlänge zurück i = 0; while (--lim && c = getchar()) != EOF && c != '\n') s [i++] = c; if (c == '\n' || ! lim) s[i] = '\0'; return (i); } main () { char zeile [80]; int laenge; printf ("\n\n\t\t printf (" MIT GETLINE ( ) Geben Sie die Zeichenfolge ein: printf ("\n printf (" ZEILENEINGABE "); \n\n"); laenge = getline (zeile, 50); Die eingegebene Zeile '%s'\n enthält %d Zeichen \n\n", zeile, laenge); Geben Sie die Zeichenfolge ein: printf ("\n ") laenge = getline (zeile, 80); Die eingegebene Zeile '%s'\n enthält %d Zeichen \n\n", zeile, laenge); printf (" Geben Sie die Zeichenfolge ein: printf ("\n "); laenge = getline (zeile, 50); Die eingegebene Zeile '%s'\n enthält %d Zeichen \n\n", zeile, laenge); } ________________________________________________________________________________________________________________________________ V. Matoušek: Informationsverarbeitung / FH Regensburg 5-18 5. Funktionen in C Zusammenfassung (Funktionen) ► Eine Funktion besteht aus Rückgabetyp, Funktionsname, Parameterliste und Anweisungsblock. ► Rückgabetyp kann jeder gültige Typ sein. Ist kein Typ angegeben, wird standardmäßig int angenommen. ► Funktionen, die keinen Rückgabetyp void . Wert zurückliefern sollen, erhalten den ► In der Parameterliste werden Typ und Name der übergegebenen Werte aufgeführt. ► Die Anweisung return dient zur Rückgabe des Wertes einer Funktion. ► Ein return ohne folgenden Klammerausdruck verläßt die Funktion, ohne einen Wert zurückzugeben. ► Funktions-Prototypen ermöglichen es dem Compiler, Ihr Programm genauer auf mögliche Fehler zu untersuchen. ________________________________________________________________________________________________________________________________ V. Matoušek: Informationsverarbeitung / FH Regensburg 5-19
© Copyright 2024 ExpyDoc