Sunteți pe pagina 1din 22

CAPITOLUL 2

Date, operatori i expresii

DATE, OPERATORI I EXPRESII


2.1. Limbajele i !! 2.2. Pro%rame &' limbaj#l ( !! 2.). Prepro*esor#l 2.,. Eleme'te $e ba-. ale limbaj#l#i 2.,.1. +o*ab#lar#l 2.,.2. 0'it.1ile lexi*ale 2.". Date &' limbaj#l ( !! 2.".1. Tip#ri $e $ate 2.".2. o'sta'te 2.".). +ariabile 2./. Operatori i expresii 2./.1. Operatori 2./.2. Expresii 2.2. o'3ersii $e tip

2.1. LI45A6ELE

I !!

Aa cum comunicarea dintre dou persoane se realizeaz prin intermediul limbajului natural, comunicarea dintre om i calculator este mijlocit de un limbaj de programare Limbajele C i C!! sunt limbaje de programare de ni"el #nalt Limbaj#l a aprut #n anii $%&' i a (ost creat de )ennis *itc+ie #n laboratoarele AT,T -ell Limbajul C (ace parte din (amilia de limbaje concepute pe principiile programrii structurate, la care ideea central este .structureaz pentru a stp/ni o aplica0ie. Popularitatea limbajului a crescut rapid datorit elegan0ei i a multiplelor posibilit0i o(erite programatorului 1puterea i (le2ibilitatea unui limbaj de asamblare34 ca urmare, au aprut numeroase alte implementri )e aceea, #n anii 56' se impune necesitatea standardizrii acestui limbaj 7n perioada $%689$%%', un comitet desemnat de A:;I 1American :ational ;tandards Institute3 a elaborat un compilator A:;I C, care permite scrierea unor programe care pot (i portate (r modi(icri, pe orice sistem Limbaj#l !! apare la #nceputul anilor 56' i #l are ca autor pe -jarne ;troustrup <l este o "ariant de limbaj C #mbunt0it, mai riguroas i mai puternic, completat cu construc0iile necesare aplicrii principiilor programrii orientate pe obiecte 1POO3 Limbajul C!! pstreaz toate elementele limbajului C, bene(iciind de e(icien0a i (le2ibilitatea acestuia Limbajul C!! este un superset al limbajului C Incompatibilit0ile sunt minore, de aceea, modulele C pot (i #ncorporate #n proiecte C!! cu un e(ort minim

2.2.

PRO7RA4E 89 LI45A60L ( !!

Un program scris #n limbajul C 1sau C!!3 este compus din unul sau mai multe fiiere surs Un (iier surs este un (iier te2t care con0ine codul surs 1#n limbajul C3 al unui program =iecare (iier surs con0ine una sau mai multe funcii i e"entual, re(erin0e ctre unul sau mai multe fiiere header 1(igura 2 $ 3 =unc0ia principal a unui program este numit main <2ecu0ia programului #ncepe cu e2ecu0ia acestei (unc0ii, care poate apela, la r/ndul ei, alte (unc0ii Toate (unc0iile (olosite #n program trebuie descrise #n (iierele surs 1cele scrise de ctre programator3, #n (iiere +eader 1(unc0iile prede(inite, e2istente #n limbaj3, sau #n biblioteci de (unc0ii Un (iier +eader este un (iier a(lat #n sistem sau creat de ctre programator, care con0ine declara0ii i de(ini0ii de (unc0ii i "ariabile Ac0iunile din (iecare (unc0ie sunt codi(icate prin instruciuni 1(igura 2 2 a 3 <2ist mai multe tipuri de instruc0iuni, care "or (i discutate #n capitolul urmtor O instruc0iune este orice e2presie "alid 1de obicei, o asignare sau un apel de (unc0ie3, urmat de simbolul ; 7n (igura 2 2 b este dat un e2emplu de instruc0iune

$%

CAPITOLUL 2

Date, operatori i expresii

simpl Uneori, ca instruc0iune poate apare instruc0iunea nul 1doar :3, sau instruc0iunea compus 1pri"it ca o succesiune de instruc0iuni simple, #ncadrate #ntre acoladele delimitatoare {} Program =iier surs =iier surs =iiere +eader

=unc0ii

main

-iblioteci C!!

=unc0ii din bibliotec =igura 2 $ ;tructura unui program #n limbajul C O e2presie este o structur corect sintactic, (ormat din operanzi i operatori 1(igura 2 2 c 3 ;09 <II Instruc0iunea$ Instruc0iunea2 Instruc0iunea8 I9STR0 <I09I <2presie4 EXPRESII Operanzi

Operatori 22a 22b 22c

=igura 2 2 =unc0ie, instruc0iune, e2presie


Pentru a #n0elege mai bine no0iunile prezentate, s considerm un e2emplu (oarte simplu Programul urmtor a(ieaz pe ecran un mesaj 1mesajul Primul meu program3 In(orma0ia de prelucrat 1de intrare3 este #nsui mesajul 1o constant ir3, iar prelucrarea ei const #n a(iarea pe ecran Exemplu: #include <iostream.h> >> linia $ void main() >> linia 2 9 antetul (unc0iei main { >? linia 8 9 #nceputul corpului (unc0iei, a unei intruc0iuni compuse ?> cout<<Primul meu program in limbajul !!"n; >> linia @ } >> liniaA9s(/ritul corpului (unc0iei Prima linie este o directiv preprocesor 1indicat de simbolul #3 care determin includerea #n (iierul surs a (iierului +eader cu numele iostream.h Acest +eader permite realizarea a(irii pe monitor Programul con0ine o singur (unc0ie, funcia principal, numit main, al crui antet 1linia 23 indicB 9 tipul "alorii returnate de (unc0ie 1void, ceea ce #nseamn c (unc0ia nu returneaz nici o "aloare3 9 numele (unc0iei 1main3

2'

CAPITOLUL 2

Date, operatori i expresii

9 lista argumentelor primite de (unc0ie, #ncadrat de cele 2 paranteze rotunde =unc0iile comunic #ntre ele prin argumente Aceste argumente reprezint datele de intrare ale (unc0iei 7n cazul nostru, nu a"em nici un argument #n acea list, deci puteam s scriem antetul (unc0iei i ast(elB
void main(void)

Ceea ce urmeaz dup simbolul ##, p/n la s(ritul liniei, este un comentariu, care "a (i ignorat de ctre compilator Comentariul poate con0ine un te2t e2plicati"4 in(orma0ii lmuritoare la anumite aspecte ale problemei sau obser"a0ii )ac "rem s (olosim un comentariu care cuprinde mai multe linii, "om delimita #nceputul acestuia indicat prin simbolulurile #$, iar s(/ritul 9 prin $# 1"ezi liniile 8, C3 Introducerea comentariilor #n programele surs uureaz #n0elegerea acestora 7n general, se recomand introducerea unor comentarii dup antetul unei (unc0iei, pentru a preciza prelucrrile e(ectuate #n (unc0ie, anumite limite impuse datelor de intrare, etc 7nceputul i s(/ritul corpului (unc0iei main sunt indicate de cele dou acoalade { 1linia83 i }1linia A3 Corpul (unc0iei 1linia @3 este (ormat dintr9o singur instruc0iune, care implementeaz o opera0ie de scriere Cu"antul cout este un cu"/nt prede(init al limbajului C!! 9 *onsole o#tput 9 care desemneaz dispoziti"ul logic de iesire4 simbolul << este operatorul de trans(er a in(orma0iei =olosite ast(el, se desc+ide un canal de comunica0ie a datelor ctre dispoziti"ul de ieire, #n cazul acesta, monitorul )up operator se speci(ic in(orma0iile care "or (i a(iate 1#n acest e2emplu, un ir de caractere constant3 =aptul c este un ir constant de caractere este indicat de g+ilimelele care #l #ncadreaz Pe ecran "a (i a(iat (iecare caracter din acest ir, cu e2cep0ia grupului "n. )ei grupul este (ormat din dou caractere, acesta "a (i interpretat ca un singur caracter 9 numit caracter escape 9 care determin pozi0ionarea cursorului la #nceputul urmtoarei linii O sec"en0 escape 1cum este "n3 (urnizeaz un mecanism general i e2tensibil pentru reprezentarea caracterelor in"izibile sau greu de ob0inut La s(/ritul instruc0iunii care implementeaz opera0ia de scriere, apare ;

2.). PREPRO ESOR0L


Aa cum am men0ionat #n capitolul $ 8 , #n (aza de compilare a (iierului surs este in"ocat #nt/i preprocesorul Acesta trateaz directi"ele speciale 9 numite directive preprocesor 9 pe care le gsete #n (iierul surs )irecti"ele preprocesor sunt identi(icate prin simbolul #% care trebuie s (ie primul caracter, di(erit de spa0iu, dintr9o linie )irecti"ele preprocesor sunt utilizate la includerea (iierelor +eader, la de(inirea numelor constantelor simbolice, la de(inirea macro9urilor, sau la realizarea altor (unc0ii 1de e2emplu, compilarea condi0ionat3, aa cum ilustreaz e2emplele urmtoareB

Includerea (iierelor +eader #n codul sursB Exemplul1:


#include <stdio.h>

C/nd procesorul #nt/lnete aceast linie, datorit simbolului D, o recunoate ca (iind o directi" preprocesor, localizeaz (iierul +eader indicat 1parantezele ung+iulare E F indic (aptul c este "orba de un fiier header sistem3 Exemplul 2:
#include &headerul'meu.h&

:umele (iierului +eader inclus #ntre g+ilimele, indic (aptul c headerul'meu.h este un (iier +eader creat de utilizator Preprocesorul "a cuta s localizeze acest (iier #n directorul curent de lucru al utilizatorului 7n cazul #n care (iierul +eader nu se a(l #n directorul curent, se "a indica i calea ctre acesta Exemplul 3:
#include &c(""bc""head""headerul'meu.h&

7n acest e2emplu, pentru interpretarea corect a caracterului bacGslas+ ", a (ost necesar HdublareaH acestuia, din moti"e pe care le "om prezenta #n paragra(ul 2 @ 2 C

Asignarea de nume simbolice constantelorB Exemplu:


#de)ine *+,#de)ine /012. 3

Tratarea acestor directi"e preprocesor are ca e(ect asignarea 1atribuirea3 "alorii #ntregi $ numelui 1constantei simbolice3 *+,-, i a "alorii ' numelui simbolic /012- Ca urmare, #naintea compilrii
2$

CAPITOLUL 2

Date, operatori i expresii

propriu9zise, #n programul surs, apari0iile numelor *+,- i /012- "or (i #nlocuite cu "alorile $, respecti" '

Iacrode(ini0iiB )irecti"a #de)ine este (olosit i #n macrode(ini0ii Iacrode(ini0iile permit (olosirea unor nume simbolice pentru e2presiile indicate #n directi" Exemplu:
#de)ine 4-50*67(8) 9(8)

7ntre numele macrode(ini0iei i paranteza st/ng 1 NEGATIV(:) 3 nu sunt permise spa0ii albe La #ntalnirea #n programul surs a macrode(ini0iei 4-50*67, preprocesorul subtituie argumentul acesteia cu e2presia 1negati"area argumentului3 Iacrode(ini0ia din e2emplu poate (i (olosit #n programul surs ast(elB 4-50*67(a!b) C/nd preprocesorul #nt/lnete numele e2presiei, subtituie literalii din parantez, a!b, cu argumentul din macrode(ini0ie, 2, ob0in/ndu9se 9(a!b) )ac macrode(ini0ia ar (i (ost de (ormaB
#de)ine 4-50*67(8) 4-50*67(a!b) ar (i (ost tratat ca 9a!b 98

2.,. ELE4E9TE DE 5A=> ALE LI45A60L0I 2.,.1. +O A50LAR0L


7n scrierea programelor #n limbajul C>C!! pot (i (olosite doar anumite simboluri care alctuiesc alfabetul limbajului. Acesta cuprindeB Literele mari sau mici de la A la J 1a9z34 Caracterul subliniere 1 ' underscore3, (olosit, de obicei, ca element de legtura #ntre cu"intele compuse4 Ci(rele zecimale 1'9%34 ;imboluri specialeB CaractereB operatori 1<2empleB !, $, ;<34 delimitatori 1<2empleB blanG 1spa0iu3, tab "t, neKline "n, cu rolul de a separa cu"intele34 Lrupuri 1perec+i de caractere3 Lrupurile de caractere, numire adesea separatori, pot (iB ( ) 9 7ncadreaz lista de argumente ale unei (unc0ii sau sunt (olosite #n e2presii pentru sc+imbarea ordinii de e(ectuare a opera0iilor 1#n ultimul caz, (iind operator34 { } 9 7ncadreaz instruc0iunile compuse4 ## 9 Indic #nceputul unui comentariu care se poate #ntinde p/n la s(/ritul liniei4 #$ $# 9 Indic #nceputul i s(/ritul unui comentariu care poate cuprinde mai multe linii4 & & 9 7ncadreaz o constant ir 1un ir de caractere34 = = 9 7ncadreaz o constant caracter 1un caracter imprimabil sau o sec"en0 escape3

2.,.2. 09IT><ILE LEXI ALE


Unit0ile le2icale 1cu"intele3 limbajului C>C!! reprezint grupuri de caractere cu o semni(ica0ie de sine stttoare Acestea suntB Identi(icatori4 Cu"inte c+eie ale limbajului4 I$e'ti?i*atorii reprezint numele unor date 1constante sau "ariabile3, sau ale unor (unc0ii Identi(icatorul este (ormat dintr9un ir de litere, ci(re sau caracterul de subliniere 1underscore3, trebuie s #nceap cu o liter sau cu caracterul de subliniere i s (ie sugesti"i Exemple: vite>?, greutate'net?, 7ite>a, 7ite>a., 5reutate4et?
22

CAPITOLUL 2

Date, operatori i expresii

Identi(icatorii pot con0ine litere mici sau mari, dar limbajul C!! este senziti" la majuscule i minuscule 1case9sensiti"e3 Ast(el, identi(icatorii vite>a i 7ite>a sunt di(eri0i :u pot (i (olosi0i ca identi(icatori cu"intele c+eie Identi(icatorii pot (i standard 1ca de e2emplu numele unor (unc0ii prede(initeB scan), clear, etc 3 sau alei de utilizator #3i'tele *@eie sunt cu"inte ale limbajului, #mprumutate din limba englez, crora programatorul nu le poate da o alt utilizare Cu"intele c+eie se scriu cu litere mici i pot reprezentaB Tipuri de date 1<2empleB int% char% double34 Clase de memorare 1<2empleB e8tern% static% register34 Instruc0iuni 1<2empleB i)% )or% @hile34 Operatori 1<2empluB si>eo)3 ;ensul cu"intelor c+eie "a (i e2plicat pe masur ce "or (i prezentate construc0iile #n care acestea apar

2.". DATE 89 LI45A60L ( !!


Aa cum s9a "zut #n capitolul $, un program realizeaz o prelucrare de in(orma0ie Termenul de prelucrare trebuie s (ie considerat #ntr9un sens (oarte general 1de e2emplu, #n programul prezentat #n paragra(ul 2 2 , prelucrarea se re(erea la un te2t i consta #n a(iarea lui3 7n program datele apar (ie sub (orma unor constante 1"alori cunoscute anticipat, care nu se modi(ic3, (ie sub (orma de variabile Constantele i "ariabilele sunt obiectele in(orma0ionale de baz manipulate #ntr9un program =iecare categorie de date este caracterizat de atributeleB :ume4 Maloare4 Tip4 Clasa de memorare )e primele trei tipuri de atribute ne "om ocupa #n continuare, urm/nd ca de atributul clas de memorare s ne ocupm #n paragra(ul A 6 9#mele #'ei $ate :umele unei date este un identi(icator i, ca urmare, trebuie s respecte regulile speci(ice identi(icatorilor )easemenea, numrul de caractere care intr #n compunerea unui identi(icator este nelimitat, #ns, implicit, numai primele 82 de caractere sunt luate #n considerare Aceasta #nseamn c doi identi(icatori care au primele 82 de caractere identice, di(eren0iindu9se prin caracterul 88, "or (i considera0i identici

2.".1. TIP0RI DE DATE


Tip#l #'ei $ate const #ntr9o mulime de valori pentru care s9a adoptat un anumit mod de reprezentare #n memoria calculatorului i o mulime de operatori care pot (i aplica0i acestor "alori Tipul unei date determin lungimea zonei de memorie ocupat de acea dat 7n general, lungimea zonei de memorare este dependent de calculatorul pe care s9a implementat compilatorul Tabelul 2 $ prezint lungimea zonei de memorie ocupat de (iecare tip de dat pentru compilatoarele sub I;9)O; i U:IN>LI:UN Tip#rile $e ba-. suntB char un singur octet 1$ bOteP6 bi0i3, capabil s con0in codul unui caracter din setul local de caractere4 int numr #ntreg, re(lect #n mod tipic mrimea natural din calculatorul utilizat4 )loat numr real, #n "irgul mobil, simpl precizie4 double numr real, #n "irgul mobil, dubl precizie 7n completare e2ist un numr de calificatori, care se pot aplica tipurilor de baz char, int, )loat sau doubleB short, long, signed i unsigned Ast(el, se ob0in tipurile derivate de date 2hort i long se re(er la mrimea di(erit a #ntregilor, iar datele de tip unsigned int sunt #ntotdeauna poziti"e ;9a inten0ionat ca short i long s (urnizeze di(erite lungimi de #ntregi, int re(lect/nd mrimea cea mai HnaturalH pentru un anumit calculator =iecare compilator este liber s interpreteze short i long #n mod
28

CAPITOLUL 2

Date, operatori i expresii

adec"at propriului +ardKare4 #n nici un caz, #ns, short nu este mai lung dec/t long To0i aceti cali(icatori pot aplica0i tipului int Cali(icatorii signed 1cel implicit3 i unsigned se aplic tipului char Cali(icatorul long se aplic tipului double )ac #ntr9o declara0ie se omite tipul de baz, implicit, acesta "a (i int Tabelul 2 $ Tip L#'%imea -o'ei $e memorie o*#pate A&' bi1iB I;9 U:IN )O; LI:UN 6 6 6 6 $A 82 82 $A $A 82 82 AC 6' 6 6 82 AC AC 82 82 AC 82 AC $26 Des*riere

char unsigned char signed char int long (long int) long long int short int unsigned int unsigned long int )loat double long double

Maloarea unui singur caracter4 poate (i #nt/lnit #n e2presii cu e2tensie de semn Aceeai ca la c+ar, (ar e2tensie de semn Aceeai ca la c+ar, cu e2tensie de semn obligatorie Maloare #ntreag Maloare #ntreag cu precizie mare Maloare #ntreag cu precizie mare Maloare #ntreag cu precizie mic Maloare #ntreag, (r semn Maloare #ntreag, (r semn Maloare numeric cu zecimale, simpl precizie 1A 3 Maloare numeric cu zecimale, dubl precizie 1$' 3 Maloare numeric cu zecimale, dubl precizie

; considerm, de e2mplu, tipul int, (olosit pentru date #ntregi 1poziti"e sau negati"e3 <"ident c mul0imea "alorilor pentru acest tip "a (i, de (apt, o submulime finit de numere #ntregi )ac pentru memorarea unei $ date de tip int se (olosesc 2 octe0i de memorie, atunci "aloarea ma2im pentru aceasta "a (i 2 $A 9 $, 2 $ deci 2 $@ 9 $ 1ABCDC3, iar "aloarea minim "a (i 9 2 $A , deci 92 $@ 19ABCDE3 7ncercarea de a calcula 2 o e2presie de tip int a crei "aloare se situeaz #n a(ara acestui domeniu "a conduce la o eroare de e2ecu0ie Iul0imea "alorilor pentru o dat de tip unsigned int 1#ntreg (r semn3 "a (i (ormat din numerele #ntregi situate #n inter"alul Q', 2 $A 9 $R 7n +eader9ul <values.h> sunt de(inite constantele simbolice 1cum ar (iB F0G64*, F0G2HI+*, F0G1I45, F64JI,K1-, F64/1I0*, etc 3 care au ca "aloare limitele in(erioar i superioar ale inter"alului de "alori pentru tipurile de date enumerate 1de e2emplu F0G64* reprezint "aloarea #ntregului ma2im care se poate memora, etc 3 =r a detalia (oarte mult modul de reprezentare a datelor reale 1de tip )loat sau double3, "om sublinia (aptul c, pentru acestea, este important i precizia de reprezentare )eoarece calculatorul poate reprezenta doar o submul0ime (init de "alori reale, #n anumite cazuri, pot apare erori importante :umerele reale pot (i scrise sub (ormaB : P mantisa baza e2ponent undeBba>a reprezint baza sistemului de numera0ie4 mantisa 1coe)icientul3 este un numr (rac0ionar normalizat 1 #n (a0a "irgulei se a(l ', iar prima ci(r de dup "irgul este di(erit de zero34 e8ponentul este un numr #ntreg )eoarece (orma intern de reprezentare este binar, bazaP2 7n memorie "or (i reprezentate doar mantisa i e2ponentul :umrul de ci(re de dup "irgul determin precizia de e2primare a numrului Ce alte cu"inte, pe un calculator cu o precizie de A ci(re semni(icati"e, dou "alori reale care di(er la a &9a ci(r zecimal, "or a"ea aceeai reprezentare Pentru datele de tip (loat, precizia de reprezentare este A4 pentru cele de tip double, precizia este $C, iar pentru cele de tip long double, precizia este 2' Lungimea zonei de memorie ocupate de o dat de un anumit tip 1pe c/0i octe0i este memorat data3 poate (i a(lat cu ajutorul operatorului si>eo)
2C

CAPITOLUL 2

Date, operatori i expresii

Exemplu:
cout<<&,n int este memorat pe &<<si>eo)(int)<<&octeti."n&;

Instruc0iunea are ca e(ect a(iarea pe monitor a mesajuluiB Un int este memorat pe 2 octei.

2.".2.

O9STA9TE

O constant este un literal 1o (orm e2tern de reprezentare3 numeric, caracter sau ir de caractere :umele i "aloarea unei constante sunt identice Maloarea unei constante nu poate (i sc+imbat #n timpul e2ecu0iei programului #n care a (ost utilizat Tipul i "aloarea ei sunt determinate #n mod automat, de ctre compilator, pe baza caracterelor care compun literalul

2.".2.1.

o'sta'te &'tre%i

Constantele #ntregi sunt literali numerici 1compui din ci(re3, (r punct zecimal Constante ntregi n baza !, " sau # Constante ntregi n baza ! Exemple: >> constante #ntregi decimale 1#n baza $'3, tip i't Constante ntregi octale )ac #n (a0a numrului apare ci(ra zero 1'3, acest lucru indic (aptul c acea constant este de tipul int, in baza opt 1constant octal3 Exemple: >> constante #ntregi octale, tip i't Constante ntregi he$agesimale )ac #n (a0a numrului apar caracterele zero 1'3 i 2 1sau N3, acest lucru indic (aptul c acea constant este de tipul int, #n baza $A 1constant +e2agesimal3 Amintim c #n baza $A ci(rele suntB '9%, A 1sau a3 cu "aloare $', - 1sau b3 cu "aloare $$, C 1sau c3 cu "aloare $2, ) 1sau d3 cu "aloare $8, < 1sau e3 cu "aloare $C, = 1sau (3 cu "aloare $@ Exemple:
38LM 38A0 3Gbc 3MD 3CC LM 9CE

>> constante #ntregi +e2agesimale, tip i't Constante ntregi, de tipuri derivate )ac sec"en0a de ci(re este urmat de 1 sau l, tipul constantei este lo'% i't Exemple: >> tip decimal lo'% i't )ac sec"en0a de ci(re este urmat de , sau u, tipul constantei este #'si%'e$ i't Exemple:
DMMMMu

.LMDCC1 ENCDMMl

)ac sec"en0a de ci(re este urmat de U 1u3 i 1 1l3, tipul constantei este #'si%'e$ lo'% i't Exemple: CENN,1 >>tip decimal #'si%'e$ lo'% i't

2.".2.2.

o'sta'te '#meri*e, reale

)ac o constant numeric con0ine punctul zecimal, ea este de tipul $o#ble Exemplu: A..LMN >>tip $o#ble )ac numrul este urmat de = sau (, constante este de tip ?loat )ac numrul este urmat de L sau l, este de tip lo'% $o#ble. Exemplu: 3.LM) >>tip ?loat
2@

CAPITOLUL 2 N.CEE1

Date, operatori i expresii

>>tip lo'% $o#ble Constante reale #n (ormat tiin0i(ic :umrul poate (i urmat de caracterul e sau - i de un numr #ntreg, cu sau (r semn 7n acest caz, constanta este #n notaie tiinific 7n aceast (orm e2tern de reprezentare, numrul din (a0a literei < reprezint mantisa, iar numrul #ntreg care urmeaz caracterului < reprezint e$ponentul In (orma e2tern de reprezentare, baza de numera0ie este $', deci "aloarea constantei "a (i dat de mantisa $'
e2p onent

Exemplu:
..Me9B

>>tip double, #n nota0ie tiin0i(ic, "aloare $ @ $' 2

Exerciiu: ; se scrie urmtorul program i s se urmreasc rezultatele e2ecu0iei acestuia


#include <iostream.h> #include <values.h> #de)ine P6 A..LAMN int main() { cout<<&*ipul int memorat pe( &<<si>eo)(int)<<& octeti"n&; cout<<&*ipul int memorat pe( &<<si>eo)(BA)<<& octeti"n&; >>289const zecimala int cout<<&6nt ma8im<&<<F0G64*<<O"nO;

>>const simbolice IANI:T, IANLO:L, etc 9 de(inite in E"alues +F


cout<<& onst. octala 3CC are val decimala(&<<3CC<<O"n; cout<<& onst. he8agesimala dA are val decimala(&<<38dA<<O"nO; cout<<&*ipul unsigned int memorat pe(&<<si>eo)(unsigned int)<<& octeti"n&; cout<<&*ipul unsigned int memorat pe( &<<si>eo)(BA,)<<& octeti"n&; cout<<&*ipul unsigned int memorat pe( &<<si>eo)(BAu)<<& octeti"n&; cout<<&*ipul long int memorat pe( &<<si>eo)(long int)<<& octeti"n&; cout<<&*ipul long int memorat pe( &<<si>eo)(BA1)<<& octeti"n&; cout<<&*ipul long int memorat pe( &<<si>eo)(BAl)<<& octeti"n&;

>>28L sau 28l9const decimala long int


cout<<&1ong int ma8im<&<<F0G1I45<<O"nO; cout<<&*ipul unsigned long memorat pe(&; cout<<si>eo)(unsigned long int)<<& octeti"n&; cout<<&*ipul unsigned long memorat pe( &<<si>eo)(BA,1)<<& octeti"n&; cout<<&*ipul unsigned long memorat pe( &<<si>eo)(BAul)<<& octeti"n&;

>>28UL sau 28ul9const decimala unsigned long int


cout<<&*ipul long long int memorat pe( &; cout<<si>eo)(long long int)<<& octeti"n&; cout<<&*ipul long long int memorat pe( &<<si>eo)(d)<<& octeti"n&; cout<<&*ipul short int memorat pe( &<<si>eo)(short int)<<& octeti"n&; cout<<&2hort int ma8im<&<<F0G2HI+*<<O"nO; cout<<&*ipul )loat memorat pe( &<<si>eo)()loat)<<& octeti"n&; cout<<&*ipul )loat memorat pe( &<<si>eo)(BA.C))<<& octeti"n&;

>>28 &(9const decimala (loat


cout<<&/loat cout<<&/loat cout<<&*ipul cout<<&*ipul ma8im<&<<F0G/1I0*<<O"nO; minim<&<<F64/1I0*<<O"nO; double memorat pe( &<<si>eo)(double)<<& octeti"n&; double memorat pe( &<<si>eo)(BA.C)<<& octeti"n&;

>>28 &9const decimala double


cout<<& onst. decim. doubla in notatie stiinti)ica(&<<BA.Ce9M<<O"nO; cout<< onst. P6 este(<<P6<<O"nO; cout<< onstanta P6 este memorata pe(<<si>eo)(P6)<<octeti"n( cout<<&Jouble ma8im<&<<F0GJI,K1-<<O"nO<<&Jouble minim<&<<F64JI,K1-<<O"nO; cout<<&*ipul long double memorat pe( &<<si>eo)(long double)<<& octeti"n&; cout<<&*ipul long double memorat pe( &<<si>eo)(BA.C1)<<& octeti"n&;

>>28 &L9const decimala long double


cout<<& i)ra 0 din H-G0 are val.(&<<380<<&"n&; cout<<& i)ra K din H-G0 are val.(&<<3GK<<&"n&; cout<<& i)ra din H-G0 are val.(&<<38c<<&"n&; cout<<& i)ra J din H-G0 are val.(&<<38J<<&"n&; cout<<& i)ra - din H-G0 are val.(&<<3G-<<&"n&; 2A

CAPITOLUL 2 Date, operatori i expresii cout<<& i)ra / din H-G0 are val.(&<<38)<<&"n&; cout<<&7al. const. he8a 38Cac.e este( &<<38Cac.e<<="n=; cout<<&7al. const. octale .C. este( &<<3.C.<<="n=; cout<<&I const. octala se memorea>a pe &<<si>eo)(3..)<<& octeti"n&; cout<<&I const.oct.long se mem pe &;cout<<si>eo)(3..1)<<& octeti"n&;}

2.".2.).
Exemplu:

o'sta'te *ara*ter

Constantele caracter sunt #ncadrate #ntre apostroa(e


>>tip *@ar O constant caracter are ca "aloare codul ASCII al caracterului pe care #l reprezint Acest set de caractere are urmtoarele proprietiB =iecrui caracter #i corespunde o "aloare #ntreag distinct 1ordinal34 Malorile ordinale ale literelor mari sunt ordonate i consecuti"e 1SAS are codul A;CII A@, S-S 9 codul AA, SCS 9 codul A&, etc 34 Malorile ordinale ale literelor mici sunt ordonate i consecuti"e 1SaS are codul A;CII %&, SbS 9 codul %6, ScS 9 codul %%, etc 34 Malorile ordinale ale ci(relor sunt ordonate i consecuti"e 1S'S are codul A;CII C6, S$S 9 codul C%, S2S 9 codul @', etc 3
=a=

Constante caracter corespunztoare caracterelor imprimabile O constant caracter corespunztoare unui caracter imprimabil se reprezint prin caracterul respecti" inclus #ntre apostroa(e ExempluB Constant caracter Maloare
P0O PaO P3O P$O DM NC LE LB

Excepii de la regula de mai sus le constituie caracterele imprimabile apostrof 1=3 i bacGslas+ 1"3 Caracterul bac%slash se reprezintB =""= Caracterul apostrof se reprezintB ="==.

Constante caracter corespunztoare caracterelor neimprimabile Pentru caracterele neimprimabile, se (olosesc secvene escape O sec"en0 escape (urnizeaz un mecanism general i e2tensibil pentru reprezentarea caracterelor in"izibile sau greu de ob0inut 7n tabelul 2 2 sunt prezentate c/te"a caractere escape utilizate (rec"ent Tabelul 2 2 Constant caracter
P"nO P"tO P"rO P")O P"aO

Maloare 1Cod A;CII3


.3 N .A .B C

)enumirea caracterului
1/ H* + // K-1

Utilizare

r/nd nou 1Line =eed3 tabulator orizontal pozi0ioneaz cursorul #n coloana $ din r/ndul curent salt de pagin la imprimant 1=orm =eed3 acti"are sunet O constant caracter pentru o sec"en0 escape poate apare #ns, i sub o (orm #n care se indic codul A;CII, #n octal, al caracterului doritB O"dddO unde d este o ci(r octal Exemple: O"..O 1pentru O"tO3 reprezint constanta caracter bacGspace, cu codul % #n baza $', deci codul $$ #n baza 6 O".MO 1pentru O"rO3 reprezint constanta caracter C*, cu codul $8 #n baza $', deci codul $$ #n baza 6

2&

CAPITOLUL 2

Date, operatori i expresii

Exerciiu: ; se scrie urmtorul program i s se urmreasc rezultatele e2ecu0iei acestuia


#include <iostream.h> void main(void) { cout<<&,n caracter este memorat pe &<<si>eo)(char)<<& octet"n&; cout<<& aracterul escape ""n este memorat pe &; cout<<si>eo)(="n=)<<& octet"n&; cout<<& aracterul escape =""n"= este memorat pe &<<si>eo)(="n=); cout<<& octet"n&; cout<<& aracterul =N= este memorat pe &<<si>eo)(=N=)<<& octet"n&; cout<<=K=;cout<<= =;cout<<=c=;cout<<="t=; cout<<="t=;cout<<=N=;cout<<="b=;cout<<="a=; cout<<=1=;cout<<="v=;cout<<=1=; cout<<="==;cout<<="t=;cout<<="&=;cout<<=""=;cout<<="n=; cout<<="a=;cout<<="C=; }

2.".2.,.

o'sta'te ir $e *ara*tere

Constanta ir este o succesiune de zero sau mai multe caractere, #ncadrate de g+ilimele 7n componen0a unui ir de caractere, poate intra orice caracter, deci i caracterele escape Lungimea unui ir este practic nelimitat )ac se dorete continuarea unui ir pe r/ndul urmtor, se (olosete caracterul bacGslas+ Caracterele componente ale unui ir sunt memorate #ntr9o zon continu de memorie 1la adrese succesi"e3 Pentru (iecare caracter se memoreaz codul A;CII al acestuia )up ultimul caracter al irului, compilatorul plaseaz automat caracterul &U'' 1"33, caracter care reprezint marcatorul sf(ritului de ir :umrul de octe0i pe care este memorat un ir "a (i, deci, mai mare cu $ dec/t numrul de caractere din ir Exemple: 0cesta este un Qir de caractere >>constant ir memorat pe 82 octe0i
Rir de caractere continuat" pe rSndul urm?tor; >>constant ir memorat pe C@ octe0i Rir "t cu secvenTe escape"n >>constant ir memorat pe 2A octe0i O"nO >>constant caracter memorat pe un octet "n >>constanta ir memorat pe 2 octe0i 1codul caracterului escape i terminatorul de ir3 a"aL >?Tir memorat pe C octe0iB

Pe primul octetB codul A;CII al caracterului a Pe al doilea octetB codul A;CII al caracterului escape Ua Pe al treilea octetB codul A;CII al caracterului C Pe al patrulea octetB terminatorul de ir :ULL, cod A;CII ' ?> ""02 66"" >?Tir memorat pe 6 octe0iB Pe primul octetB codul A;CII al caracterului bacGsla+ Pe al doilea octetB codul A;CII al caracterului A Pe al treilea octetB codul A;CII al caracterului ; Pe al patrulea octetB codul A;CII al caracterului ; Pe al A9lea octetB codul A;CII al caracterului I Pe al &9lea octetB codul A;CII al caracterului I Pe al 69lea octetB codul A;CII al caracterului bacGsla+ Pe al %9ea octetB terminatorul de ir :ULL, de cod A;CII ' ?> .".CMa >?Tir memorat pe C octe0iB Primul octetB Codul A;CII al caracterul $ Al 29lea octetB codul A;CII $2@ 1$&@ in octal3 al caracterului V Al 89lea octetB codul A;CII al caracterului a Al C9lea octetB codul A;CII ' pentru terminatorul irului ?> Exerciiu: ; se scrie urmtorul program i s se urmreasc rezultatele e2ecu0iei acestuia
#include <iostream.h> void main()

26

CAPITOLUL 2 Date, operatori i expresii { cout<<&Rirul "&0bNd"& este memorat pe(&<<si>eo)(&0bNd&)<<& octeTi"n&; cout<<&Rirul "&0bcd""t"& este memorat pe(&<<si>eo)(&0bcd"t&)<<& octeTi"n&; cout<<&Rirul "&"n"& este memorat pe &<<si>eo)(&"n&)<<& octeTi"n&; cout<<&Rirul "&""n"& este memorat pe &<<si>eo)(&"n&)<<& octeTi"n&; cout<<&Rirul "&0K J-"& se memorea>? pe &<<si>eo)(&0K J-&)<<& octeTi"n&;}

2.".). +ARIA5ILE
;pre deosebire de constante, "ariabilele sunt date 1obiecte in(orma0ionale3 ale cror "alori se pot modi(ica #n timpul e2ecu0iei programului Ti "ariabilele sunt caracterizate de atributele nume, tip, valoare i clas de memorare Mariabilele sunt nume simbolice utilizate pentru memorarea "alorilor introduse pentru datele de intrare sau a rezultatelor )ac la o constant ne puteam re(eri (olosind caracterele componente, la o "ariabil ne "om re(eri prin numele ei :umele unei "ariabile ne permite accesul la "aloarea ei, sau sc+imbarea "alorii sale, dac este necesar acest lucru :umele unei "ariabile este un identi(icator ales de programator Ca urmare, trebuie respectate regulile enumerate #n sec0iunea identi(icatori )ac o dat nu are legturi cu alte date 1de e2emplu, rela0ia de ordine3, "om spune c este o dat izolat O dat izolat este o variabil simpl )ac datele se grupeaz #ntr9un anumit mod 1#n tablouri 9 "ectori, matrici 9 sau structuri3, "ariabilele sunt compuse 1structurate3 7n cazul constantelor, #n (unc0ie de componen0a literalului, compilatorul stabilea, automat, tipul constantei 7n cazul "ariabilelor este necesar speci(icarea tipului (iecreia, la declararea acesteia Toate "ariabilele care "or (i (olosite #n program, trebuie declarate #nainte de utilizare

2.".).1. De*lararea 3ariabilelor


Iodul general de declarare a "ariabilelor esteB tip'variabile list?'nume'variabile; ;e speci(ic tipul "ariabilei1lor3 i o list (ormat din unul sau mai mul0i identi(icatori ai "ariabilelor de tipul respecti" 7ntr9un program #n limbajul !!, declara0iile de "ariabile pot apare #n orice loc #n programul surs La declararea "ariabilelor, se rezer" #n memorie un numr de octe0i corespunztor tipului "ariabilei, urm/nd ca ulterior, #n acea zon de memorie, s (ie depus 1memorat, #nregistrat3 o anumit "aloare Exemple: int i% j;>?declararea "ar simple i, j, de tip int ;e rezer" pentru i i j c/te $A bi0i 12octe0i3?> char c; >? declararea "ariabilei simple c, de tip char ;e rezer" un octet ?> )loat lungime; >? declararea "ariabilei simple lungime4 se rezer" C octe0i ?>

2.".).2. I'i1iali-area 3ariabilelor &' $e*lara1ii


7n momentul declarrii unei "ariabile, acesteia i se poate da 1asigna, atribui3 o anumit "aloare 7n acest caz, #n memorie se rezer" numrul de loca0ii corespunztor tipului "ariabilei respecti"e, iar "aloarea "a (i depus 1memorat3 #n acele loca0ii =orma unei declara0ii de "ariabile cu atribuire esteB tip'variabil? nume'variabil?<e8presie; ;e e"alueaz e2presia, iar rezultatul acesteia este asignat "ariabilei speci(icate Exemple: char bacUslash<O""O; >>declararea i ini0ializarea "ariabilei simple bacGslas+ int a<C$N!B; >? declararea "ariabilei simple a, de tip int i ini0ializarea ei cu "aloarea A@?> )loat radiani% pi<A..L;>?declararea "ariabilei radiani4declararea i ini0ializarea "ar pi?> short int ><A; >>declararea i ini0ializarea "ariabilei simple z
char d<O"3..O; char 1inie4oua<O"nO; double 8<N.E% V<3; 2%

CAPITOLUL 2

Date, operatori i expresii

Compilatorul C!! (urnizeaz mecanisme care permit programatorului s in(luen0eze codul generat la compilare, prin aa9numi0ii calificatori Acetia suntB const4 volatile Cali(icatorul *o'st asociat unei "ariabile, nu "a permite modi(icarea ulterioar a "alorii acesteia, prin program 1printr9o atribuire3 Cali(icatorul 3olatile 1cel implicit3 are e(ect in"ers cali(icatorului const )ac dup cali(icator nu este speci(icat tipul datei, acesta este considerat tipul implicit, adic i't Exemple:
const )loat b<E.E; volatile char terminator;terminator<OWO;terminator<O$O; >>permis b<L#M; >>nepermisa modi(icarea "alorii "ariabilei b const @; volatile g; >>K, g de tip int, implicit

2.".).). Opera1ii $e i'trare(ieire


Limbajele C>C!! nu posed instruc0iuni de intrare>ieire, deci de citire>scriere 1ca limbajul PA;CAL, de e2emplu3 7n limbajul C aceste opera0ii se realizeaz cu ajutorul unor (unc0ii 1de e2emplu, print( i scan(3, iar #n limbajul C!! prin supra#ncrcarea operatorilor 1de(inirea unor noi propriet0i ale unor operatori e2isten0i, (r ca propriet0ile anterioare s dispar3, mai precis a operatorilor >> i << Mom (olosi #n continuare abordarea limbajului C!!, (iind, #n momentul de (a0, mai simpl 7n limbajul C!! sunt prede(inite urmtoarele dispoziti"e logice de intrare>ieireB cin 9 *onsole i'put 9 dispoziti"ul de intrare 1tastatura34 cout 9 *onsole o#tput 9 dispoziti"ul de ieire 1monitorul3 Aa cum se "a "edea #n capitolul %, cin i cout sunt, de (apt, obiecte 1prede(inite3 Trans(erul in(orma0iei se realizeaz cu operator#l >> pentru intrare i operator#l << pentru ieire Utilizarea dispoziti"elor de intrare>ieire cu operatorii corespunztori determin desc+iderea unui canal de comunica0ie a datelor ctre dispoziti"ul respecti" )up operator se speci(ic in(orma0iile care "or (i citite sau a(iate Exemple: cout << var; >? a(ieaz "aloarea "ariabilei var pe monitor?> cin >> var; >? citete "aloarea "ariabilei var de la tasatatur ?> ;unt posibile operar0ii multiple, de tipulB Exemple:
cout << var. << varB << varA; cin >> var. >> varB >> varA;

7n acest caz, se e(ectueaz succesi", de la st/nga la dreapta, scrierea, respecti" citirea "alorilor "ariabilelor var., varB i varA Operatorul >> se numete operator extractor 1e2trage "alori din (lu2ul datelor de intrare, con(orm tipului acestora3, iar operatorul << se numete operator insertor 1insereaz "alori #n (lu2ul datelor de ieire, con(orm tipului acestora3 Tipurile de date citite de la tastatur pot (i toate tipurile numerice, caracter sau ir de caractere Tipurile de date trans(erate ctre ieire pot (iB toate tipurile numerice, caracter sau ir de caractere Operanzii operatorului e2tractor 1>>3 pot (i doar nume de "ariabile Operanzii operatorului insertor 1<<3 pot (i nume de "ariabile 1caz #n care se a(ieaz "aloarea "ariabilei3, constante sau e2presii Utilizarea dispoziti"elor i operatorilor de intrare>ieire #n C!! impune includerea (iierului iostream.h Exemple:
char c; cout<<&0stept un caracter(&; >>a(iarea constantei ir de caractere, deci a mesajului cin>>c; >>citirea "alorii "ariabilei c, de tip caracter int a% b% e; double d; cin>>a>>b>>e>>d; >>citirea "alorilor "ariabilelor a, b, e, d de tip int, int, int, double 8'

CAPITOLUL 2 Date, operatori i expresii cout<<&a<&<<a<<&7aloarea e8presiei a!b este(&<<a!b<<="n=;

2./. OPERATORI I EXPRESII


)atele 1constante sau "ariabile3 legate prin operatori, (ormeaz expresii 1(igura 2 C3 Operatorii care pot (i aplica0i datelor 1operanzilor3 depind de tipul operanzilor, datorit (aptului c tipul unei date const #ntr9o mul0ime de "alori pentru care s9a adoptat un anumit mod de reprezentare #n memoria calculatorului i o mulime de operatori care pot (i aplica0i acestor "alori Operatorii pot (iB unari 1necesit un singur operand34 binari 1necesit doi operanzi34 ternari 1trei operanzi3 O expresie este o combina0ie corect din punct de "edere sintactic, (ormat din operanzi i operatori <2presiile, ca i operanzii, au tip i valoare 2./.1. OPERATORI Operatorul unar adres &, aplicat identi(icatorului unei "ariabile, (urnizeaz adresa la care este memorat aceasta Poate (i aplicat oricrui tip de date i se mai numete operator de refereniere. Exemplu:

int a; cout<<&0dresa la care este memorata variabila a este(&<<&a;

Operatorul de atribuire )de asignare* este un operator binar care se aplic tuturor tipurilor de "ariabile <ste (olosit sub (ormele urmtoareB nume'variabil?=e8presie; sau+ e8presie.=e8presieB; ;e e"alueaz e2presia din membrul drept, iar "aloarea acesteia este atribuit "ariabilei din membrul st/ng )ac tipurile membrilor st/ng i drept di(er, se pot realiza anumite con"ersii, prezentate #n paragra(ul 2 & Exemplu:

)loat 8; int a%b; 8<N..E; a<b<.3; int s; s<a!B3$M; s<8!B;

>>rezultatB sP$$' >>rezultat sP$$, deoarece s este int

Aa cum se obser" #n linia a 29a din e2emplul precedent, operatorul de atribuire poate (i utilizat de mai multe ori #n aceeai e2presie Asociati"itatea operatorului are loc de la dreapta la st/nga Ast(el, mai #nt/i bP$', apoi aPb Exerciiu: ; se scrie urmtorul program i s se urmreasc rezultatele e2ecu0iei acestuia
#include <iostream.h> void main() { )loat 8%V<L.BM; char car<O0O; int a%b%c; cout<<7al. lui V este(<<V<<O"nO;

>>A(iareB Mal lui O esteBC 2@ 8<V; cout<<7al. lui 8 este(<<8<<O"nO; >>A(iareB Mal lui 2 esteBC 2@ a<8;cout<<7al.lui a este(<<a<<O"nO; >>A(iareBMal lui a esteBC, deoarece a de tip intWWW c<b<a; cout<<b<<<b<<"tc<<<c<<O"nO; >>A(iareB bPC cPC cout<<6ntroduceTi val. lui c(; cin>>c; >> citire "al pentru c cout<<7al. lui c este(<<c<<O"nO; >>A(iareB Mal lui c esteBC
}

8$

CAPITOLUL 2

Date, operatori i expresii

Operatorul poate (i aplicat tipurilor de date #ntregi, reale, caracter, i c+iar iruri de caractere, aa cum "om "edea #n capitolele urmtoare 1e2empluB c+ar ir Q$'RP.a@d(gt+Glj.3

Operatori aritmetici unariB Operator Sem'i?i*a1ie Iinus unar ++ Operator de incrementare 1adun $ la "aloarea operandului3 -Operator de decrementare 1scade $ din "aloarea operandului3 Operatorul - unar sc+imb semnul operandului Exemplu:

Exemple 9a a!! sau !!a a99 sau 99a

int a%b; cout<<a<<<9a<<O"nO; cout<<b<<<b<<O"nO;

b<9a;

Operatorul 9 unar poate (i aplicat datelor #ntregi, reale, caracter Operatorii de incrementare i decrementare pot (i aplica0i datelor numerice sau caracter Ambii operatori pot (i (olosi0i #n (orm prefi$at, #naintea operandului, 1!!a, respecti" 99a3 sau postfi$at, dup operand 1a!!, respecti" a993 Operatorul de decrementare 99 care poate (i (olosit #n (orm prefi$at 199a3 sau postfi$at 1a993

Utilizarea acestor operatori #n e2presii, #n (orm pre(i2at sau post(i2at, determin e"aluarea acestora #n moduri di(erite, ast(elB OP!!2 OP2!! OP992 OP299 este ec+i"alent cuB este ec+i"alent cuB este ec+i"alent cuB este ec+i"alent cuB 2P2!$4 OP24 OP24 2P2!$4 2P29$4 OP24 OP24 2P29$4

ExerciiuC ; se scrie urmtorul program i s se urmreasc rezultatele e2ecu0iei acestuia


#include <iostream.h> void main() { int a<N; cout<<a!!<<<a!!<<O"nO; cout<<a<<<a<<O"nO; a<N; cout<<!!a<<<!!a<<O"nO; cout<<a<<<a<<O"nO; a<N; cout<<a99<<<a99<<O"nO; cout<<a<<<a<<O"nO; a<N; cout<<99a<<<99a<<O"nO; cout<<a<<<a<<O"nO; int >%8<A; ><8!!9B; cout<<><<<><<O"nO; cout<<&8<<<8<<O"nO; 8<A; ><!!89B; cout<<><<<><<O"nO; cout<<&8<<<8<<O"nO; }

>>A(iareB a!!P% >>A(iareB aP$' >>*e"enire in situatia anterioara >>A(iareB !!aP$' >>A(iareB aP$' >>A(iareB a99P% >>A(iareB aP6 >>*e"enire in situa0ia anterioara >>A(iareB 99aP6 >>A(iareB aP6 >>A(iareB zP$ >>A(iareB 2PC >>A(iareB zP2 >>A(iareB 2PC Exemple

Operatori aritmetici binari: Operator Sem'i?i*a1ie

82

CAPITOLUL 2

Date, operatori i expresii

+ * / D

Adunarea celor doi operanzi a!b ;cderea celor doi operanzi a9b 7nmul0irea celor doi operanzi a?b 7mpr0irea celor doi operanzi a>b Operatorul modulo 1operatorul rest3 aXb 1(urnizeaz restul #mpr0irii operatorului st/ng la operatorul drept3

Operatorul modulo se aplic numai operanzilor #ntregi 1de tip int sau c+ar3 Ceilal0i operatori aritmetici binari pot (i aplica0i datelor #ntregi sau reale )ac #ntr9o e2presie cu 2 operanzi i un operator binar aritmetic, ambii operanzi sunt #ntregi, rezultatul e2presiei "a (i tot un numr #ntreg )e e2emplu, la e"aluarea e2presiei %>2, ambii operanzi (iind #ntregi, rezultatul (urnizat este numrul #ntreg C Operatorii prezenta0i respect o serie de reguli de preceden0 1prioritate3 i asociati"itate, care determin precis modul #n care "a (i e"aluat e2presia #n care acetia apar 7n tabelul 2 8 sunt prezenta0i operatorii anteriori, #n ordinea descresctoare a priorit0ii Preceden0a operatorilor poate (i sc+imbat cu ajutorul parantezelor Tabelul 2 8 las. $e operatori Unari Iultiplicati"i Aditi"i Atribuire Operatori 9 1unar3 !! ? > X ! 9 P Aso*iati3itate de la dreapta la st/nga de la st/nga la dreapta de la st/nga la dreapta de la dreapta la st/nga

99

Exerciiu: ; se scrie urmtorul program i s se urmreasc rezultatele e2ecu0iei acestuia


#include <iostream.h> void main() { int re>ult% a<B3%b<B%c<BM%d<L; re>ult<a9b; cout<<a9b<<<re>ult<<O"nO; re>ult<a!b; cout<<a!b<<<re>ult<<O"nO; re>ult<a$b;cout<<c$b<<<re>ult<<O"nO; re>ult<a#d; cout<<a#d<<<re>ult<<O"nO; re>ult<cXb; cout<<cXb<<<re>ult<<O"nO; re>ult<c#b$d; cout<<c#b$d<<<re>ult<<O"nO; re>ult< 9b!a; cout<<9b!a<<<re>ult<<O"nO; re>ult< 9(b!a); cout<<9(b!a)<<<re>ult<<O"nO; re>ult<b!c$d;cout<<b!c$d<<<re>ult<<O"nO; re>ult<(b!c)$d;cout<<(b!c)$d<<<re>ult<<O"nO; }

>> A(iareB a9bP$6 >> A(iareB a!bP22 >> A(iareB c?bP@' >> A(iareB a>dP@ >> A(iareB cXbP$ >> A(iareB c>b?dPC6 >> A(iareB 9b!aP$6 >> A(iareB 91b!a3P922 >> A(iareB b!c?dP$'2 >> A(iareB 1b!c3?dP$'6

Operatori aritmetici binari compui Operator Sem'i?i*a1ie Exemple += aPa!b a!Pb -= aPa!b a9Pb *= aPa?b a?Pb /= aPa>b a>Pb DE aPaXb aXPb Aceti operatori se ob0in prin combinarea operatorilor aritmetici binari cu operatorul de atribuire i sunt (olosi0i sub (orma urmtoareB e8presie. operator< e8presieB; *ezultatul ob0inut este acelai cu rezultatul ob0inut prinB e8presie. < e8presie. operator e8presieB; To0i aceti operatorii modi(ic "aloarea operandului st/ng prin adunarea, scderea, #nmul0irea sau #mpr0irea acestuia prin "aloarea operandului drept
88

CAPITOLUL 2

Date, operatori i expresii

Construc0ia 2!P$ genereaz acelai rezultat ca e2presia 2P2!$ Obser"a0iile re(eritoare la operatorii aritmetici binari sunt "alabile i pentru operatorii aritmetici binari compui Operatorii aritmetici binari compui au aceeai prioritate i asociati"itate ca i operatorul de atribuire Exerciiu: ; se scrie urmtorul program i s se urmreasc rezultatele e2ecu0iei acestuia
#include <iostream.h> void main() { int a%b; )loat c<N.A; a<A; b<E; cout<<a<<<a<<O"nO; a!<b; cout<<a<<<a<<O"nO; a9<b; cout<<a<<<a<<O"nO; a$<b; cout<<a<<<a<<O"nO; a#<b; cout<<a<<<a<<O"nO; aX<b; cout<<a<<<a<<O"nO; }

>>A(iare >>A(iare >>A(iare >>A(iare >>A(iare >>A(isare

aP8 aP$$ aP9@ aP2C aP' aP8

Operatori relaionali binari Operator Sem'i?i*a1ie Exemple == <gal cu aPPb != )i(erit de aWPb < Iai mic dec/t aEb <= Iai mic sau egal aEPb > Iai mare dec/t aFb >= Iai mare sau egal aFPb Primii doi operatori mai sunt numi0i operatori de egalitate Operatorii rela0ionali ser"esc la compararea "alorilor celor doi operanzi i nu modi(ic "alorile operanzilor *ezultatul unei e2presii #n care apare unul din operatorii rela0ionali binari este #ntreg i are "aloarea zero 1'3 dac rela0ia este (als, sau "aloarea unu 1$3 1sau di(erit de ' #n cazul compilatoarelor sub U:IN3, dac rela0ia este ade"rat Aceti operatorii pot (i aplica0i datelor de tip #ntreg, real sau c+ar *egulile de preceden0 i asociati"itate ale acestor operatori sunt prezentate #n tabelul 2 C Tabelul 2 C las. $e operatori Unari Iultiplicati"i Aditi"i Atribuire *ela0ionali )e egalitate Atribuire i aritmetici binari Operatori 9 1unar3 !! 99 ? > X ! 9 P E EP F FP PP WP P ?P >P XP !P 9P Aso*iati3itate de la dreapta la st/nga de la st/nga la dreapta de la st/nga la dreapta de la dreapta la st/nga de la st/nga la dreapta de la st/nga la dreapta de la dreapta la st/nga

bservaie: )eosebirea dintre operatorii == 1rela0ional, de egalitate3 i = 1de atribuire3 const #n (aptul c primul nu modi(ic "aloarea nici unuia dintre operanzii si, pe c/nd cel de9al doilea modi(ic "aloarea operandului st/ng 1"ezi e2emplul urmtor3 Exerciiu: ; se scrie urmtorul program i s se urmreasc rezultatele e2ecu0iei acestuia
#include <iostream.h> void main() { int a<.% b<B3% lim<.33; int re>ult; re>ult<a<b; cout<<a<b<<<re>ult<<O"nO;

>> A(iareB aEbP$ 1sau o alt "aloare di(erit de zero pentru alte compilatoare3
re>ult<a<<b;

>>operatorul real0ional EP are prioritate mai mare dec/t cel de atribuire


8C

CAPITOLUL 2 cout<<a<<b<<<re>ult<<O"nO;

Date, operatori i expresii

>> A(isareB aEbP$ 1sau o alta "aloare di(erit de zero pentru alte compilatoare3 re>ult<a>b; cout<<a>b<<<re>ult<<O"nO; >> A(iareB aEbP'
re>ult<a!.3><lim; cout<<a!.3><lim<<<re>ult<<O"nO;

>? Operatorul ! are prioritate mai mare dec/t operatorul FP


re>ult<a!(.3><lim);

A(iareB a!$'FPlimP' ?>

cout<<a!(.3><lim)<<<re>ult<<O"nO;

>? ;c+imbarea prioritatii operatorilor prin (olosirea parantezelor4 A(iareB a!1$'FPlim3P$ ?>
re>ult<a<<b; cout<<a<<b<<<re>ult<<O"nO; >> A(iareB aPPbP' cout<<a<<<a<<O"nO; >> A(iareB aP$ cout<<b<<<b<<O"nO; >> A(iareB bP2' re>ult<a<b; cout<<a<b<<<re>ult<<O"nO; >> A(iareB aPbP2' cout<<a<<<a<<O"nO; >> A(iareB aP2' cout<<b<<<b<<O"nO; >> A(iareB bP2' re>ult<M>b>.3;cout<<b<<<b<<O"nO; >> A(iareB bP2' cout<<M>b>.3<<<re>ult<<O"nO; >><c+i"alent cu 1@Fb3F$' A(iareB @FbF$'P' }

Operatori lo!ici pe cuv"nt Operator Sem'i?i*a1ie Exemple ! :ot 1'e%a1ie logic3 W1aPPb3 && And 1conjunc0ie, i logic3 AaFb3 ,, 1bFc3 || Or Adisjunc0ie, sa# logic3 AaFb3 YY 1bFc3 Aceti operatori pot (i aplica0i datelor de tip #ntreg, real sau caracter <"aluarea unei e2presii #n care inter"in operatorii logici se (ace con(orm tabelului 2 @

Tabelul 2 @ x F Gx xHHF xIIF ade"rat 1$3 ade"rat 1$3 (als 1'3 ade"rat 1$3 ade"rat 1$3 ade"rat 1$3 (als 1'3 (als 1'3 (als 1'3 ade"rat 1$3 (als 1'3 ade"rat 1$3 ade"rat 1$3 (als 1'3 ade"rat 1$3 (als 1'3 (als 1'3 ade"rat 1$3 (als 1'3 (als 1'3 <2presia ;e8presie are "aloarea ' 1(als3 dac e2presia9operand are o "aloare di(erit de zero i "aloarea unu 1ade"rat3 dac e2presia9operand are "aloarea zero <2presia e8presie.YYe8presieB are "aloarea di(erit de ' 1true3 dac =I< e2presie$, =I< e2presie2 au "alori di(erite de zero <2presia e8presie. ZZ e8presieB are "aloarea di(erit de ' 1true3 dac AI-<L< e2presii9 operand 1 e2presie$ i e2presie23 au "alori di(erite de zero Exerciiu: ; se scrie urmtorul program i s se urmreasc rezultatele e2ecu0iei acestuia
#include <iostream.h> void main() { int a<3% b<.3% c<.33% d<B33; int re>ult; re>ult<aZZb; cout<<aZZb<<<re>ult<<O"nO; >>A(iare a,,bP' re>ult<aYYb; cout<<aYYb<<<re>ult<<O"nO;>>A(iare aYYbP$ 1sau "aloare nenula3 re>ult<;a;cout<<;a<<<re>ult<<O"nO; >>A(iare WaP$ 1sau "aloare nenula3 re>ult<;b; cout<<;b<<<re>ult<<O"nO; >>A(iare WbP' re>ult<(a>b) YY (b>c);cout<<(a>b) YY (b>c)<<<re>ult<<O"nO;

>>A(iare 1aFb3 YY 1bFc3 P$1sau "aloare nenula3


re>ult<;(c<d);cout<<;(c<d)<<<re>ult<<O"nO;>>A(iare W1cFd3P' re>ult<(a9b)ZZ.;cout<<(a9b)ZZ.<<<re>ult<<O"nO;

>>A(iare 1a9b3,,$ P$1sau "aloare nenula3


re>ult<dYYbZZa;cout<<dYYbZZa<<<re>ult<<O"nO;>>A(iare dYYb,,a P$ }>> 7n e"aluarea e2presiilor din e2emplu, s9au aplicat priorit0ile operatorilor, indicate #n tabelul 2 A

Tabelul 2 A

8@

CAPITOLUL 2

Date, operatori i expresii

las. $e operatori Unari Iultiplicati"i Aditi"i Atribuire rela0ionali de egalitate logici logici atribuire i aritmetici binari

Operatori W 9 1unar3 !! 99 ? > X ! 9 P E EP F FP PP WP ,, YY P ?P >P XP !P 9P

Aso*iati3itate de la dreapta la st/nga de la st/nga la dreapta de la st/nga la dreapta de la dreapta la st/nga de la st/nga la dreapta de la st/nga la dreapta de la st/nga la dreapta de la st/nga la dreapta de la dreapta la st/nga

Exerciiu: ; se scrie un program care citete un numr real i a(ieaz $ dac numrul citit apar0ine unui inter"al ale crui limite sunt introduse tot de la tastatur, sau ' #n caz contrar
#include <iostream.h> void main() { double lmin% lma8% nr;cout<<&4umar<&;cin>>nr; cout<<1imita in)erioar? a intervalului(; cin>>lmin; cout<<1imita superioar? a intervalului(; cin>>lma8; cout<<(nr><lmin ZZ nr<<lma8); }

Operatori lo!ici pe bit Operator Sem'i?i*a1ie ~ :ega0ie 1cod complementar (a0 de unu3 & A:) 1Conjunc0ie, i logic pe bit | O* A)isjunc0ie, sau logic pe bit3 ^ NO* 1;au e2clusi" logic pe bit3 << )eplasare st/nga >> )eplasare dreapta

Exemple [a a , '8&& a I '8&& aZb '8&& EE 2 '8&& FF 2

Aceti operatori nu se aplic numerelor reale, ci numai datelor de tip #ntreg sau caracter Primul operator este unar, ceilal0i binari Operatorii ac0ioneaz la ni"el de bit, la ni"elul reprezentrii interne 1#n binar3, con(orm tabelelului 2 & Tabelul 2 & x $ $ ' ' F $ ' $ ' xHF $ ' ' ' xIF $ $ $ ' xJF ' $ $ ' Kx ' ' $ $

Operatorul K are aceeai prioritate ca i ceilal0i operatori unari <l (urnizeaz complementul (a0 de unu al unui #ntreg, adic "a sc+imba (iecare bit de pe $ #n zero i in"ers Operatorii de deplasare pe bit 1 << i >>3 e(ectueaz deplasarea la st/nga sau la dreapta a operandului st/ng, cu numrul de bi0i indica0i de operandul drept Ast(el, 2EE2 deplaseaz bi0ii din 2 la st/nga, cu dou pozi0ii, introduc/nd zero pe pozi0iile rmase "acante Exemple: int a<A; >>*eprezentare intern a lui a 1pe 2 octe0i3B '''''''''''''L11 int b<M; >>*eprezentare intern a lui b 1pe 2 octe0i3B '''''''''''''1L1
int re><[a; cout<<&[&<<a<<=<=<<re><<="n=; >>[8P 9C

>>Complementul (a0 de unu esteB $$$$$$$$$$$$$1LL 1#n octalB '$&&&&&&&C 1WaP 9 C3 re><a Z b; cout<<a<<=Z=<<b<<=<=<<re><<="n=; >>8,@P$ >>a,bP'''''''''''''LL1 P$ re><a\b; cout<<a<<=\=<<b<<=<=<<re>; >> 8Z@P A
8A

CAPITOLUL 2

Date, operatori i expresii

>>a Zb P '''''''''''''11L
re><aYb; cout<<a<<=Y=<<b<<=<=<<re>;

>>8Y@P & >>8EE2P$AP2?2 8 >>@FF2P$P@>2 2

>>a Y b P '''''''''''''111
re><a<<B; cout<<a<<&<<&<<A<<=<=<<re>;

>>aEE2P '''''''''11LLLLL
re><M>>B; cout<<b<<&>>&<<B<<=<=<<re>;

>>bFF2P '''''''''''''LL1 Operatorul binar Z #i gsete o utilizare tipic #n e2presii caB 8Z\3CC, care masc+eaz ultimii A bi0i ai lui 2 pe zero Operatorul , este adesea utilizat #n e2presii ca 2 Z3.CC, unde seteaz to0i bi0ii pe zero, cu e2cep0ia celor de ordin in(erior din 2 Operatorul Y este utilizat #n e2presii caB 8ZF02] , unde seteaz pe unu bi0ii care #n 2 i masca IA;\ sunt seta0i pe unu Operatorii logici pe bit , i Y sunt di(eri0i de operatorii logici ,, i YY 1pe cu"/nt3 )eplasarea la st/nga a unei date cu n pozi0ii este ec+i"alent cu #nmul0irea "alorii acesteia cu 2 n )eplasarea la dreapta a unei date (r semn cu n pozi0ii este ec+i"alent cu #mpr0irea "alorii acesteia cu 2 n Combin/nd operatorii logici pe bit cu operatorul de atribuire, se ob0in operatoriiB &=% ^=% |=% <<=% >>=. Operatorul condiional <ste un operator ternar 1necesit 8 operanzi3, utilizat #n construc0ii de (ormaB e8presie.?e8presieB:e8presieA

;e e"alueaz e$presia )ac aceasta are o "aloare di(erit de zero, atunci tipul i "aloarea #ntregii e2presii "or (i aceleai cu tipul i "aloarea e$presiei2 Alt(el 1dac e2presie$ are "aloarea zero3, tipul i "aloarea #ntregii e2presii "or (i aceleai cu tipul i "aloarea e$presiei, )eci operatorul condi0ional este (olosit pentru a atribui #ntregii e2presii tipul i "aloarea e2presiei2 sau a e2presiei8, #n (unc0ie de o anumit condi0ie Acest lucru este ec+i"alent cuB )ac e$presie di(erit de zero Atunci e"alueaz e$presie2 Alt(el e"alueaz e$presie, Exemplu:
int semn<(8<3)^9.(.

)ac 8<3% atunci semn<9.% alt(el semn<.. Operatorul vir!ul <ste utilizat #n construc0ii de (ormaB e8presie. % e8presieB Operatorul "irgul (or0eaz e"aluarea unei e2presii de la st/nga la dreapta Tipul i "aloarea #ntregii e2presii este dat de tipul i "aloarea e2presiei2 Operatorul "irgul este (olosit #n instruc0iunea for Operatorul "irgul are cea mai mic prioritate Exemplu:

int 8% c% V; cout<<0stept val. ptr. V(; cin>>V; 8<(c<V% c<<M); >? c "a primi "aloarea lui O 1citit34 se "eri(ic dac c este mai mic sau 8!!% V99;

egal cu @ )aca nu, 2P'4 daca da, 2P$ sau 2P"aloare di(erit de zero3?> >>#nt/i este incrementat 2, apoi este decrementat O

Operatorul sizeof() <ste un operator unar, care are ca rezultat numrul de octe0i pe care este memorat o dat de un anumit tip Operandul este un tip sau o dat )constant sau variabil* de un anumit tip Exemple: cout<<si>eo)(int); >> a(ieaz numrul de octe0i pe care este memorat un #ntreg 123 cout<<si>eo)(abD$);>> a(ieaz @, nr de octe0i pe care este memorat constanta ir .abA?.

8&

CAPITOLUL 2

Date, operatori i expresii

Operatorul (tip) <ste un operator unar care apare #n construc0ii numite .cast. i con"ertete tipul operandului s u la tipul speci(icat #ntre paranteze Exemple: int a; ()loat) a; >> con"ertete operandul a 1care era de tip #ntreg3 #n (loat 7n a(ara operatorilor prezenta0i, e2ist i al0ii, pe care #i "om enumera #n continuare )espre aceti operatori "om discuta #n capitolele "iitoare, c/nd cunotin0ele acumulate "or permite acest lucru Operatorul unar * <ste operator unar, numit i operator de defereniere. ;e aplic unei e2presii de tip pointer i este (olosit pentru a accesa con0inutul unei zone de memorie spre care pointeaz operatorul Operatorii , 1adres3 i ? sunt complementari Exemplu: <2presia ?a este #nlocuit cu "aloarea de la adresa con0inut #n "ariabila pointer a

Operatorii parante# Parantezele rotunde ! se utilizeaz #n e2presii, pentru sc+imbarea ordinii de e(ectuare a opera0iilor, sau la apelul (unc0iilor La apelul (unc0iilor, parantezele rotunde #ncadreaz lista parametrilor e(ecti"i )in acest moti", parantezele rotunde sunt numite i operatori de apel de funcie. Exemplu:

double sum double a% double b!;

>?declar (unc0iei sum, care primete 2 argumente reale1double3 i returneaz o "aloare tip double ?>
void main() { . . . double a<sum EN.N% MD.D!; >>apelul (unc0iei sum, cu parametri e(ecti"i 6% % i @A A int s3<D; double s.< s3!N!#a; >>(olosirea parantezelor #n e2presii . . . }

Operatorii de indexare Operatorii de inde2are sunt parantezele ptrate "# Acestea includ e2presii #ntregi care reprezint indici ai unui tablou Operatori de acces la membri structurilor Operatorii ::, ., ->, .M i ->* permit accesul la componentele unei structuri <i "or (i studia0i #n capitolul &

7n tabelul 2 6 sunt prezenta0i to0i operatorii, grupa0i pe categorii, cu priorit0ile lor i regulile de asociati"itate Operatorii dintr9o categorie au aceeai prioritate Tabelul 2 6 :r las. $e operatori $ Primari 2 Unari 8 C @ A & 6 % $' Iultiplicati"i Aditi"i )eplasare pe bit *ela0ionali )e egalitate Operatori ! "# . -> :: ! ~ ++ -- si$eo% ti&! -1unar3 *1de(eren0iere3 &1re(eren0iere3 * / ' + << >> < <= > >= == != & 1TI logic pe bit3 ^ 1NO* pe bit3 | 1;AU logic pe bit3
86

Aso*iati3itate de la st/nga la dreapta de la st/nga la dreapta de la st/nga la dreapta de la st/nga la dreapta de la st/nga la dreapta de la st/nga la dreapta de la st/nga la dreapta de la st/nga la dreapta de la st/nga la dreapta de la st/nga la dreapta

CAPITOLUL 2

Date, operatori i expresii

$$ $2 $8 $C $@

Condi0ional )e atribuire Mirgul

= &=

+= ^=

&& || ?: -= *= |= <<= (

'= >>=

de la st/nga la dreapta de la st/nga la dreapta de la dreapta la st/nga de la dreapta la st/nga de la st/nga la dreapta

2./.2. EXPRESII Prin combinarea operanzilor i a operatorilor se ob0in expresii Tipul unei e2presii este dat de tipul rezultatului ob0inut #n urma e"alurii acesteia La e"aluarea unei e2presii se aplic regulile de prioritate i asociati"itate a operatorilor din e2presie Ordinea de aplicare a operatorilor poate (i sc+imbat prin (olosirea parantezelor La alctuirea e2presiilor, este indicat e"itarea e2presiilor #n care un operand apare de mai multe ori 2./.). O9+ERSII DE TIP La e"aluarea e2presiilor, se realizeaz con"ersii ale tipului operanzilor Con"ersiile suntB Automate4 Cerute de e"aluarea e2presiilor4 Cerute de programator 1prin construc0iile cast3, e2plicite Conversiile automate sunt realizate de ctre compilatorB char( short int -> int <le sunt realizate de (iecare dat c/nd #ntr9o e2presie apar operanzi de tipul c+ar sau s+ort int Conversiile cerute de evaluarea expresiilor sunt e(ectuate #n cazurile #n care #n e2presii apar operanzi de tipuri di(erite 7naintea aplicrii operatorilor, se realizeaz con"ersia unuia sau a ambilor operanziB )ac un operand este de tip long int, cellalt este con"ertit la acelai tip4 tipul e2presiei este long int )ac un operand este de tipul double, cellalt este con"ertit la acelai tip4 tipul e2presiei este double )ac un operand este de tipul )loat, cellalt este con"ertit la acelai tip4 tipul e2presiei este (loat Conversiile explicite $cerute de pro!ramator% se realizeaz cu ajutorul construc0iilor cast Exemplu:
int 8<A; )loat V; V<(float)8#B;

7nainte de a se e(ectua #mpr0irea celor 2 operanzi, operandul 2 1#ntreg3 este con"ertit #n numr real simpl precizie )up atribuire, "aloarea lui O "a (i $ @ )ac nu ar (i (ost (olosit operatorul de con"ersie #n e2presia OP2 > 2, operanzii 2 i 2 (iind #ntregi, rezultatul #mpr0irii este #ntreg, deci O ar (i a"ut "aloarea $

89TRE5>RI I EXER I<II @esti#'i teoreti*e


$ 2 Ce reprezint datele i care sunt atributele lor] Care sunt di(eren0ele #ntre constante i "ariabile] 8 Cine determin tipul unei constante] C Ce sunt identi(icatorii] @ Ce sunt directi"ele preprocesor] A Ce reprezinta "ariabilele] & Ce sunt constantele] 6 <numera0i tipurile simple de "ariabile % C/te tipuri de directi"e preprocesor cunoaste0i] <2emple $' Care este modalitatea de a interzice modi(icarea "alorii unei "ariabile] $$ Ce loc ocup declararea "aribilelor #n cadrul unui program surs scris #n limbajul C!!] $2 Ce con0in (iierele +eader] $8 Ce tipuri de "ariabile se utilizeaz pentru datele numerice] $C Care sunt cali(icatorii (olosi0i alturi de tipurile de baz pentru ob0inerea tipurilor deri"ate de date] $@ Ce semni(ic parantezele ung+iulare E F care #ncadreaz numele unui (iier +eader] $A Care este di(eren0a #ntre constantele 8@ 2e9$ i 8 @2 ] )ar #ntre HUtH i SUtS] $& Ce tip are constanta A CC ] $6 Care este di(eren0a #ntre operatorii P i P P ] $% Ce reprezint caracterele HescapeH] 2' Constante #ntregi 2$ Constante caracter 22 Ce tipuri de con"ersii cunoate0i] 28 Care sunt con"ersiile realizate #n mod automat, de ctre compilator]
8%

CAPITOLUL 2

Date, operatori i expresii

2C 2@ 2A 2&

Constante ir de caractere Constante reale Ce operatori ternari cunoaste0i] Operatorul "irgul

26 2% 8' 8$

Operatorul sizeo( Operatori aritmetici binari compui Operatorul de re(eren0iere Operatori rela0ionali binari

@esti#'i apli*ati3e $ 2 ; se scrie declara0iile pentru de(inirea constantelor simboliceB pi, g 1accelera0ia gra"ita0ional3, ung+i^drept, dimensiune^IAN Care "a (i rezultatul a(iat pe ecran #n urma e2ecu0iei urmtoarelor sec"en0e de instruc0iuniB

double a<N#B; cout<<a$M<<O"nO; double a<N.C% b<M.D; cout<<(a!D<b)<<O"nO; double a<N#L; cout<<a$D<<O"nO; double 8<A;int V<!!8!M;cout<<V<<O"nO; int a<C; cout<<(;a)<<O"nO; int a<.3.M; cout<<a!!<<O"nO; cout<<a<<O"nO; int a<C; cout<<!!a<<O"nO; cout<<a<<O"nO; int a<.3; cout<<a!!<<O"nO; cout<<a<<O"nO;

double aP&>24 coutEEaEE5Un54 int 2P84 int OP2!!924 coutEEOEE5Un54


int 8<A; int V<!!8!M; cout<<V<<O"nO; double a<M.D% b<C.LM; cout<<(a>b)<<O"nO; double a<N.C% b<M.B; int c<(a!D<b)!!; cout<<c<<O"nO; double a<C#M; double c<a$M!!; cout<<c<<O"nO; double a<N.C% b<M.D; int c<(aXD<b)!!; cout<<c<<O"nO; double a<M.D% b<C.LM; cout<<!!(a!M>b)<<O"nO; double a<N.E; double b<N.C; cout<<aXb<<O"nO; cout<<Z(a!E)<<="n=; int 6<E; cout<<(6!.3)!!<<="n=; double a<E.C; 0<(a!E)#MD; cout<<0<<="n=; int 8<A#M; int V<8!!; char 8<=_=; cout<<&V<&<<V<<="n=; char a<=G=; const int b<EN; b!<E; cout<<&b<&<<b<<& a<&<<a<<="n=;

; se "eri(ice corectitudinea urmtoarelor sec"en0e Pentru cele incorecte, e2plica0i sursa erorilor

; se scrie un program care a(ieaz urmtoarele mesajeB ;irul Heste dupa9amiazaH este memorat pe octeti O marime intreaga este memorata pe octeti O marime reala, in simpla precizie este memorata pe octetiW O marime reala, in dubla precizie este memorata pe bOtiW Constanta caracter S_S memorata pe octetiW ;irul HaUnUnH este memorat pe octeiW ;irul HUnH este memorat pe bitiW Caracterul SUS este memorat pe biti ; se e"alueze e2presiile, tiind cB int i<.;int j<B;int U<9C;double 8<3;double V<B.A;

9i 9 M $ j >< U ! . A < j < M i ! j ! U << 9B $ j 8 ZZ i YY j 9 A

Ce opera0ie logic i ce masc trebuie s (olosi0i pentru a con"erti codurile A;CII ale literelor mici #n litere mari] )ar pentru con"ersia in"ers] & O deplasare la dreapta cu 8 bi0i este ec+i"alent cu o rota0ie la st/nga cu c/0i bi0i] 6 ; se seteze pe $ to0i bi0ii dintr9un octet, cu e2cep0ia bitului cel mai semni(icati" % ; se scrie un program care citete o "aloare #ntreag ; se a(ieze un mesaj care s indice dac numrul citit este par sau impar $' ; se citeasca dou "alori #ntregi ; se calculeze i s se a(ieze restul #mpr0irii celor dou numere

C'