Sunteți pe pagina 1din 8

Universitatea Politehnica din Bucureti Facultatea de Electronic, Telecomunicaii i Tehnologia Informaiei

Cuprins

Programarea Calculatoarelor (limbajul C) Curs 4 Operatori i Modul de Evaluare al Expresiilor


.l. Bogdan IONESCU Prof. Drago BURILEANU Prof. Claudius DAN 2010-2011

4.1. Operatori i modul de evaluare al expresiilor 4.2. Instruciuni de scriere i citire

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

1/44

Operatorii folosii n limbajul C > Am vorbit pn acum de variabile i constante, precum i de tipuri de date, dar cum ne folosim de valorile acestora pentru efectuarea anumitor calcule ? pe baza operatorilor > n limbajul C, spre deosebire de alte limbaje de programare n care operatorii sunt definii folosind cuvinte cheie, operatorii sunt definii folosind simboluri ce nu fac parte din alfabet, dar care sunt disponibile pe orice tip de tastatur. acest lucru face ca limbajul C s fie mai compact, precum i mai accesibil pentru toate limbile.
Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011 2/44 Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011 3/44

4.1. Operatori i modul de evaluare al expresiilor

Operatorii folosii n limbajul C (continuare) > Limbajul C propune urmtorii operatori: A. operatorul de atribuire, B. operatori aritmetici, C. operatori de atribuire mixt, D. operatori de incrementare i decrementare, E. operatori relaionali, F. operatori logici, G. operatorul virgul, H. operatori de lucru cu bii, I. operatorul de forare a tipului, J. operatorul sizeof(),
Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011 4/44

Operatorii folosii n limbajul C (continuare) A. Operatorul de atribuire > n limbajul C atribuirea unei valori unei variabile se face folosind =. Exemplu: a = 3; a = b; B. Operatorii aritmetici operatori clasici: + (adunare), - (scdere), * (nmulire) i / (mprire), operatorul modulo: % (restul mpririi ntregi, doar pentru numere ntregi) Exemplu: 5 % 3 = 2 3%1= 0
Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011 5/44

a ia valoarea 3 a ia valoarea lui b

Operatorii folosii n limbajul C (continuare) B. Operatorii aritmetici (continuare) mprirea ntreag: / (acelai operator de mprire) Cum se specific c este vorba de o mprire ntreag ? Exemplu: 13 / 3 = 4
dac numerele sunt ntregi mprire ntreag, dac un numr este real mprire real. ... float x=3.5,y; y=x/5; ??? ...

Operatorii folosii n limbajul C (continuare) C. Operatorii de atribuire mixt > Exist o modalitate de scriere prescurtat a operaiilor de atribuire pentru a facilita utilizarea lor direct n alte expresii. Form general: Rezultat: <variabil> = <variabil> <operator> <expresie> +, -, *, /, %

13.0 / 3 = 4.33 Exemple:


... float x; x=23/3; ??? ...

<variabil> <operator> = <expresie>

x=7.00

y=0.7

Exemple:

i+=3; x*=y+2; a%=14;

i=i+3; x=x*(y+2); a=a%14;


8

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

6/44

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

7/44

Operatorii folosii n limbajul C (continuare) D. Operatorii de incrementare i decrementare > Acetia sunt: ++ i respectiv --. y++; este echivalentul scrierii y=y+1; y--; este echivalentul scrierii y=y-1; > Motivaie: sunt mai rapizi dect executarea clasic a operaiei de atribuire. > Pot fi utilizati att ca prefix ct i ca sufix, eficientiznd astfel scrierea operaiilor (++x sau x++, --y sau y--). Exemplu:
... x=((++z) (w--)) % 100; ...

Operatorii folosii n limbajul C (continuare) E. Operatorii relaionali > n limbajul C se folosesc urmtorii operatori relaionali: operatori clasici: > (mai mare), < (mai mic), <= (mai mic sau egal) i >= (mai mare sau egal), operatorul egal: == (n sens logic) Exemplu: dac (x==y) Atenie: dac (x=y) adevrat dac x are valoarea y, fals dac x diferit de y. x ia valoarea lui y se evalueaz aceast valoare dac este diferit de 0 atunci adevrat, altfel fals.
10

z=z+1; x=(z-w) % 100; w=w-1;


8/44

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

9/44

Operatorii folosii n limbajul C (continuare) E. Operatorii relaionali (continuare) operatorul diferit: !=

Operatorii folosii n limbajul C (continuare) F. Operatorii logici (continuare) sau logic - || 0 || 0 = 0 1 || 0 = 1 0 || 1 = 1 1 || 1 =1 negarea - ! !0 = 1 !1 = 0
11

(10>3) || (15<4) = 1 (Adevrat) (3==4) || (5<4) = 0 (Fals)

F. Operatorii logici i logic - && 0 && 0 = 0 1 && 0 = 0 0 && 1 = 0 1 && 1 =1 (10>3) && (15<4) = 0 (Fals) (3==3) && (5>4) = 1 (Adevrat)

!(10>3)

= 0 (Fals)

!((3==3) && (5>4)) = 0 (Fals)


12

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

10/44

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

11/44

Operatorii folosii n limbajul C (continuare) F. Operatorii logici (continuare)

Operatorii folosii n limbajul C (continuare) G. Operatorul virgul > Operatorul , este folosit pentru a separa dou sau mai multe expresii ce sunt incluse ntr-o formulare n care de regul se ateapt doar o expresie. Form general: (<expresie1>, ..., <expresieN>,<expresie>); > Se evalueaz toate expresiile, dar n cazul n care se folosete valoarea operatorului atunci doar ultima expresie este returnat. Exemplu: a = (b=3, i=i+1, b+2);
13

Enun: i este o variabil ntreag i c este o variabil alfanumeric (caracter). S se scrie condiia logic care returneaz valoarea 1 dac i mai mic ca 10 i c diferit de x, i respectiv valoarea 0 dac i mai mare sau egal cu 10 sau c are valoarea x: i>=10 returneaz 0 (i<10) && (c!=x) c==x returneaz 0

b3, ii+1, ab+2=5


14

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

12/44

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

13/44

Operatorii folosii n limbajul C (continuare) H. Operatorii de lucru cu bii > Acetia modific variabilele pe baza modificrii valorilor binare ce corespund acestora. Operator & | ^ ~ << >> Echivalent I SAU SAU excl. negaie SHL SHR Descriere operaia logic I pe bii operaia logic SAU pe bii operaia logic SAU excl. pe bii operaia de inversare bii operaia de shiftare pe bii operaia de shiftare pe bii
15

Operatorii folosii n limbajul C (continuare) I. Operatorul de forare a tipului (casting) > Acesta permite conversia temporar a unei date de un anumit tip, ntr-un tip de baz ce este specificat de utilizator. Form general: (<tip_nou>) <expresie> Exemple: int i; float f=3.14; i=(int) f; sau C++ <tip_nou>(<expresie>) ex.: x=float(y)/4; float x; int y=9; x=(float) y/4;

i=3

x=2.25
16

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

14/44

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

15/44

Operatorii folosii n limbajul C (continuare) J. Operatorul sizeof() > Acest operator accept un singur parametru i anume, fie un tip de dat fie o variabil, i returneaz dimensiunea n bytes a acestora. > Este necesar la alocarea dinamic a memoriei pentru a specifica dimensiunea datelor. Exemple: int a; a=sizeof(char); a=1 int i; double a; i=sizeof(a); i=8

Precedena operaiilor > n limbajul C toi operatorii au o prioritate, iar operatorii cu prioritate mai mare sunt evaluai naintea celor cu prioritate mai mic. > Operatorii cu aceeai prioritate sunt evaluai de la stnga la dreapta. Exemplu: a-b-c este evaluat astfel: (a b) - c corect 5+(7%2) (5+7)%2
18

Exemplu:

a=5+7%2

este evaluat aa? sau aa?

17

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

16/44

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

17/44

Precedena operaiilor (continuare) > Prioritatea operatorilor n C (de la prioritatea maxim la cea minim):

Precedena operaiilor (continuare) > Exemplu: a < 10 && 2 * b < c > S vedem care sunt prioritile: nivelul 6 - * (nmulirea) nivelul 9 - <, > (relaii) nivelul 14 - && (i logic) (a < 10) && ((2 * b) < c) > n general ca s fim siguri de execuia corect a operaiilor este recomandat s folosim parantezele.
surs www.cplusplus.com
19 20

???

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

18/44

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

19/44

Evaluarea expresiilor > Din evaluarea unei expresii n C rezult o valoare. Tipul i implicit valoarea rezultatului unei expresii se stabilesc pe baza unor reguli de conversie. > Vorbim de reguli de conversie n cazul n care n expresie apar constante, variabile i funcii de tipuri diferite. > Regulile de conversie de evaluare a unei expresii ce nu implic operatorul de atribuire sunt urmtoarele: R1. toate datele de tip char i short int sunt convertite la int. Toate datele de tip float sunt convertite la double.
21

Evaluarea expresiilor (continuare) > Regulile de conversie de evaluare a unei expresii ce nu implic operatorul de atribuire sunt (continuare): R2. pentru toate perechile de operanzi, dac unul dintre operanzi este de tip long double, cellalt operand este convertit la long double. R3. dac unul dintre operanzi este de tip double, cellalt operand este convertit la double. R4. dac unul dintre operanzi este long, cellalt operand este convertit la long. R5. dac unul dintre operanzi este unsigned, cellalt operand este convertit la unsigned.
22

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

20/44

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

21/44

Evaluarea expresiilor (continuare) > Pentru operaia de atribuire, regula de conversie de tip este: RA. valoarea din partea dreapt a operatorului de atribuire (=) este convertit la tipul variabilei din partea stng. Dac aceast conversie nu este posibil, compilatorul va semnala o eroare. Concluzie: ntotdeauna are loc evaluarea expresiei din partea dreapt aplicndu-se regulile de conversie R1-R5 i dup aceea se aplic regula RA pentru operaia de atribuire. R1 R2 R3 R4 R5 RA
23

Evaluarea expresiilor (continuare) > Exemplu: rezultat = (ch / i) i) + (f * d) (f + i); int char ch; int i; float f; double d, rezultat; int double double double
24

double double

double double

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

22/44

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

23/44

Instruciuni de scriere i citire a datelor > n aceast seciune vom discuta despre instruciunile clasice de scriere i citire a datelor n limbajul C.

4.2. Instruciuni de scriere i citire

acestea se gsesc n biblioteca <stdio.h> > Vom vorbi despre: - instruciunea printf (scriere date), - instruciunea scanf (citire date).

25

26

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

24/44

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

25/44

Instruciuni de scriere a datelor Instruciunea printf > Instruciunea printf scrie pe dispozitivul standard de ieire (stdout, de regul ecran), o secven de date formatat. Prototipul funciei: int printf (const char *format, a, b, 15, ... ); format (ir de caractere) specific modul de afiare (formatare) ct i tipul datelor afiate dup , se specific variabilele sau constantele anunate n format.
27

Instruciuni de scriere a datelor (continuare) Instruciunea printf (continuare) Exemplu simplu: printf(Acesta este un text simplu); c:\>Acesta este un text simplu > Modul de formatare (irul de caractere) este specificat ntre i (precum un string), > n cazul n care nu inserm variabile sau constante nu se mai folosete enumerarea de dup ,. > irul de caractere furnizat este afiat ntocmai (respectnd spaiile existente).
28

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

26/44

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

27/44

Instruciuni de scriere a datelor (continuare) Instruciunea printf (continuare) > irul de caractere specificat poate conine att text ct i parametri de afiare ce vor fi interpretai i substituii la afiare cu argumentele specificate dup , (variabile, valori, ...). > Modul de specificare al parametrilor de afiare este urmtorul: %[indicatori][lime][.precizie][lungime]specificator
[ ] nseamn opional

Instruciuni de scriere a datelor (continuare) Instruciunea printf (continuare) %[indicatori][lime][.precizie][lungime]specificator specificator: (obligatoriu) specific tipul i modul de afiare a valorii argumentului. > Cei mai frecvent folosii specificatori sunt: c tipul caracter (char) d sau i tipul ntreg (decimal: signed int) e sau E tipul real n scrierea tiinific 3.9265e e-2 = 3.9265x10-2 f tipul real (float) s tipul ir de caractere (string) % se afieaz caracterul rezervat %
30

caracterul special %: specific faptul c vrem s afim o variabil sau constant. Este nlocuit la afiare cu valoarea argumentului corespunztor de dup ,
29

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

28/44

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

29/44

Instruciuni de scriere a datelor (continuare) Instruciunea printf (continuare) %[indicatori][lime][.precizie][lungime]specificator lime: (opional) specific numrul minim de caractere pe care va fi afiat valoarea argumentului. Surplusul de caractere alocate nefolosite este bordat cu spaii. indicatori: (opionali) specific s zicem detalii de afiare: - - aliniere a textului la stnga pe limea specificat (implicit este la dreapta) + - foreaz afiarea semnului chiar dac numrul este pozitiv, 0 - bordeaz numrul cu zerouri la stnga n loc de spaii dac se specific limea de afiare.
31

Instruciuni de scriere a datelor (continuare) Instruciunea printf (continuare) %[indicatori][lime][.precizie][lungime]specificator .precizie: (opional) - pentru valori ntregi: specific numrul minim de cifre (digii) cu care va fi afiat valoarea (nu trunchiaz), - pentru valori reale: specific numrul de cifre (digii) de dup virgul (rotunjete), - pentru iruri de caractere: specific numrul maxim de caractere ce vor fi afiate (trunchiaz), lungime: (opional) specific mai precis tipul datei: h - short int sau unsigned short int, l - long int sau unsigned long int.
32

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

30/44

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

31/44

Instruciuni de scriere a datelor (continuare) Instruciunea printf (continuare) Exemple: printf("C printf aractere: %c %c", %c 'a', 65); c:\>Caractere: a A printf( printf Valori intregi: %i %ld", 1977, 650000); c:\>Valori intregi: 1977 650000 printf( printf Precedat de spatii: %10d", 1977); c:\>Precedat de spatii:
Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

Instruciuni de scriere a datelor (continuare) Instruciunea printf (continuare) Exemple (continuare): printf( printf Precedat de zerouri: %010d", 1977); c:\>Precedat de zerouri: 0000001977
printf( printf Numere reale: %4.2f %+.0e %E ", 3.1416, 3.1416, 3.1416);

c:\>Numere reale: 3.14 +3e+000 3.141600E+000 printf( printf %s, Un sir de caractere);

1977
33

c:\> Un sir de caractere


34

32/44

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

33/44

Instruciuni de scriere a datelor (continuare) Instruciunea printf (continuare) > Exist i o serie de comenzi speciale de formatare: \n - new line: la ntlnirea acestei comenzi cursorul trece pe linie nou (echivalent tast Enter), \t - tab: la ntlnirea acestei comenzi cursorul avanseaz un anumit numr de caractere la dreapta (echivalent tast Tab), Exemplu: int i=10; float x=3.14; printf(i=% %d \n x=%f %f", %f i, x); i=10 x=3.14
35

Instruciuni de scriere a datelor (continuare) Instruciunea printf (continuare)

Enun: folosind instruciunea printf s se afieze pe ecran valorile reale 3.12, 34.5, 400.0, 56.789, cu 3 zecimale, sub forma unui tablou (se folosete indentarea)

Soluie: printf(Solutia este\n"); printf("%8.3f \t %8.3f \n", 3.12, 34.5); printf("%8.3f \t %8.3f", 400.0, 56.789);

3.120 400.000
34/44

34.500 56.789
36

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

35/44

Instruciuni de citire a datelor Instruciunea scanf > Instruciunea scanf permite citirea datelor de pe dispozitivul standard de intrare (stdin, de regul tastatur), i le stocheaz n locaiile de memorie specificate de utilizator (pointeri). Prototipul funciei: int scanf (const char *format, &a, &b, ... ); format (ir de caractere) specific tipul datelor citite. dup , se specific unde vor fi stocate datele (adrese de memorie)
36/44

Instruciuni de citire a datelor (continuare) Instruciunea scanf (continuare) Exemplu simplu: scanf(%d, &a); - se ateapt introducerea de la tastatur a unui numr ntreg ce va fi stocat n variabila a.

> Modul de formatare a datelor (irul de caractere format) este specificat ntre i (precum un string), > Dup , urmeaz specificarea locaiei de memorie unde va fi stocat valoarea introdus. n memorie:
00110010 adres 10 10110111 adres 11 00000000 adres 12 desemnat de a (valoare)

desemnat de &a (adres)


37/44

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

Instruciuni de citire a datelor (continuare) Instruciunea scanf (continuare) > irul de caractere format, ce specific tipul datelor citite, poate conine urmtoarele informaii: - spaii goale (whitespace): funcia va ignora toate spaiile goale indiferent de cantitate (aceasta include spaiile, tab i linie nou), - alte caractere diferite de spaiu i % : orice alt caracter ce nu este spaiu sau alt caracter ce face parte din specificarea formatului datelor are ca efect: citirea de la tastatur a unui caracter, i compararea acestuia cu caracterul n cauz, dac ==, nu este luat n calcul i funcia continu cu urmtorul caracter din irul format, dac != exit.
Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011 38/44

Instruciuni de citire a datelor (continuare) Instruciunea scanf (continuare) > irul de caractere format, ce specific tipul datelor citite, poate conine urmtoarele informaii (continuare): - specificatori de format: acetia specific tipul i modul n care vor fi introduse datele:
[ ] nseamn opional

%[*][lime][modificatori]tipdate caracterul special %: specific faptul c vrem s citim o anumit valoare de la tastatur. Aceasta este stocat la adresa specificat dup ,. numrul de valori = numrul de adrese.
40

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

39/44

Instruciuni de citire a datelor (continuare) Instruciunea scanf (continuare) %[*][lime][modificatori]tipdate caracterul asterix *: (opional) specific faptul c datele primite de la dispozitivul de intrare vor fi ignorate (nu vor fi stocate). lime: (opional) specific numrul maxim de caractere (alfanumerice) ce vor fi citite de la tastatur. tipdate: (obligatoriu) specific tipul datelor ce vor fi citite. Se folosete aceeai convenie ca la instruciunea printf: c tip caracter (char), citete un caracter, dac [lime] diferit de 1, funcia citete N=lime caractere i le stocheaz n locaii succesive ale vectorului specificat ca argument.
41

Instruciuni de citire a datelor (continuare) Instruciunea scanf (continuare) %[*][lime][modificatori]tipdate tipdate: (continuare) : d tip ntreg cu semn (decimal integer), u tip ntreg fr semn (unsigned decimal integer), f, e, E tip real n forma standard sau tiinific (conversie implicit la float), s tip ir de caractere (char *). modificatori: (opional) specific mai precis tipul datei: h - short int sau unsigned short int, l - long int sau unsigned long int sau double pentru f,e,E.
42

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

40/44

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

41/34

Instruciuni de citire a datelor (continuare) Instruciunea scanf (continuare) Exemple: int x,y; scanf(a%d %d", &x, &y); printf(x=%d, y=% %d", x, y); c:\> (tastm b enter) ??? stop ???

Instruciuni de citire a datelor (continuare) Instruciunea scanf (continuare) Exemple: int x; scanf(%2 %2d", &x); printf(x=%d", x); c:\> (tastm 12345 enter) int a; float y; scanf(% %d %f", &a, &y); printf(a=%d, y=%f", %f a,y); ??? x=12

c:\> (tastm a enter 2 enter 4 enter) int x=20; scanf(%* %*d", &x); printf(x=%d", x); c:\> (tastm 33 enter) ??? x=2, y=4

a=10, y=0.130000 ???


44

x=20
43

c:\> (tastm 10 enter 13e-2 enter)


42/44 Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

43/44

Sfritul Cursului 4

45

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

44/44

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