Sunteți pe pagina 1din 10

Elemente de baz a s i mediul de programare al limbajului C/C++

Not iuni introductive


prof. Diana Cojocaru
December 4, 2013
Not iuni introductive
Limbajul de programare reprezint a un mijloc de comunicarentre utilizatorul uman, care este programatorul,
si sistemul de calcul.
Descrierea unui algoritm n limbaj de programare se face cu ajutorul unui program. Un program este o
succesiune de comenzi, numite instruct iuni, ce vor executate de sistemul de calcul.
Un calculator poate s a nt eleag a mai multe limbaje de programare ntruc at ecare limbaj are un traduc ator -
compilator propriu.
Structura programelor C/C++
Un program C/C++ este un ansamblu de instruct iuni grupate n funct ii. Orice program C/C++ are cel put in
o funct ie - funct ia principal a care se declara prin void main(). Un bloc de instruct iuni este delimitat printr-o
pereche de acolade { }. Fiecare instruct iune se termin a cu caracterul ; (punct si virgul a).
Structura general a a unui program realizat n limbajul C/C++ este urm atoarea:
directive preprocesare
includere siere bibliotec a
denit ii de constante;
denit ii de tipuri de date;
declarat ii de variabile;
declarat ii de funct ii;
void main()
{
instruct iuni;
apeluri de funct ii;
}
Atunci c and creat i un program n C++, v a plasat i instruct iunile ntr-un sier sursa care are extensia cpp.
Limbajul C++ foloseste put ine instruct iuni si foarte multe funct ii de sistem (cum sunt funct iile de citire si
scriere cin si cout) care sunt denite n siere biblioteci ale limbajului. Atunci c and nt alneste n program o
E-mail: dyana.cojocaru@yahoo.com
2 Informatica
instruct iune n care este apelat a o funct ie de sistem, compilatorul, care traduce ecare intruct iune din limbajul
de programare, ntr-un grup de instruct iuni n limbajul masin a, obt in andu-se programul obiect, pentru a putea
traduce programul surs a, are nevoie de informat ii despre acea funct ie. Aceste informat ii se numesc prototipul
funct iei. Prototipurile funct iilor de sistem se g asesc n siere antet care au extensia .h. Pentru a putea folosite
de compilator, informat iile despre funct iile de sistem trebuie incluse n sierul surs a nainte de a ncepe compilarea
lui. Aceasta operat ie se face scriind n sierul surs a, nainte de funct ia main(), directiva pentru preprocesor:
#include < nume sier antet.h >
Directivele de proprocesare ncep cu caracterul # care este urmat de numele directivei si nu se termin a cu car-
acterul ;. Preprocesarea se execut a naintea compil arii propriu-zise, prin intermediul unui program special numit
preprocesor, care act ioneaz a asupra programului surs a, iar rezultatul este tot un program surs a (sier text cu
extensia cpp), spre deosebire de compilare, care act ioneaz a asupra programului surs a iar rezultatul este un program
obiect. Atunci c and compilat i un program C++, un al doilea program, denumit editor de legaturi alc atuieste
programul executabil, prin combinarea instruct iunilor n cod masin a obt inute prin traducerea instruct iunilor din
programul surs a cu instruct iunile n cod masin a ale funct iilor standard apelate n program.
Vocabularul limbajului de programare
Vocabularul limbajului de programare este format din: setul de caractere, identicatori, separatori si comentarii.
Setul de caractere
Orice program este scris cu ajutorul urm atoarelor caractere:
- litere mari si mici ale alfabetului englez, numite caractere alfabetice;
- cifrele sistemului de numerat ie zecimal, numite si caractere simbolice;
- caractere speciale: +, , , /, =, &, [, ], {, }, #, |, spat iu, , , @.
Codicarea si reprezentarea informat iei alfanumerice foloseste standardul ASCII (American Standard Code
for Information Interchange).
Identicatori
Un identicator reprezint a o succesiune de litere, cifre sau caracterul special , n care primul caracter nu
trebuie s a e cifr a. Orice identicator trebuie denit sau declarat ntr-o linie anterioar a referirii sale. Iden-
ticatorii desemneaz a constante, tipuri de date, variabile. Exista un set de identicatori predenit i, numit i
cuvinte-cheie sau cuvinte rezervate: while, void, for, do, char, oat, if, etc.
Separatori
Unit at ile sintactice sunt separate ntre ele e prin unul sau mai multe spat ii (blank), e prin sf arsitul de
linie(caracterul CR), e prin caracterul ;(punct virgula) care se utilizeaz a pentru separarea instruct iunilor si a
declarat iilor.
Comentarii

In textul unui program, sunt necesare note explicative atasate unor secvent e de operat ii, declar ari de date, care
nu au rol activ n derularea programului. Acestea sunt delimitate n limbajul C++ prin /*comentariu*/, sau
precedate de //.
Not iuni introductive 3
Exercit iu: Se consider a urm atorii identicatori.

Inlocuit i litera corespunz atoare identicatorului corect denit:
a) n3; b) 4 nr; c) stea; d)p.adresa; e)nr pare; f) x+y; g)mi#sol; h) var 4
Raspuns: Un identicator reprezint a o succesiune de litere, cifre si doar caracterul special , si obligatoriu nu
trebuie s a nceap a cu o cifr a. Deci variantele corecte sunt a), c), h).
Tipuri standard de date
Un tip de data este caracterizat prin mult imea de valori si dimensiunea zonei de memorie alocat a (num arul de
octet i).

In limbajul C++ putet i folosi urm atoarele tipuri de date:
tipuri standard sau predenite, adic a tipuri implementate n limbaj;
tipuri denite de utilizator.

In limbajul C++ sunt implementate urm atoarele tipuri standard:


char pentru memorarea caracterelor;
int pentru memorarea numerelor ntregi;
oat si double pentru memorarea numerelor reale;
void pentru tip neprecizat;
Observat ia 1

In limbajul C++ nu este implementat tipul logic. Pentru acest tip de data se poate folosi orice tip
numeric. Interpretarea este urmatoarea:
unei expresii al c arei rezultat este de tip logic i se atribuie valoarea 0 pentru False si 1 pentru True;
ntr-o expresie, un operand numeric este interpretat ca un operand logic, astfel: daca are valoarea 0, este considerat
False, iar dac a are valoarea diferita de 0, este considerat True;
Pentru a v a ajuta s a modicat i intervalul valorilor pe care tipurile de date le pot primi, limbajul C furnizeaza
un set de modicatori de tip: unsigned, signed, long, short.
Tip de dat a Dimensiune Domeniu de denit ie intern al datei
char 1 octet [-128, 127]
unsigned char 1 octet [0, 255]
int 2 octet i [-32 768, 32 767]
short int 2 octet i [-32 768, 32 767]
unsigned int 2 octet i [0, 65 535]
long 4 octet i [-2 147 483 648, 2 147 483 647]
unsigned long 4 octet i [0, 4 294 967 205]
oat 4 octet i 3.4 10
38
3.4 10
38
(cu o precizie de 7 cifre)
double 8 octet i 1.7 10
308
1.7 10
308
(cu o precizie de 10 cifre)
long double 10 octet i 3.4 10
4932
1.1 10
4932
(cu o precizie de 15 cifre)
4 Informatica
Constante, variabile, expresii
Denit ia 1 Constantele sunt acele date ale caror valori nu se pot modica prin operat iile sau instruct iunile programului.
Denirea constantelor:
const [tip] id constant a=valoare;
Constantele se clasic a n funct ie de tipul lor astfel:
ntregi - numere ntregi pozitive cu valori cuprinse ntre 0 si 4294967295.
Exemplu: const ntreg zecimal=123;
reale - orice valoare real a.
Exemplu: const pi=3.14;
caracter - orice caracter scris ntre apostrofuri.
Exemplu: const init ial a=A;
siruri de caractere - o succesiune de caractere, delimitata prin ghilimele.
Exemplu: const sir=1 este o cifr a;
Denit ia 2 Datele al caror cont inut poate modicat n timpul execut iei programului se numesc variabile. O varibila
este caracterizat a, n principal, de dou a elemente: nume si valoare. O variabil a poate primi valori prin atribuire sau
prin citire direct de la tastatur a.
Declararea variabilelor:
tip standard id variabil a;
Declararea unei variabile trebuie sa se faca nainte ca ea s a e folosit a ntr-o instruct iune. La declarare, varibilei i
se aloc a o zon a de memorie cu dimensiunea corespunz atoare tipului de dat a, iar tipul de dat a va determina modul
n care va putea prelucrat a acea variabil a n program.
Denit ia 3 O expresie este format a din unul sau mai mult i operanzi (constante, variabile, funct ii), legat i prin operatori.
Tipuri de operatori
operatori numerici: unari (+, -), binari multiplicativi (*, /, % (rest)), binari aditivi(+, -);
Exemplu:
#incl ude<i ost ream>
i nt main ( )
{
i nt a=10; // se de c l ar a v a r i a b i l a a de t i p i nt r e g
f l oat b =10; // se de c l ar a v a r i a b i l a b de t i p r e a l
cout <<a/3<<endl ; / se a f i s e a z a 3 ( r e z u l t a t de t i p i nt r e g care r e p r e z i nt a
c a t u l i mp a r t i r i i i n t r e g i d i nt r e i nt r e g a=10 s i i nt r e g 3) /
cout <<b/3<<endl ; / se a f i s e a z a 3. 33333 ( r e z u l t a t de t i p r e a l ) ; sa e f e c t u a t i mpar t i r e a
r e al a deoarece b e s t e de t i p r e a l ) /
Not iuni introductive 5
cout <<a / 3 . ; / se a f i s e a z a 3. 33333 ( r e z u l t a t de t i p r e a l ) ; sa e f e c t u a t i mpar t i r e a
r e al a deoarece i mp a r t i t o r u l e s t e r e a l ) /
}
Operatorul % nu se poate aplica pe valori numerice reale (pe operanzi de tipul oat sau double). Operatorii / si % se
pot folosi pentru a calcula catul si restul mp art iri a dou a numere ntregi cu semn.
Exemplu:
#incl ude<i ost ream>
i nt main ( )
{
i nt a=5, b =2;
cout <<a/b<< <<a%b<<endl ; // se a f i s e a z a 2 1
cout <<a/b<< <<a%b<<endl ; // se a f i s e a z a 2 1
cout <<a/b<< <<a%b<<endl ; // se a f i s e a z a 2 1
cout <<a/b<< <<a%b<<endl ; // se a f i s e a z a 2 1
}
operatori relat ionali: <, <=, >, >=;
operatori de egalitate: == (egal), !=(diferit);
Exemplu:
#incl ude<i ost ream>
i nt main ( )
{
i nt a=2, b =3;
cout <<(a>b)<<endl ; // se a f i s e a z a 0
cout <<(a<=b)<<endl ; // se a f i s e a z a 1
cout <<(a==b)<<endl ; // se a f i s e a z a 0
cout <<(a!=b ) ; // se a f i s e a z a 1
}
Operatorul de iesire << are prioritate mai mica dec at operatorii matematici, dar mai mare dec at operatorii relat ionali
si logici. Astfel, pentru ca ntreaga expresie s a e evaluat a corect, expresia logic a trebuie scris a ntre paranteze rotunde.
operatori logici: !(negare logica), && (si logic), || (sau logic);
x y !x x && y x || y
fals fals adev arat fals fals
fals adev arat adev arat fals adev arat
adev arat fals fals fals adev arat
adev arat adev arat fals adev arat adev arat
Exemplu:
#incl ude<i ost ream>
i nt main ( )
{
f l oat a =2. 5;
i nt b=0, c=2, d=3;
6 Informatica
cout <<(a>0)<<endl ; // se a f i s e a z a 1
cout <<(!a)<<endl ; // se a f i s e a z a 0
cout <<(! b)<<endl ; // se a f i s e a z a 1
cout <<(c&&d)<<endl ; // se a f i s e a z a 1
cout <<(b&&c)<<endl ; // se a f i s e a z a 0
cout <<(b | | c)<<endl ; // se a f i s e a z a 1
cout <<(a&&d)<<endl ; // se a f i s e a z a 1
cout <<(b&&a)<<endl ; // se a f i s e a z a 0
cout <<(b | | a)<<endl ; // se a f i s e a z a 1
}
operatorul de conversie explicit a (tip) operand converteste valoarea operandului la tipul indicat.
Exemplu:
#incl ude<i ost ream>
i nt main ( )
{
i nt a=5, b =2;
f l oat x =1.5;
cout <<a/b<<<<( f l oat ) a/b<<endl ; // se a f i s e a z a 2 2. 5
cout <<x<<<<(i nt ) x<<endl ; // se a f i s e a z a 1.5 1
}
operatori de atribuire:
id variabil a=valoare/expresie;
Atribuirea simpla
#incl ude<i ost ream>
i nt main ( )
{
unsigned i nt x=5, y=2;
f l oat a , b , c , d ;
cout <<(a=5x/y)<<endl ; // se a f i s e a z a 12
b=5( x/y ) ;
c =5. x/y ;
d=5. ( x/y ) ;
cout <<a<< <<b<< <<c<< <<d<<endl ; // se a f i s e a z a 12 10 12. 5 10
a=5( f l oat ) x/y ;
b =5(( f l oat ) x/y ) ;
cout <<a<< <<b<<endl ; // se a f i s e a z a 12. 5 12. 5
}
Atribuirea multipla
nume 1=nume 2=...=nume n=expresie.
Se evalueaz a expresia. Valoarea obt inut a se atribuie variabilei nume n, f acandu-se dac a este cazul, conversia de tip.
Cont inutul variabilei nume n se atribuie variabilei nume n-1, fac andu-se dac a este cazul, conversia de tip, etc.
Not iuni introductive 7
#incl ude<i ost ream>
i nt main ( )
{
unsigned i nt x , y ;
f l oat a ;
a=x=y=5/2;
cout <<a<< <<x<< <<y<<endl ; // se a f i s e a z a 2 2 2
a=x=y =5. /2;
cout <<a<< <<x<< <<y<<endl ; // se a f i s e a z a 2 2 2
x=y=a =5. /2;
cout <<a<< <<x<< <<y<<endl ; // se a f i s e a z a 2. 5 2 2
x=a=y =5. /2;
cout <<a<< <<x<< <<y<<endl ; // se a f i s e a z a 2 2 2
}
Atribuirea cu operator
Pentru operat ia de atribuire se pot utiliza urm atoarele asocieri de operatori: + =, =, =, / =, % =.
#incl ude<i ost ream>
i nt main ( )
{
i nt a=10, b=20, c =30;
a+=b+c ; //a=a+b+c
cout <<a ; // se a f i s e a z a 60
}
operatorul sizeof(expresie)/sizeof(tip) returneaz a num arul de octet i alocat i pentru memorarea unei expresii sau a
unui tip de dat a.
Exemplu:
#incl ude<i ost ream>
i nt main ( )
{
short i nt a=5, b =10;
f l oat c ;
cout <<si zeof ( char)<<<<si zeof ( f l oat )<<endl ; // se a f i s e a z a 1 4
cout <<si zeof ( ca)<<<<si zeof ( a/b)<<endl ; // se a f i s e a z a 4 2
}
operatorul condit ional e1?e2 : e3, unde e1, e2, e3 sunt expresii. Dac a e1 are valoare nenul a, atunci se prelucreaz a
e2, altfel, se prelucreaz a e3.
Exemplul 1:
// Programul a f i s e a z a modul ul unui numar c i t i t de l a t a s t a t u r a
#incl ude<i ost ream>
i nt main ( )
{
8 Informatica
i nt x ;
cout <<x= ;
ci n>>x ;
cout << modul ul=<<(x>0?x:x ) ;
}
Exemplul 2:
// Programul det ermi na daca un numar c i t i t de l a t a s t a t u r a e s t e pat r at p e r f e c t
#incl ude<i ost ream>
#incl ude<math . h>
i nt main ( )
{
unsigned i nt n ;
cout <<n= ;
ci n>>n ;
cout <<( s q r t ( n)==( i nt ) s q r t ( n)? pat r at p e r f e c t : nu e pat r at p e r f e c t ) ;
}
operatorii de incrementare/decrementare:
-postxat: var++/var;
-prexat: ++var/var.
Dac a operatorul este postxat, atunci variabila este incrementat a/decrementat a dup a evaluarea expresiei din care face
parte; dac a operatorul este prexat, atunci variabila este incrementat a/decrementat a nainte de evaluarea expresiei.
Exemplul 1:
#incl ude<i ost ream>
i nt main ( )
{
i nt a=2;
cout <<a<<endl ; // se a f i s e a z a 2
cout <<a++<<endl ; // se a f i s e a z a 2
cout <<a<<endl ; // se a f i s e a z a 3
cout<<++a<<endl ; // se a f i s e a z a 4
cout <<a<<endl ; // se a f i s e a z a 4
}
Exemplul 2:
#incl ude<i ost ream>
i nt main ( )
{
i nt a=1, b =2;
cout <<a+++b++=<<a+++b++<<endl ; // se a f i s e a z a a+++b++=3
cout <<a<< <<b<<endl ; // se a f i s e a z a 2 3
cout <<++a+(++b)=<<++a+(++b)<<endl ; // se a f i s e a z a ++a+(++b)=7
cout <<a<< <<b<<endl ; // se a f i s e a z a 3 4
cout <<a+b++=<<a+b++<<endl ; // se a f i s e a z a a+b++=7
Not iuni introductive 9
cout <<a<< <<b<<endl ; // se a f i s e a z a 3 5
cout <<a+++b=<<a+++b<<endl ; // se a f i s e a z a a+++b=8
cout <<a<< <<b<<endl ; // se a f i s e a z a 4 4
cout <<a+++b=<<a+++b<<endl ; // se a f i s e a z a a+++b=7
cout <<a<< <<b<<endl ; // se a f i s e a z a 5 3
cout <<++a+b++=<<++a+b++<<endl ; // se a f i s e a z a ++a+b++=9
cout <<a<< <<b<<endl ; // se a f i s e a z a 6 4
}
operatorul virgul a , poate folosit pentru construirea unei expresii compuse din mai multe expresii:
expresie 1, expresie 2, .., expresie n.
Executarea acestui operator se face astfel:
- se evalueaza a expresie 1;
- se evalueazaa expresie 2;
-.............................
- se evalueazaa expresie n;
Rezultatul si tipul rezultatului este dat de valoarea ultimei expresii.
Exemplu:
#incl ude<i ost ream>
i nt main ( )
{
i nt a=5, b =10;
f l oat d , c ;
c=a=++b , ++a , d=( f l oat ) a/b, ++b ;
cout <<a<< <<b<< <<c<< <<d<<endl ; // se a f i s e a z a 12 11 11 1. 090909
a=5, b =10;
cout <<(c=a=++b,++a , c=( f l oat ) a/b,++b ) /2; // se a f i s e a z a 5
}
Reguli de prioritate si evaluare a operatorilor:
Prioritate Operator Evaluare
1 () de la st anga la dreapta
2 !,+,-,++,- -,sizeof() de la dreapta la st anga
3 *,/,% de la st anga la dreapta
4 +,- de la st anga la dreapta
5 <, <=, >, >= de la st anga la dreapta
6 ==,!= de la st anga la dreapta
7 && de la st anga la dreapta
8 || de la st anga la dreapta
9 =(atribuire) de la dreapta la st anga
Teme
1. Scriet i n limbajul de programare studiat, urm atoarele expresii:
E1=x este num ar par si y nu se divide la 3, 5 si 7
10 Informatica
E2=x este mai mic sau cel mult egal cu y si y este multiplu de 11 si 9.
Raspuns:
E1 = (x%2 == 0 && y%3! = 0 && y%5! = 0 && y%7! = 0)
E2 = (x <= y && y%11 == 0 && y%9 == 0)
2. Evaluat i urm atoarele expresii pentru a = 5, b = 2, c = 3:
E1 = a + b/2 + c a + b
E2 = c + b a + (c b/a + b + c)/(a b).
Raspuns:
E1 = 5 + 2/2 + 3 5 + 2 = 5 + 1 + 15 + 2 = 23.
E2 = 3 + 2 5 + (3 2/5 + 2 + 3)/(5 2) = 3 + 10 + (6/5 + 2 + 3)/10 = 3 + 10 + 6/10 = 3 + 10 + 0 = 7.
3. Fie numerele reale a, b, c, d si x, unde a < b si c < d. Scriet i expresia corect a pentru x [a, b) sau x (c, d].
Raspuns:
((x >= a)&&(x < b))||((x > c)&&(x <= d)).
Citirea si scrierea datelor
Citirea de la intrarea standard (tastatur a) se face cu funct ia cin
cin>>id v1[>>id v2>>...>>id vn];
unde id v1, id v2, id vn sunt identicatori de variabile elementare de orice tip.
Scrierea (asarea) la iesirea standard(ecran) se face cu funct ia cout
cout<<id v1[<<id v2<<...<<id vn];
unde id v1, id v2, id vn sunt identicatori de variabile elementare de orice tip sau de constante.