4. cvičení
Čtení vstupních dat z konzole
Pro čtení vstupních dat z konzole budeme používat funkci scanf
, která přečte
vstupní řetězec zadaný v terminálu po stisknutí klávesy Enter
, pokusí se ho
převést na data odpovídajícího datového typu a výsledek uloží na zadanou adresu.
Nejjednodušší vysvětlení na příkladu:
#include <stdio.h>
int main()
{
// text pro uzivatele
printf("Zadej cele cislo: ");
// precteni vstupu
int cislo;
scanf("%d", &cislo);
// vypis precteneho cisla
printf("zadane cislo = %d\n", cislo);
return 0;
}
Pomocí jednoho příkazu lze přečíst data pro libovolný pevný počet proměnných,
např. příkaz scanf("%d %f %f", &cislo1, &cislo2, &cislo3);
přečte jedno celé
číslo a dvě desetinná čísla oddělená mezerami.
Důležité poznámky:
- Typ očekávaných dat se specifikuje stejně jako v případě funkce
printf
, tedy např.%d
pro celá čísla,%f
pro desetinná čísla apod. - Místo hodnoty proměnné je nutné předat adresu, kam se má uložit přečtené
číslo. Adresa proměnné
cislo
se zadá pomocí operátoru&
(ampersand neboli „kachnička“), tedy&cislo
. - Návratová hodnota funkce
scanf
představuje počet skutečně přečtených a přiřazených hodnot. V programech by se vždy měla ověřovat, aby nedocházelo k chybám z důvodu neplatného uživatelského vstupu.
Speciální symboly pro funkce printf a scanf
Typ proměnné | symbol |
---|---|
int |
%d nebo %i |
long |
%ld nebo %li |
unsigned int |
%u |
unsigned long |
%lu |
float , double |
%f , %e nebo %g |
char |
%c |
char* (řetězec) |
%s |
Při použití funkce printf
je možné přesněji nastavit způsob výpisu dané
proměnné. Např. %.3f
způsobí výpis čísla zaokrouhleného na 3 číslice za
desetinnou tečkou, %03d
vypíše hodnotu 1
jako 001
atd.
Matematické funkce
Pro výpočet složitých matematických funkcí je v jazyce C k dispozici hlavičkový soubor math.h, který obsahuje mj. tyto funkce:
sqrt
– odmocnina (\(\sqrt{x}\))cbrt
– třetí odmocnina (\(\sqrt[3]{x}\))pow
– obecná mocnina (\(x^a\))exp
– exponenciela (\(e^x\))log
– přirozený logaritmus (\(\ln(x)\))sin
,cos
,tan
– goniometrické funkce
Probrané příklady
- Dokončení z předchozího cvičení – rekurzivní a nerekurzivní verze programu na výpočet členů Fibonacciho posloupnosti.
- Úprava předchozích programů, aby se vstupní hodnoty četly z terminálu.
-
Program pro výpočet řešení kvadratické rovnice \(ax^2 + bx + c = 0\). Koeficienty \(a\), \(b\), \(c\) přečteme z terminálu pomocí funkce
scanf
.#include <stdio.h> #include <math.h> int main() { printf("Zadej parametry a, b, c kvadraticke rovnice a*x^2 + b*x + c = 0:\n"); float a, b, c; scanf("%f %f %f", &a, &b, &c); if (a != 0) { float d = b*b - 4*a*c; if (d > 0) { float x1 = (-b - sqrtf(d)) / (2*a); float x2 = (-b + sqrtf(d)) / (2*a); printf("Reseni rovnice jsou x_1 = %g a x_2 = %g.\n", x1, x2); } else if (d == 0) { float x = -b / (2*a); printf("Reseni rovnice je x = %g.\n", x); } else { printf("Rovnice nema zadne realne reseni.\n"); } } else if (b != 0) { float x = -c / b; printf("Reseni rovnice je x = %g.\n", x); } else if (c != 0) { printf("Rovnice %g = 0 nema zadne reseni.\n", c); } else { printf("Rovnice je splnena pro vsechny hodnoty x.\n"); } return 0; }