Učíme se C (3.díl) - Builder.cz - Informacni server o programovani

Odběr fotomagazínu

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.

Blok

Syntaxe 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říkaz1
if 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říkaz2
Rozdí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říkaz1
While 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říkaz1
příkaz for je prováděn v těchto krocích:

  1. 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.
  2. 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.
  3. Je proveden příkaz1.
  4. Vyhodnotí se iterační výraz. Opět je už z názvu patrné, že slouží především k iteraci proměnné.
  5. 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):

Tématické zařazení:

 » Rubriky  » C/C++  

 

 

 

Nejčtenější články
Nejlépe hodnocené články

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: