Sunteți pe pagina 1din 5

Curs FP 6

Instrucțiuni decizionale

1. If(condiție)
{
//grup de instrucțiuni
}
Condiția trebuie să aibă o valoare numerică , iar grupul de instrucțiuni se execută numai
dacă valoarea expresiei este difertă de 0.

2. if(condiție)
{
//grup de instrucțiuni 1
}
else
{
//grup de instrucțiuni 2
}
În cazul în care condiția are valoarea 0 se execută al doilea grup de instrucțiuni.

3. Switch(expresie_int)
{
case val1: .........
case val2: ..........
-------------------
case val n: …….
default: ............
}
Pentru instrucțiunea switch se exaluează expresia dintre paranteze care trebuie să aibă
obligatoriu valoare întreagă . Dacă valoarea expresiei este val1 se execută instrucțiunile
începâ nd cu cele de pe prima ramură case. Dacă valoarea expresiei este val2 se continuă
execuția pe ramura a 2-a case. Dacă valoarea expresiei este diferită de val1, val2, .... valn și există
ramura default atunci execuția continuă pe ramura default.
Ramura default poate lipsi și dacă există , nu este obligatoriu ultima. Dacă se intră cu
execuția pe una dintre ramuri fie ea case sau default și nu se pă ră sește acea ramură la un
moment dat cu o instrucțiune break sau return atunci execuția continuă pe ramura urmă toare.
Instrucțiunea switch este orgainzată astfel:
Codul dintre toate acoladele apare în memorie ca un bloc continuu, iar intrarea pe o
ramură este asemă nă toare cu un apel al instrucțiunii „go to” la începutul ramurii respective, de
aceea câ nd se intră pe o ramură execuția continuă în tot blocul instrucțiunii switch cu excepția
întreruperii execuției cu un break, return, etc.
ex:
int n;
scanf(“%d”,&n);
switch(n)
Curs FP 6

{
case1:printf(“unu”);
case2:printf(“doi”);
default:printf(“altceva”);
case4: printf(“patru”);
break;
case5:printf(“cinci”);
}
Pentru n=1 => unu doi altceva patru
Pentu n=2 => doi altceva patru
Pentru n=7 => altceva și patru.
De obicei la sfâ rșitul fiecă rei ramuri case sau default se pune break.
În momentul în care avem mai multe condiții (valori) de testat se preferă scrierea lor într-o
instrucțiune switch fiind mai elegant și mai rapid. Dacă avem de testat dacă n este 1 sau 2 atunci
dacă punem doua if-uri atunci sunt executate mai rapid decâ t switch-ul.

Instrucțiuni repetitive
În C avem 3 instrucțiuni repetitive:
1. While(condiție)
{
//grup de instrucțiuni
}
Câ t timp condiția este adevă rată se execută gurpul de instrucțiuni. Instrucțiunea while este
evident o implementare a instrucțiunii în C a lui „while-do”.
2. do{
//grup de instrucțiuni
}
while(condiție)
Se execută grupul de instrucțiuni câ t timp condiția este adevă rată .
Instrucțiunea while este cu test final în sensul că grupul de instrucțiuni se execută cel puțin o
singură dată și corespunde în pseudocod instrucțiunii:
repeat
grup instrucțiuni
until not cond;
Curs FP 6

3. for(intit;cond;actualiză ri)
{
//grup de instrucțiuni
}
1. Se fac inițializă rile
2. dacă este adevă rată condiția se execută grupul de instrucțiuni
actualiză ri
se revine la 2
În prima secțiune se efectuează de obicei inițializă ri a-priori instrucțiunii for. Secțiunea a 2-a
reprezintă o condiție de continuare a execuției instrucțiunii for. Ultima secțiune se execută
imediat după execuția grupului de instrucțiuni, aici efectuâ ndu-se de obicei actualiză ri de valori
pentru variabilele folosite în for. Din oricare instrucțiune repetitivă se poate ieși forțat utilizâ nd
instrucțiunea break.
Oricare dintre cele 3 secțiuni poate lipsi. Pot lipsi 1, 2 sau toate. Dacă lipsește o secțiune
delimitatorul ; este obligatoriu să apară.
Lipsa secțiunii a 2-a (condiție) este echivalentă cu a pune 1, adică true, intrâ ndu-se într-un ciclu
din care se iese cu break, return, exit, etc.
for(;;);
; pentru că e insturcțiune vidă.
while(1);
2 exemple de cicluri infinite.
do ; while(1);

int a,b;
scanf(“%d%d”,&a,&b);
for(;b;r=a%b,a=b,b=r); (for-ul are corpul vid)
printf(“Cmmdc:%d\n”,a);
Instrucțiunea for din exemplul de mai sus nu are inițializă ri. Se execută atâ t timp câ t b este
diferit de 0. Calculele efective se fac în secțiunea de actualiză ri, iar corpul funcției for conține o
instrucțiune vidă , pentru că apare imedia ; imediat după for.
;;;;; 5 instrucțiuni vide
Se observă că în C instrucțiunea for este o generalizare (masivă ) a instrucțiunii for din
pseudocod.
Curs FP 6

Tipul „char”
Tipurile char și uncigned char în C au o triplă utilizare: întreg pe 8 biți cu, respectiv fă ră semn,
valoare ce reține codul ASCII al unui caracter, adică practic reține caracter ASCII și evident fiind
tip numeric este și tip booleean.
O constantă char este dată între apostrof ‘ ’, unde apare simbolul ASCII. La compilare
laîntâ lnirea constantei a între apostrofuri compilatorul traduce această constantă la valoarea
97.
‘a’==97
for(char c=’a’; c<=’z’;c++)
printf(“%c”,c);
Afișează literele mici din alfabet.
În fișierul antet “ctype.h” există câ teva funcții standard C pentru a lucra cu caractere în C.
Isalpha(c) returnează true dacă c este literă mică sau mare
Isalnum(c) verifică dacă valoarea primită reprezintă literă mică , mare sau cifră în baza 10
Isdigit(c) verifică dacă c este cifră în baza 10
Isxdigit(c) se verifică dacă c este cifră în baza 16
Islower(c) verifică dacă c este literă mică
Isupper(c) verifică dacă c e literă mare
Au fost verificări!

Tolower(c) se transformă c în literă mică dacă c este literă mare, altfel c se returnează
nemodificat
toupper(c) se returnează c în liter

int myisalpha(char c)
{
return (‘a’<=c&&c<=’z’);;
(‘a’<=c&&c<=’z’);
}

char tolower(char c)
{
if(‘a’<=c&&c<=’z’)
c+=’a’-’A’;
Curs FP 6

return c;
}

getch(), getche()
kbhit()
Funcția getch() așteaptă introducerea unui caracter de la tastatură și returnează caracterul pe
ecran fă ră ecou pe ecram. A doua funcție este cu ecou (afișează pe ecran caracterul citit).
char c=getch();
printf(“%c”,c);
Apă sarea unor combinații de taste sau chiar a unor taste speciale(ex: F1) are ca efect
introducerea în buffer-ul standard de intrare (al tastaturii) a două caractere în loc de unul,
dintre care primul este obligatoriu spațiu iar al doilea, în cele mai multe situații este o literă
mare.
Apelul funcției getch() face să se returneze primul caracter al buffer-ului tastaturii.
Funcția kbhit() verifică dacă buffer-ul tastaturii este sau nu vid, adică au fost apă sate butoane
fă ră a le prelua valorile.
char c1, c2;
c1=getch();
if(kbhit())
c2=getgh();
if(c1==’ ’&&c2==’h’)
{
……………………………….
}

S-ar putea să vă placă și