Elágazások

Kétirányú elágazás

Elágazásokat akkor alkalmazunk, amikor valamilyen feltétel esetében bizonyos utasításokat kell elvégeztetnünk, ha a feltétel nem következik be, akkor meg más utasításokat kell elvégeztetnünk, vagy pedig semmilyen utasítást sem kell végeztetnünk. A beszélt nyelvben ezt a ha... akkor... szavakkal szoktuk kifejezni.
Ahhoz, hogy jobban megértsük, miről is van szó, nézzünk egy egyszerű példát. Készítünk egy programot, amelyik kér egy egész számot a felhasználótól és kiírja a szám abszolút értékét (moduluszát). Ez magát a számot jelenti, ha a szám pozitív, vagy nulla és a szám ellentétas értékét, ha ez negatív.

#include <stdio.h>
void main(){
int i;
printf("Kerek egy szamot: ");
scanf("%d", &i);
if(i<0) // itt van a kutya eltemetve i = -i;
printf("A szám abszolút értéke: ");
printf("%d", i);
}

az Az if(i<0); sorban lekérdezzük, hogy kisebb-e a szám nullánál? Amennyiben a feltétel igaz (tehát a szám kisebb nullánál) végrehajtásra kerül a következő sorban levő utasítás. Ha több utasítést akartunk volna végrehajtani, akkor blokkot {...} alkalmaztunk volna. Ha nem teljesül a feltétel, akkor a szám pozitív vagy nulla és nem kell vele semmit sem csinálni.
Nézzünk most egy olyan programot, amelyik bekér két számot és eldönti, hogy a kettő közül melyik a nagyobb. A nagyobbikat kiírja.
#include <stdio.h>
void main(){
int i,j,k;
printf("Kerek egy szamot: ");
scanf("%d", &i);
printf("Kerek meg egy szamot: ");
scanf("%d", &j);
if(i>j)
k=i;
else
k=j;
printf("A két szám közül a nagyobbik értéke : ");
printf("%d", k);
}

Amint látjuk, ez az elágazás tisztán kétágú. Mindkét esetben van tennivalónk. Bevezettünk egy k egészet és ez felveszi i értéjkét, ha i a nagyobb, ellenkező esetben pedig j értékét. Ha a két szám egyenlő, akkor is j értékét veszi fel, de ez minket olyan nagyon nem érdekel, mert két egyenlő szám közül mindegy, hogy melyik a nagyobb.

Többirányú elágazás

Egy példán keresztül próbáljuk meg megérteni a többirányú elágazást. A program bekéri a jegyet és kiírja a minősítést. A feladatot if-else sorozatokkal is meg lehetne oldani, de úgy áttekinthetetlen a program.
Szerencsáre a C-ben rendelkezésünkre állnak a switch-case kulcsszavak. A switch után zárójelbe kell írni azt a változót, amelynek bizonyos értékeire meg akarjuk valósítani az elágazást. A case kulcsszó után írjuk azt az értékét a változónak, amelyre a megfelelő ágon kell haladnunk (pl. 5 esetén írja ki, hogy jeles). Lehetőségünk van arra is, hogy lekezeljük azt az esetet, amikor a változó egyetlen felsorolt értéket sem vesz fel. Ekkor használjuk adefault utasítást. Ha például a felhasználó 6-os jegyet ír be, akkor a gép informálja arról, hogy nincs ilyen jegy. Ha az ágakat a break utasítással lezárjuk, akkor a program a megfelelő ág utasításainak végrehajtása után kilép a switch blokkjából, ellenkező esetben végrehajtja a többi ágakat.