Documente Academic
Documente Profesional
Documente Cultură
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
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
2'
CAPITOLUL 2
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 ;
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
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
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
CAPITOLUL 2
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
CAPITOLUL 2
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
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.
)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
>>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
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
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
)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
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
CAPITOLUL 2
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
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'
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:
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
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:
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
>>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
82
CAPITOLUL 2
+ * / 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
>> 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
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; }
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;
CAPITOLUL 2 cout<<a<<b<<<re>ult<<O"nO;
>> 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;
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;
Tabelul 2 A
8@
CAPITOLUL 2
las. $e operatori Unari Iultiplicati"i Aditi"i Atribuire rela0ionali de egalitate logici logici atribuire i aritmetici binari
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
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
>>a Zb P '''''''''''''11L
re><aYb; cout<<a<<=Y=<<b<<=<=<<re>;
>>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
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:
>?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
$$ $2 $8 $C $@
= &=
+= ^=
&& || ?: -= *= |= <<= (
'= >>=
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 $
CAPITOLUL 2
2C 2@ 2A 2&
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;
; 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;
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'