tarkastuslausumat C, osa 1
Tervetuloa seuraavaan erään sarjassamme Fundamentals of C.
Tarkastuslauseiden avulla voimme määrittää ohjelman ohjauksen kulun; ts.järjestyksen, jossa ohjelman ohjeet on suoritettava. Niiden avulla on mahdollista tehdä päätöksiä, suorittaa tehtäviä toistuvasti tai hypätä koodinpätkästä toiseen.
C: ssä on neljä tarkastuslauseketyyppiä:
- päätöksenteko-lausumat
- Valintalausunnot
- Iterointilauseet
- Hyppylausunnot
päätöksenteko-lausuma: if-else-lausumaa
if-else-lausumaa käytetään loogisen testin suorittamiseen ja sen jälkeen jompaankumpaan kahdesta mahdollisesta toimesta riippuen testin tulos (eli onko tulos tosi vai epätosi).
syntaksi:
if (condition){ statements} else{ statements}
jos if-lausekkeessa määritelty ehto arvioidaan todeksi, if-lohkon sisällä olevat lausekkeet toteutetaan ja määräysvalta siirtyy lausekkeeseen välittömästi if-eston jälkeen. Vaikka ehto olisi väärä eikä else-blokkia olisi, kontrolli siirtyy tiliotteeseen heti if-blokin jälkeen.
else-osa vaaditaan vain, jos on suoritettava tietty ohjeiden sarja, jos ehto arvioidaan epätoseksi. On tärkeää huomata, että ehto on aina määritelty suluissa ja että on hyvä käytäntö liittää if-lohkon tai else-lohkon väittämät henkseleihin, olipa kyse yksittäisestä lauseesta tai yhdistelmälauseesta.
seuraava ohjelma tarkistaa, onko annettu numero positiivinen vai negatiivinen.
#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; }
seuraava ohjelma vertaa kahta merkkijonoa tarkistaakseen, ovatko ne yhtä suuret vai eivät.
#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; }
yllä oleva ohjelma vertaa kahta merkkijonoa tarkistaakseen, ovatko ne samat vai eivät. Tähän tarkoitukseen käytetään funktiota strcmp
. Se ilmoitetaan string.h
– tiedostossa seuraavasti:
int strcmp(const char *s1, const char *s2);
se vertaa s1
osoittamaa merkkijonoa s2
osoittamaan merkkijonoon. Funktio strcmp
palauttaa kokonaisluvun, joka on suurempi kuin nolla, yhtä suuri tai pienempi kuin nolla, kuten s1
osoittama merkkijono on suurempi kuin s2
osoittama merkkijono.
näin ollen yllä olevassa ohjelmassa, jos kaksi merkkijonoa a
ja b
ovat yhtä suuret, strcmp
funktion tulisi palauttaa arvo 0. Jos se palauttaa 0, jouset ovat samat; muuten ne ovat erilaisia.
sisäkkäisiä if-ja if-else-lausekkeita
on myös mahdollista upottaa tai pesiä if-else-lausekkeita toisen sisäpuolelle. Pesintä on hyödyllistä tilanteissa, joissa on valittava yksi useista eri toimintalinjoista.
sisäkkäisen if-else-lausuman yleinen muoto on:
if(condition1){// statement(s);}else if(condition2){//statement(s);}....else if (conditionN){//statement(s);}else{//statement(s);}
edellä mainittuja kutsutaan myös if-else-tikapuiksi. Sisäkkäisen if-else-lausekkeen suorittamisen aikana, heti kun havaitaan ehto, joka arvioi true-lausekkeeksi, kyseiseen if-blokkiin liittyvät lausekkeet suoritetaan ja loput sisäkkäisistä if-else-lausekkeista ohitetaan. Jos kumpikaan ehdoista ei pidä paikkaansa, joko viimeinen else-lohko suoritetaan tai jos else-lohko puuttuu, ohjaus siirtyy seuraavaan ohjeeseen heti else-if-tikapuun jälkeen.
seuraava ohjelma käyttää sisäkkäistä if-else-lausetta löytääkseen suurimman kolmesta luvusta.
#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; }
yllä olevassa ohjelmassa verrataan kolmea kokonaislukusuuretta ja tulostetaan suurin. If: n ensimmäisessä lausekkeessa verrataan arvoja a
ja b
. Jos a>b
pitää paikkansa, ohjelman ohjaus siirtyy if-lohkon sisällä pesivään if-else-lauseeseen, jossa b
verrataan arvoon c
. Jos b>c
pitää myös paikkansa, painetaan arvo a
; muuten verrataan arvoa c
ja a
ja jos c>a
on totta, painetaan arvo c
. Tämän jälkeen ohitetaan loput if-else-tikkaat.
Jos kuitenkin ensimmäinen ehto a>b
on väärä, kontrolli siirtyy suoraan uloimpaan else-if-lohkoon, jossa arvoa b
verrataan arvoon c
(koska a
ei ole suurin). Jos b>c
on totta, b
: n arvo painetaan muuten c
: n arvo painetaan. Huomaa pesintä, hammasrautojen käyttö ja sisennys. Kaikki tämä on tarpeen selkeyden säilyttämiseksi.
Valintalausunto: kytkinlauseketta
kytkinlauseketta käytetään monisuuntaisissa valinnoissa, jotka haarautuvat eri koodisegmenteiksi muuttujan tai lausekkeen arvon perusteella. Tämän lausekkeen tai muuttujan on oltava kokonaislukutietotyyppiä.
syntaksi:
switch (expression){ case value1: code segment1; break; case value2: code segment2; break;... case valueN: code segmentN; break; default: default code segment;}
tämän lausekkeen arvo luodaan joko ohjelman suorituksen aikana tai luetaan käyttäjän syötteenä. Tapaus, jonka arvo on sama kuin lausekkeen arvo, valitaan ja suoritetaan. Valinnaista oletusmerkkiä käytetään määrittelemään suoritettava koodisegmentti silloin, kun lausekkeen arvo ei vastaa mitään tapausarvoista.
break
lausuma on jokaisen jutun lopussa. Jos näin ei olisi, toteutus jatkuisi seuraavan tapauksen koodisegmenttiin edes tarkistamatta asian arvoa. Esimerkiksi oletetaan, että switch
lauseessa on viisi tapausta ja kolmannen tapauksen arvo vastaa ilmaisun arvoa. Jos kolmannen tapauksen lopussa ei olisi taukolausuntoa, myös kaikki tapauksen 3 jälkeiset tapaukset toteutettaisiin tapauksen 3 ohella. Jos katkos on läsnä, valitaan ja suoritetaan vain vaadittu tapaus, jonka jälkeen ohjaus siirtyy seuraavaan lausekkeeseen välittömästi kytkinlausekkeen jälkeen. break
ei ole default
jälkeen, koska oletustapauksen jälkeen määräysvalta siirtyy joka tapauksessa seuraavaan lausekkeeseen heti vaihdon jälkeen.
esimerkki: viikonpäivän painoon tarkoitettu ohjelma.
#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; }
tämä on hyvin perusohjelma, joka selittää kytkinkotelon Konstruktion toimivuuden. Riippuen käyttäjän syöttämästä numerosta valitaan ja suoritetaan sopiva tapaus. Jos esimerkiksi käyttäjän syöte on 5, tapaus 5 suoritetaan. Tapauksessa 5 esiintyvä break
lauseke keskeyttää kytkinlausekkeen suorittamisen tapauksen 5 jälkeen ja ohjaus siirtyy seuraavaan lausekkeeseen kytkimen jälkeen, joka on:
return 0;
on myös mahdollista upottaa yhdistetyt lausekkeet kytkinlausekkeen kotelon sisään. Nämä yhdistelmälauseet voivat sisältää ohjausrakenteita. Näin ollen on myös mahdollista saada sisäkkäinen kytkin upottamalla se kotelon sisään.
kaikki switch-case-lausekkeella kirjoitetut ohjelmat voidaan kirjoittaa myös if-else-lausekkeella. On kuitenkin hyvä ohjelmointi järkevää käyttää if-lausetta silloin, kun on ryhdyttävä toimiin arvioituaan jotakin yksinkertaista tai monimutkaista ehtoa, johon voi liittyä relaatio-ja loogisten lausekkeiden yhdistelmä (esim. (if((a!=0)&&(b>5))
).
jos joudut valitsemaan suuren arvoryhmän joukosta, kytkinlauseke toimii paljon nopeammin kuin sisäkkäisten if: ien joukko. Kytkin eroaa if että kytkin voi vain testata tasa-arvoa, kun taas if voi arvioida minkä tahansa Boolen lauseke.
kytkinlauseketta on käytettävä, kun on tehtävä valinta annetusta valintakokonaisuudesta. Switch case-lauseketta käytetään yleensä valikkopohjaisissa sovelluksissa. Yleisimmin switch-case-lauseketta käytetään tietojen käsittelyssä tai tiedostojen käsittelyssä. Suurin osa tiedostojen käsittelystä liittyy yhteisiin toimintoihin: tiedoston luominen, tietueiden lisääminen, tietueiden poistaminen, tietueiden päivittäminen, koko tiedoston tai joidenkin valikoivien tietueiden Tulostaminen. Seuraava ohjelma antaa käsityksen siitä, miten Switchin tapauslauseketta voidaan käyttää tietojen käsittelyssä. Se ei liity koodi tiedostojen käsittelyyn, koska voimme keskustella tiedostojen käsittely C vasta kun olemme oppineet kehittyneitä käsitteitä, kuten osoittimet, rakenteet ja liitot.
esimerkki: tietojen käsittelyssä käytetty kytkentätapauslauseke.
#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; }
edellä mainitussa switch-case-esimerkissä kytkinkotelon konstruktio yleensä sijoitetaan do-while-tyyppisen iteraatiokonstruktion sisään. Meidän nex postitse, keskustelemme näistä iteraatio lausuntoja.
Leave a Reply