2. cvičení
Stručný přehled jazyka C++
-
Komentáře (ignorovány překladačem, určeny pro vysvětlující text):
// jednořádkový komentář /* víceřádkový komentář */ /* jednořádkový komentář */ -
Funkce
main:int main() { // příkazy } -
Deklarace proměnné:
typ nazev;typ nazev = hodnota;
-
Základní operace s proměnnými:
- přiřazení:
promenna = konstanta;promenna1 = promenna2;
- aritmetické operace:
a + ba - ba * ba / ba % b(zbytek po celočíselném dělení číslaačíslemb)- binární operace modifikující proměnnou nalevo:
a += b(ekvivalentnía = a + b)a -= b(ekvivalentnía = a - b)a *= b(ekvivalentnía = a * b)a /= b(ekvivalentnía = a / b)a %= b(ekvivalentnía = a % b)
- unární operace modifikující danou proměnnou:
c++,++c(zvětšení hodnoty o 1, ekvivalentníc += 1)c--,--c(zvětšení hodnoty o 1, ekvivalentníc -= 1)
- porovnávání:
a == ba != ba < ba <= ba > ba >= b
- booleovské operace:
u && w(AND)u || w(OR)! w(NOT)
- priority operátorů:
- všechny unární operace mají vyšší prioritu než všechny binární operace
(tedy např.
-b < c++je ekvivalentní(-b) < (c++)a ne-(b < c)++) - priority binárních operací:
*,/,%,+,-,<,<=,>,>=,==,!=,&&,||,=,+=,-=,*=,/=,%= - podrobnosti viz Wikipedia
- všechny unární operace mají vyšší prioritu než všechny binární operace
(tedy např.
- přiřazení:
-
Podmínka:
if (podmínka) { // příkazy když je podmínka splněna } else { // příkazy když podmínka není splněna } -
Cyklus
for:for (inicializace; podmínka; modifikace) { // příkazy } -
Cyklus
while:while (podmínka) { // příkazy } -
Předčasné ukončení cyklu: příkazy
continueabreak. -
Definice funkce:
návratový_typ název_funkce(seznam_parametrů) { // příkazy }Např.:
int max(int a, int b) { if (a >= b) return a; else return b; } -
Deklarace funkce: na rozdíl od definice funkce neobsahuje tělo funkce, ale je ukončena středníkem. Např.:
void f1();int f2();int f3(float a, int b);
Deklarace funkcí jsou důležité, pokud se několik funkcí cyklicky volá navzájem (např.
f1volá funkcif2, která volá funkcif3, která opět volá funkcif1) nebo pokud se programátorovi nechce přeuspořádávat funkce podle závislostí.
Přehled základních datových typů
Paměť počítače je lineární a rozdělená na bajty (1 bajt = 8 bitů). Každý bajt v paměti má svou jedinečnou adresu. Interpretace jednotlivých dat uložených v paměti počítače závisí na datovém typu příslušné proměnné.
| Typ | Velikost (bits) | Minimální hodnota | Maximální hodnota | Poznámky |
|---|---|---|---|---|
bool |
8 | 0 | 1 | Pro použití typu bool v jazyce C je třeba #include <stdbool.h>. |
char |
8 | -128 | 127 | 7-bitové kódování znaků pomocí ASCII tabulky. |
unsigned char |
8 | 0 | 255 | |
short |
16 | -32768 | 32767 | Typ pro reprezentaci celých čísel. |
unsigned short |
16 | 0 | 65535 | Typ pro reprezentaci nezáporných celých čísel. |
int |
32 | -2147483648 | 2147483647 | Typ pro reprezentaci celých čísel. |
unsigned int |
32 | 0 | 4294967295 | Typ pro reprezentaci nezáporných celých čísel. |
long |
64 | -9223372036854775808 | 9223372036854775807 | Typ pro reprezentaci celých čísel. |
unsigned long |
64 | 0 | 18446744073709551615 | Typ pro reprezentaci nezáporných celých čísel. |
float |
32 | \(\approx 1.175 \times 10^{-38}\) | \(\approx 3.402 \times 10^{38}\) | Typ pro reprezentaci racionálních čísel. |
double |
64 | \(\approx 2.225 \times 10^{-308}\) | \(\approx 1.797 \times 10^{308}\) | Typ pro reprezentaci racionálních čísel. |
Při vyhodnocování aritmetických operací obsahujících proměnné různých typů
dochází k implicitní konverzi proměnných na „ten větší“ ze zúčastněných typů.
Tedy např. součet proměnné typu short a proměnné typu int proběhne tak,
že se hodnota proměnné typu short převede na typ int a součet se provede
pro typ int. Při výpočtech může dojít k chybám způsobeným přetečením nebo
podtečením maximálního rozsahu hodnot pro daný typ.
Pozor: Celočíselné proměnné lze dělit pouze celočíselně. Pokud je potřeba
neceločíselný výsledek, je třeba explicitně provést přetypování, např.
(float) x / y.
Pozor: Konverze na typ bool funguje jinak než konverze na ostatní
celočíselné typy. Výraz (bool) 0.5 dává 1, kdežto (int) 0.5 dává 0.
Pozor: Hodnoty typu char (znaky) je třeba ve zdrojovém kódu zapisovat
pomocí jednoduchých uvozovek, tedy 'a', 'b', 'c' apod. Pomocí dvojitých
uvozovek se zapisují textové řetězce, kterými se budeme zabývat později.
Důležité pojmy
- Globální a lokální proměnné. Proměnné deklarované uvnitř funkce nebo cyklu
nejsou přístupné zvnějšku dané funkce nebo cyklu. Obecně v každém bloku
příkazů odděleného složenými závorkami (
{a}) lze deklarovat lokální proměnné, které nejsou přístupné zvnějšku tohoto bloku. - Přetypování je „operace“ představující převod hodnoty proměnné nebo výrazu z jednoho typu na jiný. V případě celočíselných typů (a znaků) typicky zůstává stejná číselná hodnota ve společných bajtech v paměti počítače, v případě neceločíselných typů dochází k odseknutí neceločíselné části.
- Rekurzivní funkce je funkce volající sama sebe. Aby se program nezacyklil, je nutné předávat jiné hodnoty parametrů funkce a správně ošetřit počáteční (resp. koncovou) podmínku.