Funktionen in C - oth

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