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 + b
a - b
a * b
a / b
a % 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 == b
a != b
a < b
a <= b
a > b
a >= 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
continue
abreak
. -
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ř.
f1
volá 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.