vezérlő utasítások A C 1.részében

Üdvözöljük sorozatunk következő részében, a C alapjai.

vezérlő utasítások lehetővé teszik számunkra, hogy meghatározzuk a programvezérlés folyamatát; azaz azt a sorrendet, amelyben a program utasításait végre kell hajtani. Lehetővé teszik a döntések meghozatalát, a feladatok ismételt elvégzését vagy a kód egyik szakaszáról a másikra történő ugrást.

a C-ben négyféle ellenőrző utasítás létezik:

  1. döntéshozatali nyilatkozatok
  2. kiválasztási nyilatkozatok
  3. iterációs nyilatkozatok
  4. ugrási nyilatkozatok

döntéshozatali nyilatkozat: Az if-else utasítás

az if-else utasítás egy logikai teszt elvégzésére szolgál, majd az If-else utasítástól függően két lehetséges művelet egyikét hajtja végre a teszt eredménye (azaz, hogy az eredmény igaz vagy hamis).

szintaxis:

if (condition){ statements} else{ statements}

ha az if utasításban megadott feltétel true értéket ad, akkor az IF-blokkban lévő utasítások végrehajtásra kerülnek, majd a vezérlő közvetlenül az if-blokk után átkerül az utasításba. Még akkor is, ha a feltétel hamis, és nincs más blokk, a vezérlés az IF-blokk után azonnal átkerül az utasításba.

az else rész csak akkor szükséges, ha egy bizonyos utasítássorozatot kell végrehajtani, ha a feltétel false értékre kerül. Fontos megjegyezni, hogy a feltétel mindig zárójelben van megadva, és jó gyakorlat, ha az állításokat az if blokkban vagy az else-blokkban zárójelben csatoljuk, függetlenül attól, hogy egyetlen utasításról vagy összetett utasításról van szó.

a következő program ellenőrzi, hogy a megadott szám pozitív vagy negatív.

#include<stdio.h>int main( ) { int a; printf("n Enter a number:"); scanf("%d", &a); if(a>0) { printf( "n The number %d is positive.",a); } else { printf("n The number %d is negative.",a); } return 0; }

a következő program összehasonlít két karakterláncot annak ellenőrzésére, hogy egyenlőek-e vagy sem.

#include <stdio.h>#include <string.h>int main( ) { char a , b; printf("n Enter the first string:"); scanf("%s",a); printf("n Enter the second string:"); scanf("%s",b); if((strcmp(a,b)==0)) { printf("nStrings are the same"); } else { printf("nStrings are different"); } return 0; }

a fenti program összehasonlít két karakterláncot annak ellenőrzésére, hogy azonosak-e vagy sem. Erre a célra a strcmp funkciót használjuk. A string.h fájlban deklarálva van:

int strcmp(const char *s1, const char *s2);

összehasonlítja a s1 által mutatott karakterláncot a s2által mutatott karakterlánccal. A strcmp függvény nullánál nagyobb, egyenlő vagy kisebb egész számot ad vissza, ennek megfelelően, mivel a s1 – ra mutatott karakterlánc nagyobb, egyenlő vagy kisebb, mint a s2 – re mutatott karakterlánc.

ezért a fenti programban, ha a két a és b karakterlánc egyenlő , akkor a strcmp függvénynek 0-t kell adnia. Ha 0-t ad vissza, a húrok ugyanazok; különben különböznek.

beágyazott if és if-else utasítások

az if-else utasítások beágyazása vagy beágyazása is lehetséges. A fészkelés olyan helyzetekben hasznos, amikor a különböző cselekvési módok egyikét kell kiválasztani.

a beágyazott if-else utasítás általános formátuma:

if(condition1){// statement(s);}else if(condition2){//statement(s);}....else if (conditionN){//statement(s);}else{//statement(s);}

a fentieket if-else létrának is nevezik. A beágyazott if-else utasítás végrehajtása során, amint egy olyan feltétel találkozik, amely igaznak számít, az adott if-blokkhoz társított utasítások végrehajtásra kerülnek, és a beágyazott if-else utasítások fennmaradó része megkerülésre kerül. Ha egyik feltétel sem igaz, vagy az utolsó else-blokk végrehajtásra kerül, vagy ha az else-blokk hiányzik, a vezérlő közvetlenül az else-if létra után a következő utasításba kerül.

a következő program a beágyazott if-else utasítást használja a három szám közül a legnagyobb megtalálásához.

#include<stdio.h>int main( ) { int a, b,c; a=6,b= 5, c=10; if(a>b) { if(b>c) { printf("nGreatest is: " , a); } else if(c>a) { printf("nGreatest is: ", c); } } else if(b>c) //outermost if-else block { printf("nGreatest is: " , b); } else { printf( "nGreatest is: " , c); } return 0; }

a fenti program három egész számot hasonlít össze, és a legnagyobbat nyomtatja ki. Az első IF utasítás összehasonlítja a a és bértékeket. Ha a>b igaz, akkor a programvezérlés átkerül az if-else utasításba, amely az if blokkban van beágyazva, ahol a bértéket a c értékhez hasonlítják. Ha a b>cis igaz, akkor a a értéket nyomtatja ki; különben a c és a a értéket hasonlítja össze, és ha c>a igaz, akkor a c értéket nyomtatja ki. Ezután megkerülik az if-else létra többi részét.

azonban, ha az első feltétel a>b hamis, a vezérlő közvetlenül átkerül a legkülső else-if blokkba, ahol a b értékét összehasonlítjuk a c értékkel (mivel a a nem a legnagyobb). Ha az b>c értéke igaz, akkor a b értéket nyomtatja, különben a c értéket nyomtatja. Vegye figyelembe a fészkelést, a zárójelek használatát és a behúzást. Mindez az egyértelműség fenntartásához szükséges.

Kiválasztási Nyilatkozat: a switch-case utasítás

a switch utasítás többirányú kijelölésekhez használható, amelyek egy változó vagy kifejezés értéke alapján különböző kódszegmensekre ágaznak. Ennek a kifejezésnek vagy változónak egész adattípusúnak kell lennie.

szintaxis:

switch (expression){ case value1: code segment1; break; case value2: code segment2; break;... case valueN: code segmentN; break; default: default code segment;}

ennek a kifejezésnek az értéke vagy a program végrehajtása során keletkezik, vagy felhasználói bemenetként olvasható be. Az eset, amelynek értéke megegyezik a kifejezés értékével, kiválasztásra és végrehajtásra kerül. Az opcionális alapértelmezett címke a végrehajtandó kódszegmens megadására szolgál, ha a kifejezés értéke nem egyezik az esetértékekkel.

a break nyilatkozat Minden eset végén megtalálható. Ha nem így lenne, a végrehajtás folytatódna a következő eset kódszegmensében anélkül, hogy ellenőrizné az eset értékét. Tegyük fel például, hogy egy switch utasításnak öt esete van, és a harmadik eset értéke megegyezik a kifejezés értékével. Ha a harmadik eset végén nem volt törésnyilatkozat, akkor a 3.eset utáni összes esetet a 3. esettel együtt végrehajtják. Ha break van jelen, csak a kívánt ESET kerül kiválasztásra és végrehajtásra; ezt követően a vezérlő közvetlenül a switch utasítás után átkerül a következő utasításba. Nincs break után defaultmert miután az alapértelmezett esetben a vezérlő mindkét irányban kap át a következő utasítás után azonnal kapcsoló.

példa: a hét napjának nyomtatására szolgáló program.

#include<stdio.h>int main( ) { int day; printf("nEnter the number of the day:"); scanf("%d",&day); switch(day) { case 1: printf("Sunday"); break; case 2: printf("Monday"); break; case 3: printf("Tuesday"); break; case 4: printf("Wednesday"); break; case 5: printf("Thursday"); break; case 6: printf("Friday"); break; case 7: printf("Saturday"); break; default: printf("Invalid choice"); } return 0; }

ez egy nagyon alapvető program, amely megmagyarázza a kapcsoló ház konstrukciójának működését. A felhasználó által megadott számtól függően a megfelelő eset kerül kiválasztásra és végrehajtásra. Például, ha a felhasználói bemenet 5, akkor az 5.eset végrehajtásra kerül. Az 5. esetben jelen lévő break utasítás szünetelteti a switch utasítás végrehajtását az 5. eset után, és a vezérlő átkerül a kapcsoló utáni következő utasításba, amely:

return 0;

az is lehetséges, hogy beágyazni összetett nyilatkozatok belsejében esetében a switch utasítás. Ezek az összetett állítások vezérlő struktúrákat tartalmazhatnak. Így az is lehetséges, hogy beágyazott kapcsoló legyen, ha beágyazza azt egy tokba.

a switch-case utasítással írt összes program az if-else utasítással is írható. Azonban jó programozási értelme az if utasítás használata, amikor valamilyen műveletet kell végrehajtania néhány egyszerű vagy összetett feltétel kiértékelése után, amely relációs és logikai kifejezések kombinációját foglalhatja magában (pl. (if((a!=0)&&(b>5))).

ha nagy értékcsoport közül kell választania, a switch utasítás sokkal gyorsabban fog futni, mint a beágyazott ifs-ek halmaza. A kapcsoló abban különbözik az if-től, hogy a kapcsoló csak az egyenlőséget tesztelheti, míg az if bármilyen típusú logikai kifejezést képes értékelni.

a switch utasítást akkor kell használni, amikor egy adott választási készletből kell választani. A switch case utasítást általában a menüalapú alkalmazásokban használják. A switch-case utasítás leggyakoribb használata az adatkezelés vagy a fájlfeldolgozás. A fájlkezelés nagy része a közös funkciókat foglalja magában: fájl létrehozása, rekordok hozzáadása, rekordok törlése, rekordok frissítése, a teljes fájl vagy néhány szelektív rekord kinyomtatása. Az alábbi program képet ad arról, hogy a switch case utasítás hogyan használható fel az adatkezelésben. Nem foglalja magában a fájlfeldolgozás kódját, mivel a fájlkezelést csak a C-ben tudjuk megvitatni, miután megtanultuk a fejlett fogalmakat, mint a mutatók, struktúrák és szakszervezetek.

példa: az adatfájlok feldolgozásában használt switch case utasítás.

#include<stdio.h>int main() { //create file &set file pointer . int choice; printf("n Please select from the following options:"); printf("n 1. Add a record at the end of the file."); printf("n 2. Add a record at the beginning of the file:"); printf("n 3. Add a record after a particular record:"; printf("nPlease enter your choice:(1/2/3)?"); scanf("%d",&choice); switch(choice) { case 1: //code to add record at the end of the file break; case 2: //code to add record at the beginning of the file break; case 3: //code to add record after a particular record break; default: printf("n Wrong Choice"); } return 0; }

a kapcsolótok fenti példája általában magában foglalja a kapcsolótok konstrukciójának beágyazását egy olyan iterációs konstrukcióba, mint a do-while. A mi nex post, megbeszéljük ezeket iterációs nyilatkozatok.

Leave a Reply