Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!
Zadejte Vaši e-mailovou adresu:
Kamarád fotí rád?
Přihlas ho k odběru fotomagazínu!
Zadejte e-mailovou adresu kamaráda:
C/C++
Učíme se C (3.díl)
30. srpna 2000, 00.00 | První část povídání o řídících strukturách a příkazech.
Řídící struktury I.
BlokSyntaxe bloku je velice jednoduchá. Blok začíná otevírací složenou závorkou a končí, překvapivě, zavírací složenou závorkou. Mezi těmito závorkami mohou být libovolné jiné příkazy včetně dalších bloků. Kromě toho mohou být ještě na začátku bloku, tedy před prvním příkazem, lokální deklarace a definice. Proměnné (a další objekty) takto definované jsou pak viditelné pouze uvnitř bloku a v dalších vnořených blocích.
Blok je v C chápán jako jediný příkaz a proto se také dá použít všude tam, kde je možné použít příkaz. Blok se také často označuje pojmem složený příkaz.
{ int i; DelejNeco(i); { DelejJesteNeco(i); } }podmíněný příkaz if
if (výraz1) příkaz1if je základní příkaz sloužící k větvení toku programu a jeho chování není nijak překvapivé. Prvním krokem při vykonávání příkazu je vyhodnocení výrazu1 (závorky kolem výrazu nelze vynechat!). Pokud je hodnota, vzniklá jeho vyhodnocením, nenulová, provede se příkaz1. V opačném případě, kdy je výraz1 vyhodnocen jako nula, se příkaz1 neprovede.
Příkaz if lze ještě doplnit o nepovinnou část else:
if (výraz1) příkaz1 else příkaz2Rozdíl při použití else je v tom, že při nesplnění podmínky (výraz1 je vyhodnocen jako 0) se provede příkaz2.
if (a>1) a=1; else b=1;V příkazu a=1; (stejně tak v b=1;) je nutné použít středník, protože právě ten udělá z výrazu a=1 příkaz. V C znak středníku neplní oddělovací funkci, jak je tomu například v Pascalu, ale je přímo součástí příkazů.
cyklus while
Příkaz while realizuje v C cykly s podmínkou na začátku.
while (výraz1) příkaz1While funguje tak, že se nejprve vyhodnotí výraz1 a pak, je-li vyhodnocen jako nenulový, provede se příkaz1. Po jeho provedení se znovu vyhodnotí výraz1 a případně se znovu provede příkaz1. Cyklus končí v okamžiku, kdy je podmínka vyhodnocena jako 0. Příkaz1 se pak již neprovede a program pokračuje dalším příkazem po while.
int a=0; while (a<10) a++; //desetkrát se provede inkrementace a.cyklus do – while
Podobný cyklu while je příkaz do – while, který ale vyhodnocuje pokračovací podmínku (výraz1) až po provedení těla cyklu. To znamená, že minimálně jednou se tělo cyklu provede vždy.
do příkaz1 while (výraz1)Nejprve se provede příkaz1 a teprve po jeho provedení je vyhodnocen výraz podmínky. Pokud je nenulový, znovu se vykoná příkaz1. To pokračuje až do doby, kdy je podmínka vyhodnocena jako nulová.
a=0; do { printf(“ahoj\n”);} while (a++ != 10)Na předchozím příkladu je vidět, že poslední řádek si lze, u složitějších programů, snadno splést se zápisem obyčejného cyklu while. Proto se ukončovací závorka bloku často píše před slovo while. Tak programátor naznačí sám sobě, ale i dalším lidem, kteří budou se zdrojákem pracovat, že nejde o cyklus while, ale do-while.
a=0; do { printf(“ahoj\n”); }while (a++ != 10)cyklus for
Cyklus for je vlastně jen trochu rozšířený příkaz while, pomocí kterého můžeme přehledněji zapisovat iterační cykly. Už na první pohled vypadá příkaz for odlišně od stejných příkazů v jiných jazycích. I jeho použití může být značně odlišné od toho, na jaké jsme zvyklí třeba z Pascalu. Nicméně hlavní způsob jeho uplatnění budou, stejně jako v jiných jazycích, právě iterační cykly.
for (inicializační_výraz; terminální_výraz; iterační_výraz) příkaz1příkaz for je prováděn v těchto krocích:
- Je vyhodnocen inicializační výraz. Jak už název napovídá, je primárně určen pro inicializování iterační proměnné, což se provede jako postranní efekt vyhodnocení výrazu.
- Je vyhodnocen terminální výraz. Pokud je vyhodnocen jako 0, je vykonávání cyklu for ukončeno a pokračuje se prvním příkazem uvedeným po cyklu. Pokud je ale vyhodnocen jako nenulový, pokračuje se krokem 3.
- Je proveden příkaz1.
- Vyhodnotí se iterační výraz. Opět je už z názvu patrné, že slouží především k iteraci proměnné.
- Pokračuje se znovu od bodu 2.
Typické použití cyklu for:
int i; for(i=0; i<5; i++) printf("%d",i); // 5-krát se provede příkaz printf, který tiskne hodnotu proměnné i.Jako inicializační a iterační výrazy mohou být použity výrazy jakéhokoliv typu. Terminální výraz by však měl být číselný. Je také možné vynechat libovolný z těchto výrazů. Například vynecháním inicializačního a iteračního výrazu vlastně získáme jinak zapsaný cyklus while. Vynecháním terminálního výrazu pak docílíme nekonečného cyklu, protože chybějící terminální výraz bude nahrazen nějakou nenulovou konstantou a ta, samozřejmě, nemůže být nikdy vyhodnocena jako 0.
Následující příklad demonstruje použití cyklu for pro neiterační cyklus.
for (;(a=getch())!=27; putch(a));Inicializační výraz je vynechán, ale znak středníku je povinný a tudíž jej vynechat nelze. V terminálním výrazu je do proměnné a načítán znak z klávesnice a načtená hodnota je hned použita při porovnání s konstantou 27 (klávesa Escape). Cyklus je tedy ukončen stiskem klávesy Escape. Tělem cyklu je prázdný příkaz ;. Tisk znaku zajišťuje až vyhodnocení iteračního výrazu.
Tak, a to je konec. Tedy konec dnešního dílu. Už se ale můžete těšit na příští díl, který bude ještě napínavější než ten dnešní. Bude totiž řeč o tajném šamanském učení, které k větvění programů používá zkrácené vyhodnocování logických operátorů, o ternárním podmíněném operátoru a o nečistých praktikách příkazu goto. :-)
Obsah seriálu (více o seriálu):
- Učíme se C (1. díl)
- Učíme se C (2. díl)
- Učíme se C (3.díl)
- Učíme se C (4. díl)
- Učíme se C (5.díl)
- Učíme se C (6.díl)
- Učíme se C (7.díl)
- Učíme se C (8.díl)
- Učíme se C (9.díl) - Řetězce
- Učíme se C (10.díl) - Vstupně výstupní funkce
- Učíme se C (11.díl) - Formátovaný výstup
- Učíme se C (12.díl) - Formátový specifikátor
- Učíme se C (13.díl)
- Učíme se C (14.díl) - Vícerozměrná pole
- Učíme se C (15.díl) - Ukazatele
- Učíme se C (16.díl) - Modifikátory paměťové třídy
- Učíme se C (17.díl) - Pole a ukazatel
- Učíme se C (18. díl) - Dynamická alokace paměti
- Učíme se C (19. díl) - Práce se soubory I.
- Učíme se C (20. díl) - Práce se soubory II.
- Učíme se C (21. díl) - Parametry funkce main()
- Učíme se C (22. díl) - Ukazatele na funkce
- Učíme se C (23. díl) - Složité deklarace a definice
- Učíme se C (24. díl) - Funkce s proměnným počtem parametrů
- Učíme se C (25. díl) - Bitové operátory a bitové pole
- Učíme se C (26. díl) - Datové typy enum a union
- Učíme se C (27. díl - závěr) - Programové moduly
-
25. listopadu 2012
-
30. srpna 2002
-
10. října 2002
-
4. listopadu 2002
-
12. září 2002
-
25. listopadu 2012
-
28. července 1998
-
31. července 1998
-
28. srpna 1998
-
6. prosince 2000
-
27. prosince 2007
-
4. května 2007