CATEGORII DOCUMENTE |
Operatorii constituie unul din conceptele cele mai importante si mai interesante care stau la baza unui limbaj de programare. Limbajul C este vestit pentru marea varietate de operatori pe care-i pune la dispozitia programatorului rezultand si o diversitate de expresii ce se pot forma pe baza acestora. Dupa cum se stie, o expresie este formata din variabile, constante, functii si operatori. In acest paragraf voi aminti cateva din categoriile de operatori ai limbajului C:
adunare, - scadere, * produs, / impartire, % - restul impartirii intregi
, -- incrementare si decrementare
< , >
egal
<= mai mic sau egal
>= mai mare sau egal
diferit
&& - si logic
- sau logic
- negatie logica
Operatorii logici si relationali sunt implicati in formarea expresiilor cu valoare logica. Spre exemplu:
a<2, 7/5+2<s-1, (X>-3) &&(x<3), !(a==b)
sunt expresii cu valoare logica.
In sectiunea precedenta am amintit, vorbind despre reprezentarea algoritmilor prin scheme logice, de operatia de atribuire. In limbajul C se considera ca atribuirea este un operator. Atribuirea are urmatoarea sintaxa:
variabila = expresie;
Modul de functionare este urmatorul:
se evalueaza expresia;
valoarea obtinuta este stocata in zona de memorie a variabilei, realizandu-se eventuale conversii de tip.
valoarea rezultata in urma atribuirii este valoarea atribuita variabilei.
Observatie: Atribuirea fiind un operator, se considera ca operanzii sunt variabila din partea stanga, respectiv expresia din partea dreapta. Orice expresie trebuie sa aiba, in urma evaluarii sale, o valoare (un rezultat). Valoarea expresiei de atribuire este valoarea obtinuta prin evaluarea expresiei din partea dreapta a atribuirii.
Daca valoarea obtinuta prin evaluarea expresiei din dreapta atribuirii este de alt tip decat tipul variabilei din stanga atunci se incearca conversia tipului valorii la tipul variabilei. Nu intotdeauna conversia este posibila, caz in care se va afisa un mesaj de eroare in urma compilarii.
Exemplul 1 : Fie urmatoarea secventa de program:
void main(void)
Observatie: Executand programul de mai sus se vor obtine valori diferite pentru variabilele a si c, desi expresia care apare in dreapta ambelor atribuiri este aceeasi. Pentru a se obtine valoarea 3, iar pentru c se obtine 3,75. Explicatia sta in modul in care se realizeaza conversiile de tip in cadrul atribuirilor. Valoarea expresiei 3./2.+9./4. este 3,75 dar variabilei a i se va atribui partea intreaga a acestei valori, adica 3. Variabila c este de tip float (numar real), deci nu va mai fi nevoie de conversia rezultatului evaluarii expresiei la tipul variabilei.
Exemplul 2:
void main(void)
Observatie: Executand acest program se va afisa valoarea 2 si nu valoarea 2,5 asa cum ar fi fost de asteptat. Explicatia este urmatoarea: operatorul / realizeaza, atunci cand operanzii sunt intregi, impartirea intreaga, deci vom obtine catul impartirii intregi dintre 5 si 2. Exista doua modalitati de rezolvare a problemei: fie inlocuim expresia cu 5./2. (5.=5.0) fie utilizam operatorul de conversie explicita ( ). Acest nou operator ( numit cast), se utilizeaza astfel
( tip_de_date) expresie;
Semnificatia este urmatoarea: Se cere convertirea valorii rezultate din evaluarea expresiei la o valoare de tipul specificat intre paranteze. In exemplul de mai sus vom inlocui atribuirea cu:
a=(float) 5/2;
(rezultatul expresiei va fi de tip float, deci variabilei a i se va atribui valoarea 2.5).
Exercitiu: Fie urmatorul program, care calculeaza media aritmetica a trei numere a,b,c , primele doua introduse de la tastatura.:
void main(void)
Executati acest program si identificati greselile. Corectati greselile gasite.
Operatorii de atribuire compusa au fost introdusi pentru a fi utilizati in locul atribuirilor de tipul:
v=v+expresie;
v=v-expresie;
v=v*expresie; etc.
unde:
v - variabila
expresie-orice expresie corecta in limbajul C
In locul acestor expresii se vor folosi:
v+=expresie;
v -= expresie; etc.
Folosirea operatorilor de atribuire compusa sporeste lizibilitatea programului si viteza de executie. Daca atribuirea este de forma:
v=v+1;
sau
v=v-1;
se pot utiliza operatorii de incrementare si decrementare ++ si --. Expresiile de mai sus se vor putea scrie:
v++;
respectiv
v--;
Exemplul 3: Se da urmatorul program:
void main(void)
Observatie: Cand apar expresii de tipul :
++variabila
sau
--variabila;
spunem ca se realizeaza o preincrementare, respectiv predecrementare. In cazul preincrementarii, variabila va primi ca valoare 1+valoarea initiala. Daca preincrementarea apare intr-o expresie se realizeaza intai aceasta operatie si abia apoi celelalte operatii care mai apar in expresie (preincrementarea are prioritate mai mare). In atribuirea a = ++I se realizeaza intai preincrementarea, in urma careia i va avea valoarea 4, si abia apoi se realizeaza atribuirea (a va avea valoarea 4).
In expresia b = a - se realizeaza o postdecrementare, adica se modifica valoarea variabilei a doar dupa ce s-au efectuat celelalte operatii din expresie. In cazul nostru, b va primi valoarea lui a (4, in momentul acela) si abia apoi se va micsora valoarea lui a cu o unitate.
Exercitiu: Executati programul de mai sus si urmariti rezultatele care se obtin.
Mai exista operatori de atribuire compusa, folosindu-se operatorii logici ce actioneaza la nivel de bit, dar despre acestia vom vorbi intr-o sectiune viitoare. Tot atunci vom discuta si despre atribuirea multipla.
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 846
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved