1 / 21

Programare in limbajul C – Cursul 3 Expresii şi operatori Prof. univ. dr. Constantin Popescu

Programare in limbajul C – Cursul 3 Expresii şi operatori Prof. univ. dr. Constantin Popescu. Agenda. Expresii Operatori aritmetici Operatori de asignare Operatori de incrementare si decrementare Operatori relationali Operatori logici Operatii pe biti Operatorul conditional. Expresii.

sveta
Download Presentation

Programare in limbajul C – Cursul 3 Expresii şi operatori Prof. univ. dr. Constantin Popescu

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Programare in limbajul C – Cursul 3Expresii şi operatoriProf. univ. dr. Constantin Popescu

  2. Agenda • Expresii • Operatori aritmetici • Operatori de asignare • Operatori de incrementare si decrementare • Operatori relationali • Operatori logici • Operatii pe biti • Operatorul conditional

  3. Expresii • Exemple de expresii: 3 + 5; x; x=0; x=x+1; printf("%d",x); • Doua tipuri de expresii: • Apeluri de functii • Expresii formate din date si operatori • O expresie in C are de obicei o valoare • exceptie pentru apelurile de functii care returneaza void.

  4. Operatori Aritmetici Operator Simbol Actiune Exemplu Adunare + Aduna operanzii x + y Scadere - Scade al 2 din primul x - y Negare - Neaga operandul -x Inmultire * Inmulteste operanzii x * y Impartire / Imparte 1 la al doilea x / y Rest % Restul impartirii x % y

  5. Operatorul de asignare • x=3 • = este un operator • valoarea acestei expresii este 3 • = are urmatorul efect -- asigneaza lui x valoarea 3 • Operatorul de asignare = • Asigneaza partii din stinga valoarea din partea dreapta. • Valoarea expresiei va fi valoarea din partea dreapta. • Exemplu: x = ( y = 3 ) +1; /* asigneaza lui y valoarea 3 */ /* valoarea lui (y=3) este 3 */ /* asigneaza lui x valoarea 4 */

  6. Operatori de asignare compusi • Adesea se utilizeaza operatorii: • x=x+1, x=x*2, ... • Limbajul C ofera o forma scurta pentru acestia: • Forma Generica: variabila op= expr echivalent cu variabila = variabila op expr • Ultima valoare va fi egala cu valoarea finala a lui expr • De exemplu: x=3; y= (x+=3); /* x si y au fiecare valoarea 6 */ OperatorEchivalent cu: x *= y x = x * y y -= z + 1 y = y - (z + 1) a /= b a = a / b x += y / 8 x = x + (y / 8) y %= 3 y = y % 3

  7. Operatori de Incrementare si Decrementare • Operatori pre- si post-incrementare si decrementare: • Incrementare: ++ ++x, x++ • ++x este echivalent cu : (x = x + 1) • Are valoarea xvechi +1 • Este incrementat x • x++ • Are valoarea xvechi • Este incrementat x • Decrementare -- --x, x-- • similar cu ++

  8. Operatori Relationali • Operatorii relationali permit compararea variabilelor: • Ei returneaza val. 1 pentru true si val. 0 pentru false. Operator Simbol Exemplu Egalitate == x == ydiferit de x = y Mai mare > x > y Mai mic < x < y Mai mare/egal >= x >= y Mai mic/egal <= x <= y Inegalitate != x != y • Nu exista tipul boolean in C. In C se foloseste: • 0, pentru false (fals) • Intreg diferit de zero, pentru true (adevarat)

  9. Operatori Logici • && si • || sau • ! negare (operator unar) !((a>1)&&(a<10))||((a<-1)&&(a>-10))

  10. Operatii pe biti (1) • C permite reprezentarea pe biti a variabilelor intregi • Toti intregii pot fi reprezentati in forma binara: • De exemplu, daca avem intregul pe 16-biti: • 6552010 = 1111 1111 1111 00002 = FFF016 = 1777608 • In C, numerele hexazecimale incep cu 0x si numerele octale incep cu 0: • x=65520; baza 10 • x=0xfff0; baza 16 (hex) • x=0177760; baza 8 (octal)

  11. Operatii pe biti (2) Operatori pe biti: • Operatorul deplasare (shift): • x << n (la stinga) • Deplaseaza bitii cu n pozitii la stinga, punind zero in dreapta. • Daca x = 1111 1111 1111 00002 x << 1 este 1111 1111 1110 00002 • x >> n (la dreapta) • Deplaseaza bitii cu n pozitii la dreapta: • Punind 1 in partea stinga daca este un intreg cu semn • Punind 0 in partea stinga daca este un intreg fara semn • x >> 1 este 0111 1111 1111 10002 (fara semn) • x >> 1 este 1111 1111 1111 10002 (cu semn)

  12. Operatii pe biti (3) • Operatori logici pe biti: • Se aplica tuturor tipurilor intregi: • &Şi pe biti x= 0xFFF0 1111 1111 1111 0000 y= 0x002F & 0000 0000 0010 1111 x&y= 0x0020 0000 0000 0010 0000 • |SAU pe biti x|y= 0xFFFF 1111 1111 1111 0000 | 0000 0000 0010 1111 1111 1111 1111 1111 • ^SAU EXCLUSIV pe biti x^y= 0xFFDF • ~COMPLEMENT pe biţi ~ y= 0xFFD0 • Inlocuieste fiecare bit 0 cu 1 şi fiecare bit 1 cu 0

  13. Inmultire si Impartire cu 2 • Inmultirea si impartirea cu 2 este adesea mai lenta decit deplasarea pe biti. • Inmultirea cu 2 poate fi inlocuita cu deplasarea cu 1 bit la stinga: n = 10 printf(“%d = %d” , n*2, n<<1); printf(“%d = %d”, n*4, n<<2); …… • Impartirea cu 2 poate fi inlocuita cu deplasarea cu 1 bit la dreapta: n = 10 printf(“%d = %d” , n/2, n>>1); printf(“%d = %d”, n/4, n>>2);

  14. Precedenta Operatorilor Operator Nivelul de precedenta ( ) 1 ~, ++, --, unar - 2 *, /, % 3 +, - 4 <<, >> 5 <, <=, >, >= 6 ==, != 7 & 8 ^ 9 | 10 && 11 || 12 =, +=, -=, etc. 14

  15. Exemplu • Care este diferenta dintre cele doua linii de la iesire (output)? #include <stdio.h> int main () { int w=10,x=20,y=30,z=40; int temp1, temp2; temp1 = x * x /++y + z / y; printf ("temp1= %d;\nw= %d;\nx= %d;\ny= %d;\nz= %d\n", temp1, w,x,y,z); y=30; temp2 = x * x /y++ + z / y; printf ("temp2= %d;\nw= %d;\nx= %d;\ny= %d;\nz= %d\n", temp2, w,x,y,z); return 0; }

  16. Operatorul Conditional • Forma generica: exp1 ? exp2 : exp3 daca exp1 este true (non-zero) valoarea este exp2 (exp3 nu este evaluata) daca exp1 este falsa (0), valoarea este exp3 (exp2 nu este evaluata) • Exemplu: z = (x > y) ? x : y; • Aceasta este echivalent cu: if (x > y) z = x; else z = y;

  17. Funcţia printf (1) • Există o serie de specificatori de format pentru funcţia printf. Specificator Semnificatie %d tipăreşte argumentul de tip int în format zecimal %ldtipăreşte argumentul de tip long int în format zecimal %c tipăreşte un caracter %s tipăreşte un şir de caractere %f tipăreşte un argument de tip float sau double %e la fel ca %f, dar foloseşte notaţia exponenţială %g foloseşte %e sau %f, care e mai bun %o tipăreşte un argument de tip int în baza 8 %x tipăreşte un argument de tip int în baza 16 %% tipăreşte %

  18. Funcţia printf (2) • Apelul: printf("%c %d %f %e %s %d%%\n", '1', 2, 3.14, 56000000., "opt", 9); va tipări: 1 2 3.140000 5.600000e+07 opt 9% • Apelul: printf("%d %o %x\n", 100, 100, 100); va tipări: 100 144 64 • Apeluri succesive ale funcţiei printf vor genera ieşirile una după alta, astfel apelurile de mai jos vor afişa Hello, world! (pe o singură linie): printf("Hello, "); printf("world!\n");

  19. Funcţia printf (3) • Un exemplu de utilizare a functiei printf: #include <stdio.h> int main() { int ten=10,x=42; char ch1='o', ch2='f'; printf("%d%% %c%c %d is %f\n", ten,ch1,ch2,x, 1.0*x / ten ); return 0; }

  20. Funcţia scanf (1) • Functia scanf esteasemanatoare cu printf: • Este o functie din biblioteca C: <stdio.h> • Specificatorii de format sunt aceeasi ca la functia printf • Exemple: scanf ("%d", &x); /* citeste un numar intreg */ scanf ("%f", &rate); /* citeste un numar real */ int n1, n2; float f; scanf("%d%d%f",&n1,&n2,&f); (Trebuie sa fie adaugate spatii pentru a separa numerele.) • Caracterul & este utilizat pentru adresa unei variabile

  21. Funcţia scanf (2) Exemplu: int main() { int x; long y; float a; double b; scanf("%d %ld %f %lf", &x, &y, &a, &b); printf("%d %ld %f %lf", x, y, a, b); return 0; }

More Related