Proměnné (1) Proměnná: Definice proměnných: identifikátor, který může být v různých okam-žicích realizace programu spojen s různými hodnotami (téhož nebo kompatibilního) typu Definice proměnných: datový_typ1 id11, id12, …, id1n; datový_typ2 id21, id22, …, id2m; Např.: int i, j, k; double x, y; 16/01/2019
Proměnné (2) V zápisu definice proměnné je možné pro-vést i její inicializaci (nastavení její počá-teční hodnoty) Např.: int i = 0, j = 1, k; double x, y = 315.25; Jazyk C povoluje také použití tzv. konstant-ních proměnných const int i = 1000, j = 50; 16/01/2019
Proměnné (3) Hodnota konstantní proměnné je pevně dá-na její definicí a nemůže se v průběhu prog-ramu nijak měnit Konvence: identifikátory všech proměnných a funkcí zapi-sovat jako lower camel case: první písmeno vždy malé jestliže identifikátor je složen z více slov, pak každé slovo (vyjma prvního) začíná velkým písmenem Příklady: i, j, m, tlak, teplota, x1, x2, maxHodnota, nactiCislo, vypisPrvniZnak 16/01/2019
Funkce vstupu (1) Funkce scanf: deklarována v: stdio.h prototyp: int scanf(const char *format,…); funkce: načítá znaky ze standardního vstupu (klávesnice po-čítače) a převádí je podle řídícího řetězce format převedené znaky jsou po řadě ukládány do proměn-ných, jejichž adresy (ukazatele na ně) jsou zapsány jako další argumenty funkce scanf poznámka: adresu proměnné získáme zápisem: &identifikátor_proměnné (např. &x) 16/01/2019
Funkce vstupu (2) vrácená hodnota: parametr format: počet převedených a přiřazených (uložených) hodnot jestliže dojde k chybě nebo vyčerpání vstupních zna-ků dříve, než je přiřazena nějaká hodnota, pak funkce scanf vrací hodnotu EOF parametr format: může obsahovat: mezery nebo tabulátory, které jsou ignorovány obyčejné znaky (vyjma %), které by měly odpovídat násle-dujícím znakům na vstupu – používané zřídka konverzní specifikace 16/01/2019
Funkce vstupu (3) Konverzní specifikace: obecný tvar: %[potlačení_dosazení][šířka][velikost]operace operace: d celé číslo se znaménkem v desítkové soustavě i celé číslo se znaménkem, které může být v: desítkové soustavě osmičkové soustavě (s 0 na začátku) šestnáctkové soustavě (s 0x nebo 0X na začátku) o celé číslo se znaménkem v osmičkové soustavě (s nulou na začátku nebo bez ní) 16/01/2019
Funkce vstupu (4) u celé číslo bez znaménka v desítkové soustavě x celé číslo se znaménkem v šestnáctkové soustavě (s 0x nebo 0X na začátku, popř. bez nich) f, e, g reálné číslo float (i v semilogaritmic- kém) tvaru pro načítání čísel typu double je nezbytné na místě velikost zapsat l, tj.: lf, le, lg reálné číslo double (i v semilogarit- mickém) tvaru 16/01/2019
Lexikální atomy jazyka C Znaky, které tvoří program v jazyce C, se spo-jují do tzv. lexikálních atomů Existuje 5 tříd atomů: klíčové (rezervované) slovo identifikátor konstanta (celočíselná, reálná, znaková, řetězcová) operátor oddělovač 16/01/2019
Klíčová (rezervovaná) slova auto enum restrict unsigned break extern return void case float short volatile char for signed while const goto sizeof _Bool continue if static _Complex default inline struct _Imaginary do int switch double long typedef else register union 16/01/2019
Identifikátory (1) Identifikátor může mít libovolnou délku, ale různé implementace rozlišují jen pouze prvních n znaků (C99 – 63 znaků) Písmeno Podtržítko Písmeno Číslice Podtržítko 16/01/2019
Identifikátory (2) Podtržítko: _ Písmeno: A Z a z 16/01/2019
Číslice Číslice: Nenulová číslice: Oktálová číslice: 9 1 9 Oktálová číslice: 7 Hexadecimální číslice: Číslice A F a f 16/01/2019
Čísla (1) Celá: dekadická: oktálová: Nenulová číslice Číslice Přípona Oktálová číslice Přípona 16/01/2019
Čísla (2) hexadecimální: přípona: poznámka: 0x Hex. číslice Přípona 0X u u l l L L U U L L poznámka: l, L – označuje long ll, LL – označuje long long u, U – označuje unsigned 16/01/2019
Čísla (3) Reálná (vždy v desítkové soustavě): Exp: - Reálná přípona Číslice . Číslice Exp Exp: E + Číslice e - 16/01/2019
Čísla (4) Reálná přípona: Poznámka: f, F: označuje float l, L: označuje long double jestliže není použita přípona, pak se jedná o typ double 16/01/2019
Čísla (5) Hodnota celočíselné i reálné konstanty je vždy nezáporná Pro vyjádření záporných konstant je možné použít znaménko - (mínus) Znaménko - je považováno za unární ope-rátor, který se aplikuje na konstantu, tj. není součástí konstanty 16/01/2019
Přiřazovací příkaz (1) Obecný tvar: proměnná = výraz; Funkce: Např.: vyhodnotí výraz na pravé straně a výslednou hodnotu vloží do proměnné na levé straně pří-kazu Např.: i = 10; j = 2*i+15; k = j; i = i+2; k = k+1; Výraz na pravé straně přiřazovacího příkazu musí být typově kompatibilní s proměnnou uvedenou na jeho levé straně 16/01/2019
! ~ ++ -- + - * & (typ) sizeof Přiřazovací příkaz (2) Při vyhodnocování výrazu je respektována následující priorita operátorů: Operátory Asociativita Skupina ( ) [ ] -> . Zleva doprava Primární ! ~ ++ -- + - * & (typ) sizeof Zprava doleva Unární * / % Zleva doprava Multiplikativní + - Zleva doprava Aditivní << >> Zleva doprava Posuny < <= > >= Zleva doprava Relační == != Zleva doprava Relační 16/01/2019
%= &= ^= |= <<= >>= Přiřazovací příkaz (3) Operátory Asociativita Skupina & Zleva doprava Bitový součin ^ Zleva doprava Exkl. bit. součet | Zleva doprava Bitový součet && Zleva doprava Logický součin || Zleva doprava Logický součet ?: Zprava doleva Ternární podm. = += -= *= /= %= &= ^= |= <<= >>= Zprava doleva Přiřazovací , Zleva doprava Operátor čárka 16/01/2019
Přiřazovací příkaz (4) Zápisy, v nichž se proměnná na levé straně ihned opakuje na pravé straně, lze zapsat v kompaktnější formě: proměnná = proměnná op (výraz); lze zapsat jako: proměnná op= výraz; Např.: i = i+2; lze zapsat jako i += 2; j = j-5; lze zapsat jako j -= 5; k = k*4; lze zapsat jako k *= 4; l = l/3; lze zapsat jako l /= 3; 16/01/2019
Přiřazovací příkaz (5) Poznámka: operátory op= se nazývají přiřazovací operátory zápis x *= y+1; vyjadřuje x = x*(y+1); nikoliv x = x*y+1; V případě zvyšování (snižování) hodnoty proměnné o 1 lze použít operátor inkremen-tace (dekrementace) Např.: i = i+1; lze zapsat jako i++; nebo ++i; j = j-1; lze zapsat jako j--; nebo --j; 16/01/2019
Přiřazovací příkaz (6) Poznámka: zápis i++; (j--;) provede zvýšení (snížení) hodnoty proměnné i (j) o jedničku až po jejím použití zápis ++i; (--j;) provede zvýšení (snížení) hodnoty proměnné i (j) o jedničku před jejím použitím příklad: n = 5; x = n++; /* x = 5 a n = 6 */ n = 5; x = ++n; /* n = 6 a x = 6 */ 16/01/2019
Složený příkaz (1) Označovaný také jako blok Obecný tvar: { seznam deklarací a definic p1 /* posloupnost */ p2 /* příkazů */ pn } Poznámka: složený příkaz není ukončen středníkem 16/01/2019
Složený příkaz (2) Funkce: posloupnost deklarací, definic a příkazů uzavře-ných mezi symboly { a } sdružuje příkazy p1 až pn do jednoho složeného příkazu (bloku) deklarované a definované symboly jsou dostup-né pouze v daném bloku a všech blocích do něj vnořených používán v okamžiku, kdy je místo jednoho pří-kazu nutné provést příkazů více, např. u podmí-něného příkazu nebo u příkazů cyklu 16/01/2019
Relační a logické operátory (1) Relační operátory: slouží k porovnávání svých operandů tyto operátory testují vztah: < je menší než <= je menší nebo roven > je větší než >= je větší nebo roven == je roven != je různý od poznámka: operátory == a != mají nižší prioritu než operátory <, <=, > a >= 16/01/2019
Relační a logické operátory (2) umožňují provádět logické operace: && logický součin, konjunkce || logický součet, disjunkce Pro vyjádření logické negace lze použít operátor ! Relační a logické operátory lze využít pro zápis výrazů, které reprezentují podmínky pro podmíněný příkaz a příkazy cyklu Výraz je: pravdivý: jestliže má nenulovou hodnotu nepravdivý: jestliže má hodnotu rovnou nule 16/01/2019
Podmíněný příkaz (1) Používá se v případě, kdy je zapotřebí vyjá-dřit rozhodování Zvolí k provedení jeden (nebo žádný) ze svých dílčích příkazů Tato volba je dána pravdivostní hodnotou výrazu (reprezentujícího podmínku) Jazyk C rozlišuje dva typy podmíněného příkazu: 16/01/2019
Podmíněný příkaz (2) neúplný: úplný: obecný tvar: if (výraz) příkaz funkce: vyhodnotí se výraz za klíčovým slovem if je-li výraz pravdivý, provede se příkaz, v opačném případě program pokračuje dalším příkazem úplný: obecný tvar: if (výraz) příkaz1 else příkaz2 je-li výraz pravdivý, provede se příkaz1, v opačném případě se provede příkaz2 16/01/2019
Podmíněný příkaz (3) Funkce podmíněných příkazů znázorněná graficky pomocí vývojových diagramů: výraz výraz příkaz příkaz1 příkaz2 16/01/2019
Příkazy cyklu (1) Umožňují vícekrát (nebo ani jednou) pro-vést určitý příkaz Jazyk C rozlišuje příkaz cyklu: s podmínkou na začátku: obecný tvar: while (výraz) příkaz funkce: vyhodnotí se výraz za klíčovým slovem while je-li výraz pravdivý, provede se příkaz a opět se vy-hodnotí výraz příkaz se provádí tak dlouho, dokud je výraz pravdivý v okamžiku, kdy výraz není pravdivý, program pokra-čuje dalším příkazem pozn.: příkaz nemusí být proveden ani jednou 16/01/2019
Příkazy cyklu (2) Poznámka: s podmínkou na konci: obecný tvar: do příkaz while (výraz); funkce: provede se příkaz za klíčovým slovem do vyhodnotí se výraz za klíčovým slovem while je-li výraz pravdivý, provádí se příkaz znovu, v opač-ném případě program pokračuje následujícím příkazem pozn.: příkaz je vždy proveden alespoň jednou Poznámka: cyklus s podmínkou na začátku lze vždy nahra-dit cyklem s podmínkou na konci a naopak prakticky však bývá v některých případech jed-nodušší použití cyklu s podmínkou na začátku a v jiných případech cyklu podmínkou na konci 16/01/2019
Příkazy cyklu (3) Funkce příkazů cyklu znázorněná graficky pomocí vývojových diagramů: cyklus s podmínkou na začátku cyklus s podmínkou na konci výraz příkaz výraz příkaz 16/01/2019