2. cvičení
Stručný přehled jazyka C aneb základy 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 }
-
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í.
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.
Probrané příklady
-
Výpis sudých čísel. Program ukazuje využití cyklu
for
a podmínky.#include <stdio.h> int main() { for (int i = 0; i < 100; i++) { if (i % 2 == 0) printf("%d\n", i); } return 0; }
Místo cyklu
for
lze ekvivalentně použít cykluswhile
:#include <stdio.h> int main() { int i = 0; while (i < 100) { if (i % 2 == 0) printf("%d\n", i); i++; } return 0; }
Cyklus
for
je vhodné použít v případech, kdy předem známe počet opakování cyklu. Cykluswhile
je obecnější a hodí se pro situace, kdy dopředu neznáme počet opakování cyklu. -
Výpis prvočísel. Program ukazuje komplikovanější strukturu vnořených cyklů.
#include <stdio.h> int main() { for (int i = 1; i < 100; i++) { int pocet_delitelu = 0; for (int j = 1; j <= i; j++) { if (i % j == 0) pocet_delitelu += 1; } if (pocet_delitelu <= 2) printf("%d\n", i); } return 0; }
O něco chytřejší verze využívá toho, že čísla
j
větší než polovina číslai
nemohou být děliteli číslai
. Stačí tedy procházet pouze čísla od 2 doi / 2
.#include <stdio.h> int main() { for (int i = 1; i < 100; i++) { int pocet_delitelu = 1; for (int j = 2; j < i / 2; j++) { if (i % j == 0) pocet_delitelu += 1; } if (pocet_delitelu == 1) printf("%d\n", i); } return 0; }