Beindult a gépezet íme a 2. gyorstalpaló:
Döntési szerkezetek (szelekciók ) : / If , Switch, ?: feltételkezelő operátor /
I. if
A programozás egyik leggyakrabban használt eszköze a választás ( szelekció ).(akár 2 vagy több ágú választási szerkezetről beszélünk!) Lényegében egy megadott feltétel alapján a számítógép eldönti ,hogy melyik utasítássorozatot kell végrehajtania. A C programozási nyelvben az általános döntéshozó utasítás neve az /if/ amely így épül fel:
if (kifejezés(vizsgált feltétel))
utasítás
Ha a vizsgált feltétel/kifejezés igaz(teljesül) abban az esetben végrehajtódik az utasítás(utasítássorozat)!
Példa a való életből:
„if (esik az eső)
vizes az út”
if ( a > 0 )
i++;
Ha az a változó értéke nagyobb mint 0 akkor növeli az i értékét(egy ág ha a feltétel nem igaz akkor a vezérlés csorog tovább nem történik semmi!
/Else ág/
Egy kis átalakítással nem csak 1 ág állítható elő hanem úgynevezett „egyébként” szál is beiktatható a programba az /else/ parancsal! Működési elve lényegében a következő:
if (kifejezés)
utasítás(blokk) 1
else
utasítás(blokk) 2
Ha a kifejezés/feltétele teljesül akkor végrehajtódik az első utasítás/utasítássorozat de ha ez nem teljesül akkor a folyamat else ághoz tartozó utasításai hajtódnak végre! Ha szövegesen kellene leírnunk akkor így nézne ki:
Ha (Igaz) akkor
Ez1
Egyébként
Ez2
Példaprogram a if-else használatára:/Páros vagy Páratlan döntési mechanizmus/
#include <stdio.h>
int main ()
{
int szam,maradek;
printf("Adja meg a vizsgalando szamot:");
scanf("%d", &szam);
maradek = szam % 2;
if ( maradek == 0)
printf ("A szám paros.\n");
else
printf ("A szám paratlan.\n");
return 0;
}
Ezek úgynevezett standard programok a 2 választással megoldható azonban a valóvilág nem mindig fekete vagy fehér. Nem mindig tudunk megfelelő feltételt állítani. A több választáshoz léteznek megoldások melyekkel ez kiküszöbölhető:
1.Több if és else egymásba ágyazással:
If ( kifejezés1 )
utasítás1
else if ( kifejezés2 )
utasítás2
else
utasítás3
Így a szokásos két irányú elágazás máris 3 irányúvá bővült!
II. switch
Létezik a több ágú szelekcióra egy másik megoldás! Az if-else használata egyre gyakrabban fordult elő melyben egy változó értékét többször meg kellett vizsgálni egymás után ezért kialakult egy új utasítás melynek a neve switch(kapcsoló)!
Az utasítás általános alakja a következő:
switch ( változó/kifejezés/)
{
case eset:
utasítás
utasítás
….
break; //** Break utasítás mely megszakítja a switch utasítás ha ezt nem írjuk a folyamat tovább csorog.
case eset2:
utasítás
utasítás
….
break;
…..
default:
utasítás
utasítás
…..
break;
}
A switch után lévő kifejezé/változó értéke összehasonlítódik sorban az eset1/eset2 és így tovább...Ha valamelyik case ágban egyezést talál akkor lefut az utána lévő utasítás/utasítások.
A break egy kulcsszó mely lezárja az egyes utasításágak végét és biztosítja a switch-ből való kilépést! NE HAGYJUK EL A BREAK-ET!!!(Mivel ilyenkor a switch tovább fut a soron következő elemre így akár más eredményt is kaphatunk mint kellene).
Van egy úgynevezett default ág amely akkor fontos ha egyik case esetében sem volt egyezés!
Példaként írjuk egy egyszerű számológép programot mely képes a 4 alapműveletre:
#include <stdio.h>
int main()
{
float szam1,szam2;
char operator;
printf("Adja meg a szamolando kifejezest:\n");
scanf("%f %c %f",&szam1,&operator,&szam2);
switch(operator)
{
case '+':
printf("%.2f\n", szam1 + szam2);
break;
case '-':
printf("%.2f\n",szam1 - szam2);
break;
case '*':
printf("%.2f\n",szam1 * szam2);
break;
case '/':
if (szam2 == 0)
printf("Nullaval tilos osztani.\n");
else
printf("%.2f\n", szam1 / szam2);
break;
default:
printf("Ismeretlen muveleti jel.\n");
break;
}
return 0;
}
Programban használt %.2f a megjelenítendő tizedes jegyeket írja le!
III. ?:
C-ben még létezik egy harmadik feltételes elágazás, ezt általában változó értékadására bizonyos feltétel mellett. Ez a ?: ( kérdőjel kettőspont )
Felépítése:
logikai kifejezés ? feltétel ha igaz : feltétel ha hamis
Példaprogram:
#include<stdio.h>
int main()
{
int i, osszeg=0;
for( i = 1 ; i <= 50 ; i++)
osszeg = ((i % 2) > 0) ? osszeg : osszeg+1; // *megj
printf("1-tol 50-ig %d db paraos szam van.", osszeg);
return 0;
}
Program megszámolja mennyi páros szám van 1 és 50 kötött.
*megj: a feltétel teljesülésétől függően osszeg változó érteke ugyan az marad vagy növeljük 1-el. Feltétel akkor is helyes ha a > 0 -át elhagyjuk mivel C-ben minden érték igaz ami nem nulla (0), de aki nem biztos magába írja ki hosszan mintsem rosszul működjön.
Összehasonlító és logikai operátorok
Feltételekben és ciklusokban gyakran kell összehasonlítani különböző értékeket, ennek elvégzésére a hasonlító operátorokat használjuk. Ezek a következők: <,>,<=,>=,==,!=. Ha ezekkel két változót vagy kifejezést hasonlítunk össze, akkor az eredmény int típusú lesz, és értéke 1, ha a reláció igaz, illetve 0, ha hamis.
< kisebb mint
> nagyobb mint
<= kisebb vagy egyenlő
>= nagyobb vagy egyenlő
== egyenlő
!= nem egyenlő
A logikai kifejezésekben gyakran összetett feltételeket is meg kell fogalmazni, erre szolgálnak a logikai operátorok. Ezek a következők: ! a tagadás művelete, egyoperandusú. && logikai és, || logikai vagy műveletek. A műveletek precedenciája a táblázatban.
A következő táblázatban összefoglaltuk az említett műveleteket precedenciájuk szerint rendezve. Valamint a kiértékelés sorrendjét is megadtuk. A kiértékelés sorrendje akkor kerül előtérbe, ha egy kifejezésben egyenlő precedenciájú operátorok szerepelnek zárójelezés nélkül.
Operátor Kiértékelés sorrendje
! ~ - ++ -- & * (típus) Jobbról balra
* / % Balról jobbra
+ - Balról jobbra
<< >> Balról jobbra
< <= > >= Balról jobbra
== != Balról jobbra
& Balról jobbra
^ Balról jobbra
| Balról jobbra
&& Balról jobbra
|| Balról jobbra
?: Jobbról balra
= += -= *= /= %= <<= >>= &= |= ^= Jobbról balra