+ All Categories
Home > Documents > 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

Date post: 22-Jan-2016
Category:
Upload: sveta
View: 58 times
Download: 2 times
Share this document with a friend
Description:
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. - PowerPoint PPT Presentation
21
Programare in limbajul C – Cursul 3 Expresii şi operatori Prof. univ. dr. Constantin Popescu
Transcript
Page 1: Programare in limbajul C – Cursul 3 Expresii  şi operatori Prof. univ. dr. Constantin Popescu

Programare in limbajul C – Cursul 3Expresii şi operatori

Prof. univ. dr. Constantin Popescu

Page 2: 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

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

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.

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

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

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

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 */

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

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 */

Operator Echivalent 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

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

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 ++

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

Operatori Relationali Operatorii relationali permit compararea variabilelor:

– Ei returneaza val. 1 pentru true si val. 0 pentru false.

Operator Simbol Exemplu

Egalitate == x == y diferit 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)

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

Operatori Logici

&& si || sau ! negare (operator unar)

!((a>1)&&(a<10))||((a<-1)&&(a>-10))

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

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)

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

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)

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

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

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

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 = 10printf(“%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 = 10printf(“%d = %d” , n/2, n>>1);printf(“%d = %d”, n/4, n>>2);

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

Precedenta OperatorilorOperator Nivelul de precedenta

( ) 1~, ++, --, unar - 2*, /, % 3+, - 4<<, >> 5<, <=, >, >= 6==, != 7& 8

^ 9 | 10

&& 11|| 12=, +=, -=, etc. 14

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

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;

}

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

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;

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

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

%ld tipă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 %

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

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");

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

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;

}

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

Funcţia scanf (1) Functia scanf este asemanatoare 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

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

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;

}


Recommended