HTML

Proghelp

Programozási tutorial-ok és feladat kidolgozások főleg Debreceni Egyetem Mérnök Informatikus hallgatóinak számára!

Friss topikok

Linkblog

C gyors talpaló II. lecke

master994 2011.02.15. 17:30

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

Szólj hozzá!

A bejegyzés trackback címe:

https://proghelp.blog.hu/api/trackback/id/tr802773803

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása