Sunteți pe pagina 1din 7

ELEMENTE DE BAZ LIMBAJULUI DE PROGRAMARE C / C++

1. Vocabularul l!ba"ulu
1.1. #$%ul &$ carac%$r$
Setul de caractere al limbajului C / C++ conine:
litere ( mari i mici ale alfabetului englez; C / C++ este case-sensitive
cifre arabe ( de la ! la "
caractere s#eciale ( + $ / % & ' ( ( ) * + , - . : ; / 0 1 2 i s#aiu
simboluri negrafice ( /n newline. /t tab. /b backspace. /r carriage return
1.'. #$(ara%or ) co!$*%ar
3ntre oricare dou4 unit4i le5icale admise de limbaj #ot e5ista unul sau mai muli se#aratori:
s#aiul. caracterul ; i caracterul de sf6rit de linie- 7u este #ermis4 #rezena se#aratorilor 8n
interiorul identificatorilor. numerelor sau simbolurilor s#eciale-
9entru o mai uoar4 8nelegere a unui #rogram este #ermis4 folosirea comentariilor- :le #ot
a#are oriunde 8n #rogram ( nu 8n identificatori i numere . 8ncadrate de caracterele /$ $/- ;e5tul
comentat este ignorat 8n faza de com#ilare a #rogramului- 9ot a#are comentarii care 8nce# cu //. cu
condiia s4 se termine #e r6ndul #e care au 8nce#ut-
'. Co*+%a*%$. I&$*%,ca%or
Constantele sunt o categorie de date cu care lucreaz4 un #rogram. care nu 8i #ot modifica
valoarea 8n tim#ul e5ecuiei #rogramului- Se folosesc 8n calculul unor e5#resii sau 8n interiorul unor
mesaje de afiat-
'.1. Co*+%a*%$ -*%r$.
Cores#und mulimii numerelor 8ntregi ce #ot fi re#rezentate 8n memoria calculatorului- 9ot
fi scrise 8n baza <!. = sau 8n baza <>-
:5em#lu: ?? constant4 8n baza <!
!?? constant4 8n baza = ( se #reced de caracterul !
!5?@ constant4 8n baza <> ( se #reced de caracterele !5
'.'. Co*+%a*%$ r$al$
Cores#und unei submulimi a mulimii numerelor reale- 9ot a#are 8n notaie zecimalA
( ?-BC. =-C sau e5#onenialA ( ?-@eC. C.BC:D -
'./. Co*+%a*%$ )r &$ carac%$r$
Ee#rezint4 o succesiune de caractere. inclus4 8ntre gFilimele ( GalfaG - Caracterele irului se
#4streaz4 8ntr-o zon4 contigu4 de memorie. #rin codurile lor HSCII- Ju#4 ultimul caracter se
#4streaz4 caracterul 7KLL ( cu valoarea ! . care re#rezint4 marcajul de sf6rit de ir-
'.0. Co*+%a*%$ +!bolc$
Sunt constante care au asociat un nume 8n #rogram- 9ot fi orice ir de caractere. introdus
#rin construcia #define-
:5em#lu: /define ma5 B /define min <!!
Kn identificator este o succesiune de litere. cifre sau caracterul 2 ( #rimul caracter al
identificatorului trebuie s4 fie o liter4 sau caracterul 2 . #rin care se asociaz4 nume constantelor.
ti#urilor. variabilelor i funciilor- Lungimea unui identificator nu este limitat4. varianta de
im#lementare a limbajului im#un6nd num4rul de caractere semnificative-
:5em#lu: a<. n. 2alfa. a?D ( corecte aMb. ?a. a+b ( incorecte
N categorie s#ecial4 de identificatori o constituie cuvintele cFeie ale limbajului ( case,
const, else, if, for, while etc . care nu #ot fi redefinite de utilizator. fiind utilizate doar 8n sco#ul 8n
care au fost definite 8n limbaj-
/. No1u*$a &$ %( &$ &a%2. O($ra%or ar%!$%c3 lo.c3 r$la1o*al
9rin ti# de dat4 se 8nelege mulimea valorilor #e care le #oate avea o dat4 ( constant4 sau
variabil4 - ;i#ul restricioneaz4 funciile i o#eratorii ce se #ot a#lica datelor de ti#ul res#ectiv-
Limbajul C lucreaz4 cu ti#uri de date standard i utilizator ( clasificare d-#-d-v- al modului de
definire i cu ti#uri de date sim#le i structurate ( clasificare d-#-d-v- al com#unerii datelor -
/.1. T(ur &$ &a%$ +%a*&ar&
T(url$ -*%r$. de date #ermit re#rezentarea. memorarea i #relucrarea numerelor 8ntregi-
7umerele 8ntregi se scriu ca o secven4 de cifre zecimale. #recedat4 eventual de semnul ( e5: <?>.
>D=? - 3n limbajul C este #redefinit ti#ul 8ntreg *% ( re#rezint4 8ntregi cu semn #e ? octei.
valoarea ma5im4 admis4 ?
<C
< % D?B>B -
;i#ul int #oate fi modificat folosind Gmodificatori de ti#G signed. unsigned. sFort i long.
rezult6nd ti#urile :
+4or% *% ( 8ntregi cu semn. se re#rezint4 #e ? octei
+.*$& +4or% *% ( 8ntregi cu semn. se re#rezint4 #e ? octei
u*+.*$& *% ( 8ntregi f4r4 semn. se re#rezint4 #e ? octei. valoarea ma5im4 admis4 este ?
<>
< %
>CCDC
u*+.*$& +4or% *% ( 8ntregi f4r4 semn. se re#rezint4 #e ? octei
lo*. *% ( 8ntregi cu semn. se re#rezint4 #e @ octei. valoarea ma5im4 admis4 este ?
D<
<
+.*$& lo*. *% ( 8ntregi cu semn. se re#rezint4 #e @ octei
u*+.*$& lo*. *% ( 8ntregi f4r4 semn. se re#rezint4 #e @ octei. valoarea ma5im4 admis4 este
?
D?
< -
N#eratorii ce #ot fi folosii 8m#reun4 cu date de ti# 8ntreg sunt:
1. ar%!$%c5 + . . $ . / . O ( restul 8m#4ririi a dou4 numere 8ntregi
'- r$la1o*al5 ' . ( . P% ( diferit . % % ( egal . '% . (%
/. &$ a%rbur$5 %
0. &$ *cr$!$*%ar$ / &$cr$!$*%ar$5 ++ . ( i % i + < i ++ i + % <
6. lo.c5 P ( not . QQ ( or . MM ( and
7. lo.c ($ b15 R ( com#lement fa4 de < . '' ( de#lasare la st6nga; o< '' o? % o< $ ?
o?
.
(( ( de#lasare la drea#ta; o< (( o? % o< div ?
o?
. M ( and . Q ( or . & ( 5or
Cu e5ce#ia o#eratorului P. ceilali o#eratori logici sunt binari- Se a#lic4 8n forma o<
o#erator o?-
N#eratorii Q. M i & funcioneaz4 conform urm4toarelor regului:
Q ! < M ! < & ! <
! ! < ! ! ! ! ! <
< < < < ! < < < !
T(url$ r$al$ de date se folosesc #entru re#rezentarea unei submulimi a numerelor
raionale. ce sunt a#ro5imaii ale numerelor reale- Ee#rezentarea numerelor reale este limitat4 8n
calculator #rin m4rime i #recizie- 7umerele reale #ot fi scrise 8n notaie zecimal4 ( D->B sau
tiinific4 ( e5#onenial4 De!C -
;i#uri reale 8n C sunt:
1- ,loa% re#rezentat #e > octei
'. &oubl$ re#rezentat #e = octei
Sodificatorul long se #oate a#lica ti#ului double- Jatele de ti# lo*. &oubl$ se re#rezint4 #e
<! octei-
N#eratorii ce se #ot a#lica datelor de ti# real sunt:
1. ar%!$%c5 . + . $ . /
'. r$la1o*al5 ' . ( . P% ( diferit . % % ( egal . '% . (%
T(ul c4ar #ermite re#rezentarea mulimii caracterelor- Kn caracter se re#rezint4 #e < octet-
La un moment dat o dat4 de ti# caracter conine codul HSCII al unui caracter sau un 8ntreg 8n sine-
9entru atribuirea unei valori unei variabile de ti# cFar se #ot folosi constante 8ntregi sau constante
de ti# caracter ( e5em#lu: c % THT sau c % >C -
N#eratorii ce se #ot a#lica datelor de ti# cFar sunt:
1. r$la1o*al ( ordonarea e dat4 de codurile HSCII ale caracterelor U!V'U"V'UHV'UWV'UaV'UzV
'. ar%!$%c + .
T(ul 8o& are 8n funcie de conte5t semnificaia GnimicG sau GoriceG- :l #ermite construcia
ti#urilor generice ( liste cu orice ti# de informaie. arbori etc - Je e5em#lu: int f ( void este antetul
unei funcii f4r4 #arametrii; void f ( este antetul unei funcii care nu returneaz4 nici un rezultat-
0. D$,*r$a %(urlor &$ &a%$
Jefinirea ti#urilor se face 8n C++ #rintr-o declaraie de forma
%9($&$, : &$+cr$r$;%( < : *u!$ < =
N declaraie de ti# definete de fa#t mulimea valorilor #e care le #oate lua o variabilA de ti#ul
res#ectiv- Kn ti# de datA #oate fi definit #e baza unui ti# standard sau utilizator. definit 8nainte-
:5em#lu : #include<iostream>
using namespace std;
typedef unsigned int natural;
int main()
{ int x;
natural y;
cin>>x>>y;
cout<<x+y;
return 0; }
6. Varabl$. D$clarar$a 8arabl$lor
Xariabilele sunt o categorie de date a c4ror valoare se #oate modifica #e #arcursul e5ecuiei
unui #rogram-
Yiecare variabil4 are asociat un identificator. #rin intermediul c4ruia i se #oate modifica
valoarea- Hsocierea identificatorului se face 8ntr-o declaraie. care are forma general4
%( &$*%,ca%or=
La declarare. identificatorii variabilelor de acelai ti# se se#ar4 #rin virgul4-
tip #oate fi un identificator de ti# definit anterior sau un identificator de ti# standard-
Jeclaraia stabilete ti#ul variabilei- :l nu #oate fi modificat #rin #rogram i definete
mulimea valorilor #e care le #oate lua variabila. o#eratorii ce i se #ot a#lica etc- Je ti#ul variabilei
de#inde dimensiunea zonei de memorie care se aloc4 variabilei la com#ilarea #rogramului-
La un moment dat o variabil4 conine o singur4 valoare- Sodificarea acestei valori se #oate
face #rintr-o citire sau #rintr-o atribuire- Xaloarea r4m6ne nemodificat4 at6t tim# c6t #rogramul nu
acioneaz4 asu#ra variabilei sau #6n4 c6nd variabila res#ectiv4 este desfiinat4 ( se 8ncFeie e5ecuia
blocului de #rogram 8n care a fost declarat4 variabila -
3nainte de utilizare toate variabilele trebuie s4 fie declarate. #entru a le s#ecifica ti#ul i
numele i #entru a le rezerva s#aiul de memorie necesar memor4rii valorilor lor- Hbaterea de la
aceast4 regul4 #roduce erori la com#ilare-
:5em#lu : int i,j;
float x,y,;
c!ar a,";
7. D$,*r$a co*+%a*%$lor
Constantele sunt o categorie de date a c4ror valoare nu se #oate modifica #e #arcursul
e5ecuiei unui #rogram- Yiecare constant4 are asociat un identificator i o valoare-
Jefinirea unei constante se face res#ect6nd sinta5a :
>&$,*$ &$*%,ca%or 8aloar$
H#ariia 8n #rogram a identificatorului unei constante este ecFivalent4 cu a#ariia valorii ei-
Eeci#roca nu este adev4rat4-
:5em#lu : #define a #
?. #%ruc%ura (ro.ra!$lor
Kn #rogram C++ este alc4tuit din una sau mai multe funcii. din care una este #rinci#al4-
Yuncia #rinci#al4 nu #oate li#si i e5ecuia #rogramului 8nce#e automat cu ea- Hceasta se numete
!a*- Kn #rogram C++ #oate conine : seciune de declaraii ( o#ional4 ;
seciune de #rogram ( obligatorie -
Seciunea de declaraii este structurat4 astfel :
definiii de constante constante globale ;
definiii de ti#uri ti#uri globale ;
declaraii de variabile variabile globale ;
declaraii funcii ( sub#rograme -
Seciunea de #rogram funcia !a* cu#rinde :
definiii de constante locale ;
definiii de ti#uri locale ;
declaraii de variabile locale ;
instruciunile e5ecutabile ale #rogramului-
@. EA(r$+
Conin o#eranzi ( variabile. constante. funcii i o#eratori. gru#ai du#4 aceleai
reguli ca 8n matematic4-
N e5#resie se evalueaz4 de la st6nga la drea#ta. in6nd cont de #rioritatea o#eratorilor-
9riorit4ile #ot fi modificate #rin folosirea #arantezelor- N#eratorii folosii 8n limbajul C / C++ au
urm4toarele #riorit4i:
<- + . . M . $ . ++ . . P . R ( o#eratori unari cel mai mare nivel de #rioritate
?- $ . / . O ( binari
D- + . ( binari
@- '' . ((
C- ' . '% . ( . (%
>- % % . P%
B- M ( binar
=- &
"- Q
<!- MM
<<- QQ
<?- Z . :
<D- % . ''% . ((% . +% . % . $% . /% . O% . M% . &% . Q%
B. C%r$a / +cr$r$a &a%$lor
3n varianta C++. #entru citirea / afiarea datelor se folosesc obiectele c*. cou%- Hceste
obiecte se iniializeaz4 #rin includerea fiierului o+%r$a!-
Ieirea standard se #oate face folosind o#eraturul ''-
:5em#lu : cout<<i ; afi$ea% &aloarea i
cout<<'(n'; afi$ea% ne)line
cout<<'i*'<<i<<'(n';
cout+)idt!(,);
cout<<i; afi$ea% &aloarea i pe un c-mp de lungime ,;
cout+precision(.);
cout<<i; afi$ea% i cu . ecimale;
Intrarea standard se #oate face folosind o#eraturul ((-
:5em#lu : cin>>i ; cite$te &aloarea i
cin>>a>>"; cite$te dou% &alori a $i "
c!ar &/0001;
cin>>t; cite$te $irul de caractere t;
1C. #TRUCTURI DE CONTROL
1C.1. #%ruc%ura l*arD= *+%ruc1u*$a &$ a%rbur$= *+%ruc1u*$a co!(u+D
Structura liniar4 cu#rinde o#eraii ce se e5ecut4 secvenial. 8n ordinea 8n care a#ar- Hceast4
structur4 este generat4 de instruciunile de atribuire sau com#use-
I*+%ruc1u*$a &$ a%rbur$ #ermite de#unerea unei valori 8ntr-o variabil4- Hre forma
v=expresie;
v este numele unei variabile- N#eratorul [%\ se numete o#erator de atribuire-
La e5ecuia unei instruciuni de atribuire se evalueaz4 e5#resia i variabila v #rimete
valoarea calculat4- S4rimile atribuite #ot fi de orice ti#. cu e5ce#ia ti#ului fiier-
I*+%ruc1u*$a co!(u+2 este format4 dintr-o list4 de instruciuni. se#arate #rin caracterul =
i cu#rins4 8ntre caracterele { i }- Instruciunile se e5ecut4 una du#a alta. 8n ordinea a#ariiei lor 8n
list4- N instruciune com#us4 #oate face #arte dintr-o alt4 instruciune com#us4. caz 8n care
#erecFile ) * se gru#eaz4 du#4 #rinci#iul #arantezelor din matematic4-
Caracterul = se#ar4 instruciunile. nu le termin4 i nici nu face #arte din ele-
I*+%ruc1u*$a 8&2 se re#rezint4 #rin caracterul ;- 7u are nici un efect- Se utilizeaz4 8n
construcii 8n care se cere #rezena unei instruciuni. dar nu trebuie s4 se e5ecute nimic 8n #unctul
res#ectiv- ( de e5em#lu. instruciunea for(#%]%s]rt(n; #$]P%n; #++.]%n/#; determin4 # i ] a-8-
#$]%n i #-]%minim -
1C.' #%ruc%ura al%$r*a%8D= *+%ruc1u*l$ IE ) #FITCG
Luarea unei decizii #rivind gru#ul de instruciuni ce va fi e5ecutat 8n continuarea unui
#rogram #oate fi f4cut4 #rin instruciuni condiionale-
I*+%ruc1u*$a IE #ermite selectarea unei variante de continuare a e5ecuiei unui #rogram
din dou4 alternative #osibile- Hre sinta5a:
if(expresie) instr
0
;
else instr
2
;
:5#resia trebuie s4 fie de ti# logic- Combinarea mai multor e5#resii se #oate face cu
o#eratorii logici MM. QQ. P-
Instruciunea se e5ecut4 astfel: se evalueaz4 e5#resia; dac4 valoarea ei este diferit4 de !
(adev4rat4. se e5ecut4 instr
<
. altfel se e5ecut4 instr
?
; se continu4 e5ecuia cu urm4toarea
instruciune din #rogram- instr
<
i instr
?
se e5clud reci#roc. ambele nefiind e5ecutate niciodat4-
instr
<
i instr
?
#ot fi orice instruciuni C. inclusiv IY- Jac4 una din ramurile instruciunii IY
conine mai multe alte instruciuni. ele se gru#eaz4 8ntr-o instruciune com#us4- 3n cazul 8n care
e5ist4 instruciuni IY imbricate. ultimul :LS: cores#unde celui mai a#ro#iat IY care nu are :LS:-
Hmbiguit4ile #ot fi eliminate folosind #erecFi ) *-
9oate a#are i 8n forma if(expresie) instr;
caz 8n care instruciunea are efect 8n #rogram doar dac4 e5#resia are valoarea diferit4 de !-
:5em#lu: determinarea ma5imului a D valori 5. ^. z-
if(x>*y)
if(x>*) max*x;
else max*;
else if(y>*) max*y;
else max*;
9entru testarea a n condiii c
<
. c
?
.--.c
n
care #rovoac4 e5ecuia instruciunilor i
<
. i
?
.--.i
n
. i din
care la un moment dat #oate fi adev4rat4 numai una. #entru creterea vitezei de e5ecuie a
#rogramului. 8n loc de
if(c
0
) i
0
;
if(c
2
) i
2
;
++++++++++++++++
if(c
n
) i
n
;
este mai avantajoas4 varianta if(c
0
)

i
0
;
else if (c
2
) i
2
;
else++++++++++++
else if (c
n
) i
n
;
caz 8n care nu mai sunt testate toate cele n condiii-
I*+%ruc1u*$a #FITCG #ermite selectarea ( 8n vederea e5ecuiei unei singure alternative
din mai multe #osibile- Hre sinta5a:
switch(expr)
{ case c
0
3 instr
0;
"rea4;
case c
2
3 instr
2
; "rea4;
+++++++++++
case c
n
3 instr
n
; "rea4;
/default3 instr
n+0
1
}
e5#r se numete e5#resie selector- ;rebuie s4 fie de ti# ordinal ( standard sau utilizator - c
i
se numesc constante ( eticFete CHS: i ele trebuie s4 fie toate de acelai ti# i acest ti# s4 coincid4
cu cel al e5#resiei selector- Xalorile utilizate #entru eticFete trebuie s4 fie distincte-
Instruciunea se e5ecut4 astfel: se evalueaz4 e5#resia selector; se e5ecut4 instruciunea care
este #recedat4 de o constant4 egal4 cu valoarea e5#resiei selector ( dac4 e5ist4 - Ju#4 e5ecuia
instruciunii selectate se va trece la instruciunea ce urmeaz4 8n #rogram- Jac4 toate constantele c
i
sunt diferite de valoarea selectorului. se e5ecut4 instruciunea din clauza J:YHKL;- Jac4
J:YHKL; li#sete. instruciunea S_I;C` nu are efect-
9rezena instruciunii breaa nu este obligatorie- Jac4 ea li#sete de la sf6ritul unei
alternative. du#4 e5ecuia instruciunii cores#unz4toare alternativei res#ective se trece la e5ecutarea
instruciunii din alternativa urm4toare-
1C./. #%ruc%ura r$($%%8D= *+%ruc1u*l$ FGILE3 DO FGILE3 EOR= *+%ruc1u*l$
BREAH ) CONTINUE
Structura re#etitiv4 #ermite e5ecuia re#etat4 a uneia sau mai multor instruciuni-
I*+%ruc1u*$a FGILE ( ciclu cu test iniial se folosete 8n situaia 8n care num4rul de
re#et4ri nu este dinainte cunoscut- 9ermite re#etarea de ! sau mai multe ori a unei instruciuni ( c6t
tim# o condiie este adev4rat4 -
Yorma general4 a instruciunii _`IL: este:
while(expresie) instruc5iune;
Se evalueaz4 e5#resia i dac4 este diferit4 de ! ( ;EK: se e5ecut4 instruciunea- N#eraia
se re#et4 #6n4 c6nd la evaluarea e5#resiei se obine o valoare ! ( YHLS: - Jac4 se dorete
re#etarea mai multor instruciuni. ele se gru#eaz4 8ntr-o instruciune com#us4-
:ste #osibil ca instruciunea s4 nu se e5ecute niciodat4 dac4 de la 8nce#ut e5#resia are valoarea
YHLS:-
Instruciunea interioar4 buclei _`IL: trebuie scris4 astfel 8nc6t s4 modifice variabila ce
intrevine 8n e5#resie. astfel 8nc6t aceasta s4 #oat4 deveni fals4- Jac4 acest lucru nu se realizeaz4 se
ajunge la o [bucl4 infinit4\-
Jeoarece e5#resia se reevalueaz4 la fiecare e5ecuie a buclei _`IL: este necesar ca ea sa
aib4 o form4 c6t mai sim#l4-
:5em#lu: calculul lui 5
n
p*0; i*0;
)!ile(i<*n) { p*p6x; i*i+0; }
I*+%ruc1u*$a DO FGILE ( ciclu cu test final se folosete c6nd nu se cunoate num4rul
de re#et4ri. dar e5ist4 certitudinea c4 bucla trebuie #arcurs4 cel #uin o dat4-
Yorma general4 a instruciunii este:
do instruc5iune while(expresie);
Se evalueaz4 e5#resia i dac4 are valoarea ;EK: ( nenul4 se e5ecut4 instruciunea-
:5ecuia se re#et4 #6n4 c6nd la evaluarea e5#resiei se obine YHLS: ( ! -
Instruciunea se e5ecut4 cel #uin o dat4. cFiar dac4 de la 8nce#ut e5#resia are valoarea ;EK:-
Instruciunea interioar4 buclei trebuie scris4 astfel 8nc6t s4 modifice variabila ce intrevine 8n
e5#resie. astfel 8nc6t aceasta s4 #oat4 deveni adev4rat4- Jeoarece e5#resia se reevalueaz4 la fiecare
e5ecuie a buclei este necesar ca ea s4 aib4 o form4 c6t mai sim#l4-
:5em#lu: calculul lui 5
n
p*0; i*0;
do { p*p6x; i*i+0;
} )!ile(i<*n);
I*+%ruc1u*$a EOR ( ciclu cu contor se folosete c6nd num4rul de re#et4ri al unei
secvene este dinainte cunoscut- Hre forma:
for(exp1;exp2;exp3) instruc5iune;
e5#< iniializarea ciclului YNE; se e5ecut4 o singur4 dat4; #oate fi orice e5#resie aritmetic4
e5#? test de control; se e5ecut4 8naintea fiec4rei iteraii; dac4 este adev4rat se e5ecut4 cor#ul
ciclului; ciclul se e5ecut4 #6n4 c6nd condiia e5#? devine fals4;
e5#D reiniializarea ciclului;
Nricare din aceste e5#resii #oate li#si-
:5em#lu: calculul lui 5
n
p*0;
for(i*0;i<*n;i++) p*p6x;
I*+%ruc1u*$a BREAH determin4 ieirea forat4 din instruciunea re#etitiv4 care o conine-
9rogramul se continu4 cu instruciunea ce urmeaz4 celei re#etitive-
I*+%ruc1u*$a CONTINUE face un salt necondiionat la sf6ritul buclei ce o conine-
Instruciunile dintre CN7;I7K: i sf6ritul buclei sunt ignorate i se revine la 8nce#utul buclei-