Mathematische Funktionen
Du musst nicht jede Funktion selbst schreiben. C hat eine Bibliothek fertiger Funktionen, und einige davon hast du schon benutzt: printf, strlen, toupper. Die Header-Datei math.h enthält Funktionen für Mathematik:
sqrt(x)gibt die Quadratwurzel vonxzurück:sqrt(16)ist4.0.pow(x, y)gibtxhochyzurück:pow(2, 10)ist1024.0.round(x)rundetxauf die nächste ganze Zahl:round(3.7)ist4.0. Eine Hälfte wird von null weg gerundet, also istround(2.5)gleich3.0.fabs(x)gibt den Betrag vonxzurück, die Zahl ohne ihr Minuszeichen:fabs(-3.5)ist3.5.
Das sind Funktionen wie die, die du schreibst: Sie nehmen Argumente entgegen und geben einen Wert zurück. Alle vier geben ein double zurück, also gib sie mit %f oder %.2f aus. Um sie zu verwenden, füge #include <math.h> oben im Programm hinzu, neben #include <stdio.h>:
#include <math.h>
#include <stdio.h>
int main(void) {
printf("%.2f\n", sqrt(16));
printf("%.2f\n", pow(2, 10));
printf("%.2f\n", round(3.7));
printf("%.2f\n", fabs(-3.5));
return 0;
}Dieses Programm gibt aus:
4.00
1024.00
4.00
3.50Sie mit %d auszugeben ist hier ein Kompilierfehler: format specifies type 'int' but the argument has type 'double'. Und wenn du das #include vergisst, lässt sich das Programm auch nicht kompilieren:
#include <stdio.h>
int main(void) {
printf("%.2f\n", sqrt(16));
return 0;
}main.c:4:22: error: call to undeclared library function 'sqrt' with type 'double (double)'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
4 | printf("%.2f\n", sqrt(16));
| ^
main.c:4:22: note: include the header <math.h> or explicitly provide a declaration for 'sqrt'
1 error generated.Die erste Zeile kennst du: ein Aufruf einer Funktion, die der Compiler noch nicht kennt, diesmal einer Bibliotheksfunktion. Die note sagt, was zu tun ist: den Header <math.h> einbinden oder sqrt selbst deklarieren. Jetzt siehst du, wozu das #include da ist: math.h enthält die Prototypen dieser Funktionen.
Den Betrag einer Ganzzahl berechnet eine eigene Funktion, abs, die in einer anderen Header-Datei steht, stdlib.h (der Standardbibliothek). Sie nimmt einen int entgegen und gibt einen zurück, also gibst du sie mit %d aus:
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int morgens = -5;
int mittags = 3;
printf("Unterschied: %d Grad\n", abs(mittags - morgens));
printf("%d\n", abs(-7));
return 0;
}Dieses Programm gibt aus:
Unterschied: 8 Grad
7Verwende abs für Ganzzahlen und fabs für Dezimalzahlen: abs(-2.5) gibt stillschweigend 2 zurück. Und du kannst Bibliotheksfunktionen in deinen eigenen Funktionen aufrufen, und genau das machst du jetzt.
So schreibst du es:
Anweisungen
- 1
Eine Leiter lehnt an einer Wand. Ihre Spitze ist
hoeheMeter an der Wand oben, und ihr Fuß stehtabstandMeter von der Wand entfernt. Die Länge der Leiter ist die Quadratwurzel aushoehe * hoehe + abstand * abstand(das ist der Satz des Pythagoras). Füge oben#include <math.h>hinzu und schreibe eine Funktionleiterlaengemit zwei Parametern vom Typdouble,hoeheundabstand, die die Länge der Leiter zurückgibt. Das Programm gibt dannLeiter: 5.00undLeiter: 3.61aus. - 2
Füge
#include <stdlib.h>hinzu und schreibe eine Funktiondifferenzmit zwei Parametern vom Typint,aundb, die zurückgibt, wie weit die beiden Zahlen auseinanderliegen, immer ohne Minuszeichen:abs(a - b). Gib am Ende vonmain, vorreturn 0;,differenz(-5, 3)und danndifferenz(3, -5)aus, jeweils mit der BeschriftungDifferenz:. Beide Zeilen lautenDifferenz: 8.