Declarații de Control în C, Partea 1
Bine ați venit la următoarea tranșă din seria noastră, fundamentele C.
declarații de Control ne permit să specificăm fluxul de control al programului; adică, ordinea în care instrucțiunile dintr-un program trebuie executate. Acestea fac posibilă luarea deciziilor, îndeplinirea sarcinilor în mod repetat sau saltul de la o secțiune de cod la alta.
există patru tipuri de declarații de control în C:
- declarații de luare a deciziilor
- declarații de selecție
- declarații de iterație
- declarații de salt
declarație de luare a deciziilor: declarația if-else
declarația if-else este utilizată pentru a efectua un test logic și apoi să ia una dintre cele două acțiuni posibile, în funcție de rezultatul testului (adică dacă rezultatul este adevărat sau fals).
sintaxă:
if (condition){ statements} else{ statements}
dacă condiția specificată în instrucțiunea if se evaluează la true, declarațiile din interiorul blocului if sunt executate și apoi controlul este transferat în declarație imediat după blocul if. Chiar dacă condiția este falsă și nu există niciun alt bloc, controlul este transferat în declarație imediat după blocul if.
partea else este necesară numai dacă o anumită secvență de instrucțiuni trebuie executată dacă condiția se evaluează la fals. Este important să rețineți că condiția este întotdeauna specificată între paranteze și că este o bună practică să anexați declarațiile în blocul if sau în blocul else în bretele, indiferent dacă este o singură declarație sau o declarație compusă.
următorul program verifică dacă numărul introdus este pozitiv sau negativ.
#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; }
următorul program compară două șiruri pentru a verifica dacă sunt egale sau nu.
#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; }
programul de mai sus compară două șiruri pentru a verifica dacă sunt identice sau nu. Funcția strcmp
este utilizată în acest scop. Este declarat în fișierul string.h
ca:
int strcmp(const char *s1, const char *s2);
compară șirul indicat de s1
cu șirul indicat de s2
. Funcția strcmp
returnează un număr întreg mai mare, egal sau mai mic decât zero, în consecință, deoarece șirul indicat de s1
este mai mare decât, egal sau mai mic decât șirul indicat de s2
.
prin urmare, în programul de mai sus , dacă cele două șiruri a
și b
sunt egale, funcția strcmp
ar trebui să returneze un 0. Dacă returnează un 0, șirurile sunt aceleași; altfel sunt diferite.
imbricate dacă și dacă-else declarații
de asemenea, este posibil să încorporați sau să cuib if-else declarații una în cealaltă. Cuibărirea este utilă în situațiile în care trebuie selectat unul dintre mai multe cursuri diferite de acțiune.
formatul general al unei declarații if-else imbricate este:
if(condition1){// statement(s);}else if(condition2){//statement(s);}....else if (conditionN){//statement(s);}else{//statement(s);}
cele de mai sus se mai numesc scara if-else. În timpul executării unei declarații if-else imbricate, de îndată ce se întâlnește o condiție care se evaluează la true, declarațiile asociate cu acel bloc if special vor fi executate și restul declarațiilor if-else imbricate vor fi ocolite. Dacă niciuna dintre condiții nu este adevărată, fie ultimul else-block este executat, fie dacă else-block este absent, controlul este transferat la următoarea instrucțiune prezentă imediat după scara else-if.
următorul program folosește declarația imbricată if-else pentru a găsi cel mai mare dintre cele trei numere.
#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; }
programul de mai sus compară trei cantități întregi și imprimă cea mai mare. Prima instrucțiune if compară valorile a
și b
. Dacă a>b
este adevărat, controlul programului este transferat la instrucțiunea if-else imbricată în blocul if, unde b
este comparat cu c
. Dacă b>c
este de asemenea adevărat, valoarea a
este tipărită; altfel valoarea c
și a
sunt comparate și dacă c>a
este adevărată, valoarea c
este tipărită. După aceasta, restul scării if-else este ocolit.
cu toate acestea, dacă prima condiție a>b
este falsă, controlul este transferat direct la blocul exterior else-if, unde valoarea b
este comparată cu c
(deoarece a
nu este cea mai mare). Dacă b>c
este adevărat valoarea b
este imprimată altfel valoarea c
este imprimată. Rețineți cuibărirea, utilizarea bretelelor și indentarea. Toate acestea sunt necesare pentru a menține claritatea.
Declarație De Selecție: instrucțiunea switch-case
o instrucțiune switch este utilizată pentru selecții de moduri multiple care se vor ramifica în segmente de cod diferite pe baza valorii unei variabile sau a unei expresii. Această expresie sau Variabilă trebuie să fie de tip întreg de date.
sintaxă:
switch (expression){ case value1: code segment1; break; case value2: code segment2; break;... case valueN: code segmentN; break; default: default code segment;}
valoarea acestei expresii este fie generată în timpul executării programului, fie citită ca intrare de utilizator. Cazul a cărui valoare este aceeași cu cea a expresiei este selectat și executat. Eticheta implicită opțională este utilizată pentru a specifica segmentul de cod care trebuie executat atunci când valoarea expresiei nu se potrivește cu niciuna dintre valorile cazului.
declarația break
este prezentă la sfârșitul fiecărui caz. Dacă nu ar fi așa, execuția ar continua în segmentul de cod al următorului caz fără a verifica chiar valoarea cazului. De exemplu, presupunând că o declarație switch
are cinci cazuri, iar valoarea celui de-al treilea caz se potrivește cu valoarea expresiei. Dacă nu ar fi fost prezentă nicio declarație de întrerupere la sfârșitul celui de-al treilea caz, toate cazurile de după Cazul 3 ar fi, de asemenea, executate împreună cu cazul 3. Dacă pauză este prezent numai cazul necesar este selectat și executat; după care controlul este transferat la următoarea declarație imediat după declarația de comutare. Nu există break
după default
deoarece după cazul implicit controlul va fi transferat în orice mod la următoarea declarație imediat după comutare.
exemplu: un program pentru a imprima ziua săptămânii.
#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; }
acesta este un program foarte de bază, care explică de lucru a construi comutator-caz. În funcție de numărul introdus de utilizator, cazul corespunzător este selectat și executat. De exemplu, dacă intrarea utilizatorului este 5, atunci cazul 5 va fi executat. Instrucțiunea break
prezentă în cazul 5 va întrerupe executarea Declarației de comutare după cazul 5 și controlul va fi transferat la următoarea declarație după comutator, care este:
return 0;
de asemenea, este posibil să încorporați declarații compuse în cazul unei declarații de comutare. Aceste declarații compuse pot conține structuri de control. Astfel, este posibil, de asemenea, să aveți un comutator imbricat prin încorporarea acestuia într-o carcasă.
toate programele scrise folosind instrucțiunea switch-case pot fi, de asemenea, scrise folosind instrucțiunea if-else. Cu toate acestea, este logic să folosiți instrucțiunea if atunci când trebuie să luați măsuri după evaluarea unor condiții simple sau complexe care pot implica o combinație de expresii relaționale și logice (de exemplu, (if((a!=0)&&(b>5))
).
dacă trebuie să selectați dintr-un grup mare de valori, o declarație de comutare va rula mult mai repede decât un set de if imbricate. Comutatorul diferă de if în acel comutator poate testa doar egalitatea, în timp ce if poate evalua orice tip de expresie booleană.
instrucțiunea switch trebuie utilizată atunci când trebuie să faceți o alegere dintr-un set dat de opțiuni. Instrucțiunea switch case este utilizată în general în aplicațiile bazate pe Meniu. Cea mai obișnuită utilizare a unei instrucțiuni switch-case este în manipularea datelor sau procesarea fișierelor. Cea mai mare parte a manipulării fișierelor implică funcțiile comune: crearea unui fișier, adăugarea de înregistrări, ștergerea înregistrărilor, actualizarea înregistrărilor, imprimarea întregului fișier sau a unor înregistrări selective. Următorul program oferă o idee despre modul în care instrucțiunea case switch poate fi utilizată în manipularea datelor. Nu implică codul pentru procesarea fișierelor, deoarece putem discuta despre manipularea fișierelor în C numai după ce am învățat concepte avansate precum indicii, structuri și uniuni.
exemplu: o declarație de caz comutator utilizat în procesarea fișierelor de date.
#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; }
exemplul de mai sus al comutatorului implică, în general, cuibărirea construcției comutatorului în interiorul unei construcții de iterație precum do-while. În postarea noastră nex, vom discuta aceste declarații de iterație.
Leave a Reply