Sunteți pe pagina 1din 11

I.

Tipuri i variabile
1. Tipuri.
Un tip de date este precizat prin:
- o mulime finit de valori corespunztoare tipului (constantele tipului)
- o mulime de operatori prin care se prelucreaz valorile tipului
- o multime de restricii de utilizare a operatorilor.
De exemplu tipul ntreg (int) este definit prin:
- mulimea valorilor reprezentnd numere ntregi (ntre -32768 i 32767)
- mulimea operatorilor : ! -! "! #! $
- mulimea restriciilor: pentru operatorul # mpr%itorul nu poate fi &! etc.
'ipurile pot fi tipuri fundamentale i tipuri derivate.
Tipurile fundamentale (predefinite sau de baz sunt:
'ipul (oolean (bool)
'ipul caracter (char)
'ipuri ntregi (int, short, long)
'ipuri reale (float, double, long double)
'ipul vid (void)
'ipurile enumerate (enum)
'ipurile (oolean! caracter! ntreg! real i tipurile enumerate sunt tipuri aritmetice! deoarece
valorile lor pot fi interpretate ca numere.
'ipurile (oolean! caracter! ntreg i enumerrile sunt tipuri ntregi.
Tipurile derivate sunt construite pornind de la tipurile fundamentale. 'ipurile derivate sunt:
ta(lourile
func%iile
pointerii
referin%ele
structurile (sau nregistrrile)
uniunile (nregistrrile cu variante)
)n cele ce urmeaz! vom n%elege prin obiect! o zon de memorie.
Declararea unui obiect specific numai proprietile obiectului, fr a aloca memorie pentru
acesta.
Definirea unui obiect specific proprietile obiectului i aloc memorie pentru o(iect.
Declararea o(iectelor ne permite referirea la o(iecte care vor fi definite ulterior n acelai
fiier sau n alte fiiere care con%in pr%i ale programului.
2. Tipuri fundamentale.
*alculatoarele pot lucra n mod direct cu caractere! ntregi i reali. +cestea sunt tipuri
fundamentale (predefinite).
2.1. Booleeni (tipul bool).
,alorile asociate tipului (oolean sunt valorile true i false. -ezultatele opera%iilor logice sunt
valori (ooleene. .unc%iile care testeaz anumite condi%ii (predicate) ntorc rezultate de tip (oolean.
/xemplu:
bool par(int n){ return n%2!"#
2.2. Caracterele (tipul char)
,alorile asociate tipului caracter (char) sunt elemente din mul%imea caracterelor 0 setul de
caractere +1*22. Drept consecin%! caracterele pot fi tratate ca ntregi! i invers.
+fiarea sau citirea unei varia(ile de tip char la terminal se face cu descriptorul de format
%c.
33
.iecrei constante caracter i se asociaz o valoare ntreag! valoarea caracterului n setul de
caractere +1*22. 4entru reprezentarea de caractere n alt set de caractere (de exemplu Unicode) se
folosete tipul $char%t&
Un literal caracter se reprezint prin caracterul respectiv inclus ntre apostrofi (dac este tipri(il).
*aracterele netipri(ile se reprezint prin mai multe caractere speciale numite secvene escape.
+cestea sunt:
'n sfrit de linie (5.)
't ta(ulare orizontal (6')
'v ta(ulare vertical (,')
'b revenire la caracterul precedent (71)
'r revenire la nceput de linie (*-)
'f avans la pagin nou (..)
'a alarm (7/5)
'' caracterul '
'( caracterul (
') caracterul *
'+ caracterul ,
'ooo caracterul cu codul octal ooo
'-hh caracterul cu codul 8exazecimal hh
2.3. ntregii (tipul int).
)ntregii pot avea 9 dimensiuni: int, short int (sau short) i long int (sau
long).
*onstantele intregi pot fi date in (azele:
.!/ 207, -60, 12328
8/ !.20, !.77
.6/ !-.ac, !4563
+fiarea unei varia(ile de tip int n (aza 3& la terminal se face cu descriptorul de format %d
sau %i! n (aza : cu %o! iar n (aza 3; cu %-.
Calificatorii long, short i unsigned
*alificatorul long situat naintea tipului int extinde domeniul tipului ntreg de la
(-2
.0
,2
.0
-.) la (-2
3.
, 2
3.
-.)&
*onstantele intregi lungi se scriu cu sufixul 7/ .202367.
+fiarea sau citirea unei varia(ile de tip long int la terminal se face cu descriptorul de
format %ld sau %li n (aza 3&! %lo n (aza : i %l- n (aza 3;.
*alificatorul short situat naintea tipului int restrnge domeniul ntregilor.
+fiarea sau citirea unei varia(ile de tip short int la terminal se face cu descriptorul de
format %hd sau %hi n (aza 3&! %ho n (aza : i %h- n (aza 3;.
*alificatorul unsigned nainte de int deplaseaz domeniul ntregilor
(-2
.0
,2
.0
-.) la (!,2
.6
-.)&
+fiarea sau citirea unei varia(ile de tip unsigned int la terminal se face cu descriptorul
de format %ud sau %ui n (aza 3&! %uo n (aza : i %u- n (aza 3;.
*onstantele fr semn se specific cu sufixul 8 sau u.
/xist ; tipuri ntregi! formate folosind calificatorii:
{ 9 signed : unsigned ; # { 9 short : long ; #
int
+vem urmtoarele ec8ivalen%e:
int signed int
short short int signed short
int
long long int
unsigned unsigned int
3<
unsigned short unsigned short
int
unsigned long unsigned long int
5iterali ntregi fi scrii n:
- zecimal - un ir de cifre zecimale! dintre care prima nu este &.
- octal - un ir de cifre octale care ncepe cu cifra &
- hexazecimal - un ir de cifre 8exa care ncepe prin &x.
Un numar negativ este precedat de semnul -. /xist i semnul unar.
/xemple: .20 !.273 !-2<6= 1620 -8303
5iteralii ntregi se pot termina prin u sau 8 (fr semn) sau l sau 7 (de tip lung).
Dac constanta nu are sufix! atunci ea va apar%ine primului tip din succesiunea: int, long int,
unsigned long int care permite reprezentarea valorii.
2.4. ealii (tipurile float i double).
4artea ntreag sau cea frac%ionar din constanta real poate lipsi:
ntreg.fractie sau ntreg. sau .fractie
/xemple: 2&20, .&, -&0, 1232&0
*onstantele reale pot fi exprimate cu mantis i exponent (nota%ia tiin%ific):
mantisaEexponent = mantisa 10
exponent
/xemple: .&0e-3, !&0>6.
'ipul float asigur o precizie de = cifre zecimale semnificative i exponentul maxim 9:.
-eprezentarea se face pe > octe%i.
+fiarea unei varia(ile de tip float la terminal se face cu descriptorii de format %f sau %e.
'ipul double este foarte asemntor tipului float, cu deose(irea c se asigur o precizie
de 3; cifre zecimale semnificative i exponentul maxim 9&;. -eprezentarea se face pe : octe%i.
+fiarea sau citirea unei varia(ile de tip double la terminal se face cu descriptorul de
format %lf, iar a unei varia(ile de tip long double cu %7f. -eprezentarea intern pentru long
double se face pe 3& octe%i.
?umerele reale con%in punct zecimal i#sau exponent! avnd forma:
[<parte ntreaga>][.<parte fracionara>][ E<exponent>]
4artea ntreag si partea frac%ionar pot lipsi! dar nu simultan. 4unctul zecimal i exponentul
sunt op%ionale! dar nu simultan.
*onstanta poate avea un sufix:
- f sau 6 precizeaz o constant de tip float
- l sau 7 precizeaz o constant de tip long double.
/xemple: &20 -7&628 .0>-3
2.!. "efiniri de tip cu typedef.
Un tip de date poate avea i un alt nume! prin folosirea declara%iei t?pedef. De exemplu:
t?pedef int intreg
+celai efect se o(%ine cu directiva define:
@define intreg int
2.#. Tipuri enumerate.
.olosirea tipului enumerare poate crete claritatea programului! ntruct numele sunt mai
semnificative dect valorile care se ascund n spatele lor.
+stfel este mai natural folosirea valorilor ABC8, <75, D>EA8, F>AG> pentru a
desemna nite culori! dect a valorilor !, ., 2, 3.
*onstantele sim(olice pot fi introduse cu macrodefinitii @define.
39
@define 6<7C> !
@define HA8> .
Un tip enumerat folosete n locul valorilor tipului &!3!<!@ nume sim(olice:
enum =87BAI {ABC8, F>AG>, E<75>D, <75<CHA8, D>EA8#"
enum boolean {6<7C>, HA8>#"
/ste posi(il sa for%m pentru numele sim(olice alte valori ntregi dect !,.,2,J
enum KI7> {78DI., L<AHI, LI>A=, MBI, FID, C<L5, G8L#"
enum escapes {5>77)'a),5<=NCO<=>)'b),H<5)'t),D>P7ID>)'n),
FH<5)'v),A>H8AD)r)#"
.olosind t?pedef putem defini tipuri enumerative:
t?pedef enum {ABC8, E<75>D, <75<CHA8# culori"
t?pedef enum { lu, ma, mi, Qo, vi, si, du # Rile"
2.$. Tipul vid (void).
'ipul void precizeaz o mul%ime vid de valori. +cesta se folosete pentru a specifica tipul
unei func%ii care nu ntoarce nici un rezultat! sau a unui pointer generic.
3. Tipuri derivate.
4e (aza tipurilor fundamentale se pot construi tipuri derivate ca:
ta(louri de o(iecte de un anumit tip
functii care ntorc o(iecte de un anumit tip
pointeri la o(iecte de un anumit tip
structuri care con%in o(iecte de tipuri diferite
uniuni care con%in o(iecte de tipuri diferite
4. "eclararea variabilelor.
A varia(il const din dou componente: o(iectul i numele o(iectului. ?umele pot fi
identificatori sau expresii.
Definirea sau declararea unei varia(ile are forma:
clas-memorie tip declaratori;
*lasa de memorie sau tipul pot fi omise. Declaratorii sunt identificatori.
.iecare declarator poate fi urmat de un iniializator! care specific valoarea ini%ial asociat
identificatorului declarator.
+supra claselor de memorie vom reveni mai trziu! aa c n exemplele curente le vom omite:
int i, Q!&
char c"
float -.&0, ?"
enum =87BAI s., s2ABC8"
enum 5BB7><D pHA8>"
culori c., c2"
Rile R, d"
!. %c&ivalen'a tipurilor.
Dou tipuri se consider ec8ivalente n urmtoarele situa%ii:
ec8ivalen% structural a tipurilor
ec8ivalen%a numelui tipului
Dou o(iecte sunt de tipuri structural ec8ivalente! dac au acelai tip de componente.
3>
Dou o(iecte sunt de tipuri ec8ivalente dup nume! dac au fost definite folosind acelai nume de
tip.
/xemple:
t?pedef int integer"
int -, ?" ST - Ui ? sunt echivalente dupa numele tipuluiTS
integer R"ST - Ui R sunt de tipuri structural echivalente TS
3B
II. (peratori i e)pre*ii.
Un operator este un sim(ol care arat ce opera%ii se execut asupra unor operanzi (termeni).
Un operand este o constant! o varia(il! un nume de func%ie sau o su(expresie a crei
valoare este prelucrat direct de operator sau suport n preala(il o conversie de tip.
Aperatorii! dup numrul de operanzi asupra crora se aplic pot fi: unari! binari i ternari.
)n * exist >B de operatori diferi%i dispui pe 3B niveluri de prioritate.
)n func%ie de tipul operanzilor asupra crora se aplic! operatorii pot fi: aritmetici! rela%ionali!
(inari! logici! etc.
Aperatorii sunt mpr%i%i n clase de preceden (sau de prioritate). )n fiecare clas de
preceden% este sta(ilit o regul de asociativitate! care indic ordinea de aplicare a operatorilor din
clasa respectiv: de la stnga la dreapta sau de la dreapta la stnga.
O expresie este o com(ina%ie de operanzi! separa%i ntre ei prin operatoriC prin evaluarea unei
expresii se o(%ine o valoare rezultat.'ipul valorii rezultat depinde de tipul operanzilor i a operatorilor
folosi%i.
/valuarea unei expresii poate avea efecte laterale! manifestate prin modificarea valorii unor
varia(ile.
1. Conver*ii de tip.
,alorile pot fi convertite de la un tip la altul. *onversia poate fi implicit sau realizat n
mod explicit de ctre programator.
1.1. Conver*ii implicite de tip.
*onversiile implicite au loc atunci cnd este necesar ca operatorii i argumentele func%iilor s
corespund cu valorile ateptate pentru acestea.
+cestea pot fi sintetizate prin ta(elul:
'ip 'ip la care se convertete implicit
char int, short int, long int
int char (cu trunc8iere)
short int (cu trunc8iere)
long int (cu extensia semnului)
short int ca i int
long int ca i int
float double
int, short int, long int
double float
int, short int, long int
1.2. Conver*ii aritmetice.
*nd un operator (inar se aplic ntre doi operanzi de tip diferit! are loc o conversie implicit
a tipului unuia dintre ei! i anume! operandul de tip Dmai restrnsE este convertit la tipul Dmai largE al
celuilalt operand. +stfel n expresia f 1 i! operandul int este convertit n float.
Aperatorii aritmetici convertesc automat operanzii la un anumit tip! dac operanzii sunt de
tip diferit. 1e aplic urmtoarele reguli:
operanzii char i short int se convertesc n intC operanzii float se convertesc n
double.
dac unul din operanzi este double restul operanzilor se convertesc n double iar rezultatul
este tot double.
dac unul din operanzi este long restul operanzilor se convertesc n long ! iar rezultatul este
tot long.
3;
dac unul din operanzi este unsigned restul operanzilor se convertesc n unsigned ! iar
rezultatul este tot unsigned.
dac nu se aplic ultimele 9 reguli! atunci operanzii vor fi de tip int i rezultatul de asemeni de
tip int.
double float

long

unsigned

int char,
short
+stfel n c - *!) n care c reprezint un caracter cifr calculeaz valoarea ntreag a
acestui caracter.
*onversii implicite se produc i n cazul opera%iei de atri(uire! n sensul c valoarea din
partea dreapt este convertit la tipul varia(ilei acceptoare din stnga.
+stfel pentru declara%iile:
int i"
float
f"
double
d"
char c"
sunt permise atri(uirile:
if" ST cu trunchierea partii
fractionare TS
fi"
df"
fd"
ci"
ic"
1.3. Conver*iile de tip e)plicite (cast).
*onversiile explicite de tip (numite i cast) pot fi for%ate n orice expresie folosind un operator
unar (cast) ntr-o construc%ie de forma:
(tip)
e-presie
n care expresia este convertit la tipul numit.
Aperatorul cast are aceeai preceden% cu a unui operator unar.
+stfel func%ia sVrt() din (i(lioteca Wmath&hX cere un argument double, deci va fi
apelat cu un cast: sVrt((double) n)&
+pelurile cu argumente de alt tip vor fi convertite n mod automat la tipul double/
-sVrt(2) va converti constanta < n <.&.
2. (peratorii aritmetici.
Aperatorii aritmetici (inari sunt: 1, -, T, S i % (modul F restul impr%irii ntregi).
4rioritatea operatorilor aritmetici este:
1, - unari
T, S, % (inari
1, - (inari
3=
Regula de asociativitate este de la stnga la dreapta (la priorit%i egale operatorii sunt evalua%i
de la stnga la dreapta).
Operatori multiplicativi
operator descriere tip operanzi tip rezultat preceden%
* nmul%ire aritmetic int,unsigned,long
,double
9
/ mpr%ire aritmetic int,unsigned,long
,double
9
% restul mpr%irii ntregi ntreg int,unsigned,long 9
Operatori aditivi
operator descriere tip operanzi tip rezultat preceden%
+ adunare aritmetici
pointer i ntreg
int,unsigned,long,double
pointer
2
- scdere aritmetici
pointer i ntreg
doi pointeri
int,unsigned,long,double
pointer
int
2
3. (peratorii de atribuire.
Apera%ia de atri(uire modific valoarea asociat unei varia(ile (partea stng) la valoarea
unei expresii (partea dreapt). ,aloarea transmis din partea dreapt este convertit implicit la tipul
pr%ii stngi.
+tri(uiri de forma: a a op b se scriu mai compact a op b n care op= poart
numele de operator de atribuire! op putnd fi un operator aritmetic (! -!T,S,%) sau (inar (XX,
WW, Y, Z, :)&
A atribuire multipl are forma:
v.v2&&&vne-presie
i este asociativ la dreapta.
A opera%ie de atri(uire terminat prin punct-virgul (terminatorul de instruc%iune) se
transform ntr-o instruciune de atribuire.
4. (peratorii rela'ionali.
Aperatorii rela%ionali sunt: X, X, W, W= , care au to%i aceeai prioritate (preceden%).
*u prioritate mai mic sunt: , [&
Aperatorii rela%ionali au prioritate mai mic dect operatorii aritmetici. 4utem deci scrie
a W b -. n loc de a W (b -.)
/xemple: car X *a) YY car W *R)
Operatori relaionali
operator descriere tip operanzi tip rezultat preceden%
W mai mic aritmetic sau pointer int 6
X mai mare aritmetic sau pointer int 6
W mai mic sau egal aritmetic sau pointer int 6
X mai mare sau egal aritmetic sau pointer int 6
egal aritmetic sau pointer int 7
[ neegal aritmetic sau pointer int 7
!. (peratorii booleeni.
/xist urmtorii operatori logici:
[ - ?/G+'2/ (operator unar)
YY - H2 logic (operatori (inari)
:: - 1+U logic
3:
/xemple:
iWn-. YY (cgetchar()) [ *'n) YY c [ >B6
nu necesit paranteze suplimentare deoarece operatorii logici sunt mai pu%in prioritari dect cei
rela%ionali.
bisect an % 2 ! YY an % .!! [ ! :: an % 2!! !"
estecifra c X )!) YY c W *3)
*ondi%ia - ! este ec8ivalent cu [-
- [ ! YY ? [ ! YY R [ ! este ec8ivalent cu - YY ? YY R
Operatori booleeni
operator descriere 'ip operanzi 'ip
rezultat
preceden% asociativitate
[ nega%ie aritmetic sau pointer int < D1
YY H2 logic aritmetic sau pointer int 33 1D
:: 1+U logic aritmetic sau pointer int 3< 1D
#. (peratorii binari (la nivel de bi'i).
)n * exist ; opera%ii de manipulare a (i%ilor aplicate asupra unor operanzi ntregi (char,
short, int, long) cu sau fr semn:
Y - H2
: - 1+U inclusiv
Z - 1+U exclusiv
WW - deplasare stnga
XX - deplasare dreapta
\ - complement fat de 3 (inversare)
Aperatorul H2 se foloseste pentru operaia de mascare a unor (i%i.
nn Y !.77" ST pune pe ! bitii din poRitia 8 in sus TS
Aperatorul 1+U pune pe 3 (i%ii specifica%i printr-o masc:
-- : L<C=<" ST pune pe . bitii care sunt . in L<C=< TS
Deplasarea dreapta a unui ntreg cu semn este aritmetic! iar a unui ntreg fr semn este
logic.
De exemplu:
- : . WW 7" ST pune pe . bitul ! din octetul - TS
- Y \(. WW 7)" ST pune pe ! bitul ! din octetul - TS
Operatori pe bii
operator descriere 'ip operand tip rezultat preceden%
WW deplasare stnga )ntreg ca operandul stng B
XX deplasare dreapta )ntreg ca operandul stng B
Y H2 pe (i%i )ntreg int,long,unsigned :
Z 1+U exclusiv pe (i%i )ntreg int,long,unsigned I
: 1+U inclusiv pe (i%i )ntreg int,long,unsigned 3&
$. (peratorul condi'ional.
Decizia
if (a X b)
ma- a"
else
ma- b"
poate fi reprezentat prin expresia condi%ional:
3I
ma- a X b ( a / b
)n general e-. ( e-2 / e-3 determin evaluarea e-.C dac aceasta nu este & atunci
valoarea expresiei condi%ionale devine e-2, altfel e-3.
+. (peratorul *ecven',.
/ste reprezentat prin , i se foloseste n situa%iile n care sintaxa impune prezen%a unei
singure expresii! dar prelucrarea presupune prezen%a i evaluarea mai multor expresii. /xemplu:
a W b ( (ta, ab, bt) / a
-. (peratori unari
a) (peratorul *i.eof.
+plicat asupra unei varia(ile furnizeaz numrul de octe%i necesari stocrii varia(ilei
respective. 4oate fi aplicat i asupra unui tip sau asupra tipului unei expresii:
siReof variabila
siReof tip
siReof e-presie
siReof este un operator cu efect la compilare.
operator descriere 'ip operand tip rezultat preceden%
siReof necesar de memorie varia(il sau tip unsigned <
b) (peratorii de incrementare /decrementare.
operator descriere tip operand tip rezultat preceden%
++ preincrementare aritmetic sau pointer int,long,double,
unsigned,pointer
<
++ postincrementare aritmetic sau pointer la fel <
-- predecrementare aritmetic sau pointer la fel <
-- postdecrementare aritmetic sau pointer la fel <
c) (peratori de adre*are indirect, / determinare adre*,
& entitate - o(%ine adresa unei entit%i,
pointer - pentru adresare indirect - adic memoreaz adresa unei entit%i printr-o valoare a
unui pointer
operator descriere tip operand tip rezultat preceden%
T indirectare 4ointer la ' ' <
Y adresare ' pointer la ' <
\ nega%ie aritmetic int,long,double <
[ nega%ie logic aritmetic sau pointer int <
d) (peratori de acce* 0
- la elementele unui ta(lou
- la cmpurile unei structuri sau unei uniuni
- indirect prin intermediul unui pointer la cmpurile unei structuri sau unei uniuni
Aperatorii de acces sunt:
9; indexare folosit n expresii de forma tablou9indice;
& selecie direct - pentru adresarea unui cmp dintr-o structur sau uniune su( forma:
struct&selector
selecie indirect - pentru accesul la un cmp dintr-o structur sau uniune! a crei adres este
memorat ntr-un pointer
pointer -X selector este ec8ivalent cu (T pointer) & selector
'o%i aceti operatori de acces! mpreun cu operatorul de apel de func%ie () au cea mai
ridicat prioritate! i anume 3.
<&
Operatori de acces
operator descriere exemple preceden%
() apel de func%ie CVrt(-),printf(,salut'n+) .
9; indexare ta(lou -9i;, a9i;9Q; .
& selector
structur
student&nastere&an .
-X selector indirect
structur
pstud-Xnume .
Ordinea evaluarii operanzilor
preceden% Aperatori sim(ol asociativitate
3 apel func%ie # selec%ie () 9; & -X 1D
< Unari T Y - [ \ 11 -- siReof D1
9 Jultiplicativi T S % 1D
> +ditivi 1 - 1D
B Deplasri WW XX 1D
; -ela%ionali W X W X 1D
= egalitate # neegalitate [ 1D
: H2 pe (i%i Y 1D
I 1+U exclusiv pe (i%i Z 1D
3& 1+U inclusiv pe (i%i : 1D
33 H2 logic YY 1D
3< 1+U logic :: 1D
39 *ondi%ional (/ D1
3> +tri(uire op D1
3B ,irgula , 1D
<3

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