Abbildungsfunktionen in C
Eine Abbildungsfunktion ist eine Funktion mit mindestens einem Argument, deren Wert durch die Argumentwerte bestimmt ist.
main.c
#include <stdio.h>
double kelvin( double const celsius )
{ return celsius + 273.15; }int main( void )
{ printf( "%g\n", kelvin( 22. ));
printf( "%g\n", kelvin( 23. ));
printf( "%g\n", kelvin( 22. )); }stdout
295.15
296.15
295.15- Ausgabe vorhersagen
Welche Ausgabe erzeugt das folgende Programm?
main.c
#include <stdio.h>
int f( int const i )
{ return i + 2; }int main( void )
{ printf( "%d\n", f( 7 ));
printf( "%d\n", f( f( 7 ))); }- Umkehrabbildung schreiben
Bringen Sie das Programm zur Umrechnung in Kelvin zunächst unverändert zum Laufen.
Ergänzen Sie das Programm um eine Abbildungs-Funktion "celsius", die von Kelvin in Grad Celsius umrechnet, und probieren Sie diese Funktion aus.
Welchen Wert sollte der Ausdruck "kelvin( celsius( 22. ))" haben?
Die zu definierenden Abbildungs-Funktionen dürfen selber nichts auf den Bildschirm ausgeben ! Sie sollen nur einen Wert ergeben.
- Zentimeter und Zoll
- Schreiben Sie in das folgende Programm an die Stelle von »0« einen Ausdruck, so daß die Funktion »l_inch« den Argumentwert als Länge in Zentimetern akzeptiert und als Wert des Aufrufs die Länge in Zoll liefert.
- Ergänzen Sie dann eine Umkehrfunktion »l_cm«, welche in die andere Richtung umrechnet.
main.c
#include <stdio.h>
double l_inch( double const l_cm )
{ return 0; }int main( void )
{ printf( "%g\n", l_inch( 1.29 )); /* Laenge in Zoll (ca 0,51 Zoll) */
printf( "%g\n", l_inch( 2.58 )); /* ungefaehr das Doppelte der vorherigen Ausgabe */ }- / Ganzzahliger Mittelwert zweier ganzzahliger Werte
- Schreiben Sie eine Definition einer Funktion »avg« mit zwei Parametern (jeweils vom Typ »int«) und einem Ergebnis vom Typ »int«, so daß der Wert des Ausdrucks »avg(〈i 〉,〈j 〉)« die größte ganze Zahl kleiner-gleich dem Mittelwert der Werte der beiden Argumentausdrücke »〈i 〉« und »〈j 〉« (jeweils vom Typ »int«) ist.
- Testen Sie Ihre Definition unter anderem an Hand der Werte der in der folgenden Liste vor dem Semikolon stehenden Ausdrücke (nach »#include <limits.h>«):
- »avg(0,0)«; 0
- »avg(1,0)«; 0
- »avg(0,1)«; 0
- »avg(1,1)«; 1
- »avg(INT_MIN,INT_MIN)«; INT_MIN
- »avg(INT_MIN,INT_MAX)«; Unter einer typischen C -Implementation wird ein Wert nahe 0 (also 0, +1 oder −1) erwartet
- »avg(INT_MAX,INT_MIN)«; Unter einer typischen C -Implementation wird ein Wert nahe 0 (also 0, +1 oder −1) erwartet
- »avg(INT_MAX,INT_MAX)«; INT_MAX
- Der gesuchte Mittelwert soll aber natürlich nicht nur für diese acht Testwerte, sondern für alle möglichen int -Werte richtig berechnet werden. Um dies zu testen, könnten daher noch weitere Testwerte herangezogen werden.
/ Eine willkürliche Funktion
Schreiben Sie eine Funktion, die 17 ergibt, falls ihr Argumentwert gleich 4 ist, und 12, falls ihr Argumentwert gleich 6 ist.