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ř.%dpro celá čísla,%fpro 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é cislose zadá pomocí operátoru&(ampersand neboli „kachnička“), tedy&cislo.
- Návratová hodnota funkce scanfpř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 | %dnebo%i | 
| long | %ldnebo%li | 
| unsigned int | %u | 
| unsigned long | %lu | 
| float,double | %f,%enebo%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; }