Matematické funkce
Všechny funkce nemusíte psát sami. K jazyku C patří knihovna hotových funkcí a některé z nich už jste použili: printf, strlen, toupper. Hlavičkový soubor math.h obsahuje funkce pro matematiku:
sqrt(x)vrátí druhou odmocninux:sqrt(16)je4.0.pow(x, y)vrátíxnay-tou:pow(2, 10)je1024.0.round(x)zaokrouhlíxna nejbližší celé číslo:round(3.7)je4.0. Polovina se zaokrouhluje směrem od nuly, takžeround(2.5)je3.0.fabs(x)vrátí absolutní hodnotux, tedy číslo bez znaménka minus:fabs(-3.5)je3.5.
Fungují stejně jako funkce, které píšete vy: dostanou argumenty a vrátí hodnotu. Všechny čtyři vracejí double, a tak je vypisujte pomocí %f nebo %.2f. Abyste je mohli použít, přidejte na začátek programu vedle #include <stdio.h> ještě #include <math.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;
}Tento program vypíše:
4.00
1024.00
4.00
3.50Kdybyste je vypsali pomocí %d, program by se tady nepřeložil: format specifies type 'int' but the argument has type 'double'. A když zapomenete #include, program se také nepřeloží:
#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.První řádek už znáte: volání funkce, kterou překladač zatím nezná, tentokrát funkce z knihovny (library function). Řádek s note radí, co dělat: vložit hlavičkový soubor <math.h>, nebo funkci sqrt deklarovat sami. Teď je vidět, k čemu #include slouží: v math.h jsou prototypy těchto funkcí.
Pro absolutní hodnotu celého čísla je zvláštní funkce abs, a to v jiném hlavičkovém souboru: stdlib.h (standardní knihovna). Dostane i vrátí int, a tak ji vypíšete pomocí %d:
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int rano = -5;
int poledne = 3;
printf("Změna: %d stupňů\n", abs(poledne - rano));
printf("%d\n", abs(-7));
return 0;
}Tento program vypíše:
Změna: 8 stupňů
7Pro celá čísla používejte abs a pro desetinná fabs: abs(-2.5) bez upozornění vrátí 2. A funkce z knihovny můžete volat i uvnitř svých vlastních funkcí. Přesně to teď uděláte.
Jak psát:
Pokyny
Žebřík je opřený o zeď. Jeho horní konec je ve výšce vyska metrů a jeho spodní konec stojí vzdalenost metrů od zdi. Délka žebříku je druhá odmocnina z vyska * vyska + vzdalenost * vzdalenost (to je Pythagorova věta). Přidejte na začátek #include <math.h> a napište funkci delka_zebriku se dvěma parametry typu double, vyska a vzdalenost, která vrátí délku žebříku. Program pak vypíše Žebřík: 5.00 a Žebřík: 3.61.
Přidejte #include <stdlib.h> a napište funkci rozdil se dvěma parametry typu int, a a b, která vrátí, jak daleko od sebe ta dvě čísla jsou, vždy bez znaménka minus: abs(a - b). Na konci main, před return 0;, vypište rozdil(-5, 3) a potom rozdil(3, -5), pokaždé s popiskem Rozdíl:. Oba řádky budou Rozdíl: 8.
Začněte programovat zdarma
11/12