Sunteți pe pagina 1din 10

SISTEME DE OPERARE I LIMBAJE DE PROGRAMARE

Limbajul C
6.Introdu!r! in C. Prini"iil! limbajului C
Limbajul C este un limbaj de programare foarte cutat i iubit de
programatori. Odat ce o persoan nva s programeze n C, rareori se
ntmpl s prefere s programeze n alt limbaj. C combin subtilitatea i
elegana cu puterea i fleibilitatea. !ste un limbaj structurat, cu largi
posibiliti, creat de un programator pentru programatori. !l nu este un produs
inventat artificial, ci o consecin a aspiraiei programatorilor spre un limbaj
mai bun.
C a fost inventat i implementat de "ennis #itc$ie pe "!C %"%&'',
folosind sistemul de operare ()*+ i este rezultatul unui proces de dezvoltare
care a nceput cu un vec$i limbaj numit ,C%L, creat de -artin #ic$ards.
,C%L a influenat limbajul numit ,, care a fost inventat de .en /$ompson i a
condus la apariia limbajului C, n anii '012.
Limbajul C a fost descris n lucrarea The C Programming Language de
,rian .ernig$an i "ennis #itc$ie n '013. "atorit popularitii sale, n '034
a fost organizat un comitet care s creeze standardul 5)6* pentru limbajul C.
La aceast dat, standardul 5)6* C este complet, toate compilatoarele C s&au
conformat deja cu standardul, iar versiunea C pe care dumneavoastr o nvai
acum este bazat pe acest standard.
C este adeseori considerat ca limbaj de nivel mediu. 7naintea apariiei
limbajului C, eistau practic dou tipuri de limbaje de programare a
computerelor8 limbaje de asamblare i limbaje de nivel nalt.
Limbajele de asamblare conin reprezentrile simbolice ale
instruciunilor main eecutate de computer. *n limbajele de asamblare,
programatorul lucreaz simbolic cu instruciunile pe care computerul le
eecut. Limbajele de asamblare nu conin structuri de control.
Limbajele de nivel nalt conin variate structuri de, control i comenzi
d! intrare9ieire, care fac programarea uoar i rapid. !lementele care
compun limbajele de nivel nalt nu au legtur direct cu modul n care
computerul eecut programul. 5ceast separaie face deseori ca programele
scrise n limbaje de nivel nalt s fie mai puin eficiente dect cele scrise n
limbaje de asamblare.
"eoarece se consider c programarea n limbajele de asamblare este o
sarcin anevoioas, a eistat necesitatea apariiei unui limbaj care s poat fi
utilizat mai uor i care s ofere n acelai timp aceeai eficien ca i limbajele
de asamblare. 5cesta este motivul pentru care C a fost iniial proiectat. !l
combin cu succes structurarea din limbajele do nivel nalt cu puterea i
eficiena din limbajele de asamblare.
*niial, C a fost folosit pentru a crea software de sistem :programe care
ajut computerul8 sisteme de operare, compilatoare, editoare;. %e msur ce C
a ctigat n popularitate el a nceput s fie folosit la programarea cu scop
general. 5stzi limbajul C este folosit de programatori pentru orice sarcin de
programare deoarece este limbajul care a supravieuit testului timpului i a
dovedit c este multilateral i puternic.
pagina '9'2 5utor8 dr.ing. ec Cezar )!C<(L!6C(
SISTEME DE OPERARE I LIMBAJE DE PROGRAMARE
Limbajul C
!lementele individuale ale limbajului C nu sunt de sine stttoare, ci n
conjuncie unul cu celalalt. "e aceea este necesar s nelegem cteva aspecte
c$eie ale limbajului C, naintea eaminrii n detaliu a fiecrui element.
6.#. Com"on!nt!l! unui "ro$ram C
/oate programele C au anumite componente i trsturi comune. !le
conin una sau mai multe funcii, fiecare din ele avnd una sau mai multe
instruciuni n C, o funcie este o subrutin care poate fi apelat de alte pri
ale programului. O instruciune specific o aciune ce trebuie eecutat de
program. Cu alte cuvinte, instruciunile sunt pri ale programului care eecut
anumite operaii i sunt coninute n funcii.
/oate instruciunile C se termina cu =>=. C nu recunoate sfritul liniei ca
terminator. 5ceasta nseamn c nu eist constrngeri n ceea ce privete
poziia unei instruciuni n linie. "e asemenea, se pot plasa dou sau mai multe
instruciuni pe o linie.
Cea mai simpl form a unei funcii C este urmtoarea8
Function_name !
?
secvena instruciunilor
@
unde8
function_name este numele funciei
secvena instruciunilor poate conine una sau mai multe instruciuni
:te$nic, o funcie poate s nu conin nici o instruciune, dar acesta este un caz
degenerativ;.
Function_ name poate fi compus din8
& literele mari ale alfabetului
& literele mici ale alfabetului
& cifrele 2&0
& underscore
C este case"sensitive, ceee ce nseamn c recunoate diferentele dintre
literele mari i literele mici. 5stfel, Aunc i func sunt nume diferite.
"ei un program C poate conine mai multe funcii, singurele funcie care
trebuie neaprat s eiste este funcia main:;.
Auncia main:; este funcia cu care ncepe eecuie programului. 5dic, a&
tunci cnd programul este lansat, el eecut instruciunile din funcia main:;
ncepnd cu prima instruciune ce urmeaz dup paranteza acolad desc$is.
!ecuia programului se termin cnd este ntlnit paranteza acolad nc$is
:aceste paranteze acolade nu eist n versiunea compilat a programului, dar
este bine s ne gndim la ele n acest mod;.
O alt component important a tuturor programelor C o constituie
biblioteca de funcii C, funcii pe care programul dumneavoastr le poate
utiliza. #iblioteca de funcii C conine funcii care eecut operaii de
pagina B9'2 5utor8 dr.ing. ec Cezar )!C<(L!6C(
SISTEME DE OPERARE I LIMBAJE DE PROGRAMARE
Limbajul C
intrare9ieire cu discul, manipularea irurilor, matematice i altele. 5vantajul
meninerii acestor funcii ntr&o bibliotec const n mrirea fleibilitii. Com
vedea ulterior c orice program C va folosi funcii din biblioteca de funcii C.
(na din cele mai folosite funcii din biblioteca de funcii C este printf:;.
!a este principala funcie de ieire a limbajului C i cea mai simpl form a sa
este8
"rint%&'(ir d! a%i(at)*+
printf:; afieaz pe ecran caracterele care sunt cuprinse ntre g$ilimele.
:D$ilimelele nu sunt afiate pe ecran;. 7n C, unul sau mai multe caractere
incluse ntre g$ilimele constituie un ir. <irul cuprins ntre parantezele funciei
printf:; se numete argument pentru printf: ;. 7n general, informaia transmis
unei funcii se numete argument.
%entru a apela o funcie, trebuie specificat numele ei, urmat de o perec$e
de paranteze rotunde care conin lista de argumente ce trebuie transferate
funciei. "ac o funcie nu are nici un argument, atunci perec$ea de paranteze
va fi goal. "ac eist mai multe argumente, acestea trebuie separate prin
virgule.
O alt component comun celor mai multe programe C sunt fi$ierele
header. *n C, informaiile despre funciile din biblioteca standard se gsesc n
diferite fiiere furnizate mpreun cu compilatorul. 5ceste fiiere se recunosc
uor, deoarece toate au etensia E.
Compilatorul C folosete informaiile din aceste fiiere pentru a manipula
funciile din bibliotec. 5ceste fiiere pot fi adugate programului folosind
directiva %re%rocesor Finclude. "irectivele preprocesor nu sunt pri ale
limbajului C, ci mai curnd instruciuni date de dumneavoastr compilatorului.
"irectiva Finclude instruiete preprocesorul s citeasc un alt fiier i s l
includ n program.
Cel mai cerut fiier $eader se numete 6/"*O.E.
"irectiva urmtoare include acest fiier.
,inlud! -.tdio./-
)umele fiierului poate fi scris cu litere mari sau litere mici, dar folosirea
literelor mici constituie metoda tradiional. 6/"*O.E conine, printre altele,
informaii cu privire la funcia printf:;.
"e notat c directiva Finclude nu se termin cu > deoarece Finclude nu
este cuvnt c$eie al limbajului C. 7n sc$imb Finclude este o instruciune ctre
compilatorul C.
Cu cteva ecepii, C ignor spaiile. 5ceasta nseamn c nu conteaz n
ce coloan apare o instruciune, o parantez acolad sau numele unei funcii.
%oziionarea instruciunilor, funciilor i parantezelor este o decizie
stilistic i nu una de programare.
(nul din cele mai simple programe ce pot fi scrise in C este artat mai
pagina 49'2 5utor8 dr.ing. ec Cezar )!C<(L!6C(
SISTEME DE OPERARE I LIMBAJE DE PROGRAMARE
Limbajul C
jos8
,inlud! '.tdio./)
main&*
0
"rint%&-A!.ta !.t! un .urt "ro$ram C-*+
@
"up compilare i eecuie, acest program afieaz pe displaG mesajul8
A!.ta !.t! un .urt "ro$ram C.
"ei conine numai cinci linii, el ilustreaz acele aspecte comune tuturor
programelor C. 6 l eaminm linie cu linie. %rime linie a programului este8
,inlud! .tdio./
!a face ca fiierul 6/"*O.E s fie citit de compilatorul C i s fie inclus
in program. 5cest fiier conine informaii n ceea ce privete printf:;. 5 doua
linie,
main&*
definete nceputul funciei main:;. "up cum am afirmat anterior, toate
programale C trebuie s conin o funcie main, funcie cu care ncepe eecuia
programului. "up main:; urmeaz o parantez acolad desc$is, care
marc$eaz nceputul declaraiilor i instruciunilor ce formeaz funcia.
(rmtoarea linie din program este8
"rint%&'A!.ta !.t! un "ro$ram C)*+
!a este o instruciune C care apeleaz funcia "rint%&* din biblioteca
standard, pentru a afia pe ecran irul de caractere cuprins ntre g$ilimele.
%rogramul se termin la ntlnirea parantezelor acolade nc$ise.
*at un alt program simplu8
,inlud! .tdio./
main&*
?
"rint%&1A!.ta !.t! )*+
"rint%&1un alt )*+
"rint% &1"ro$ram C)*+
@
5cest program afieaz pe ecran8
A!.ta !.t! un alt "ro$ram C.
pagina H9'2 5utor8 dr.ing. ec Cezar )!C<(L!6C(
SISTEME DE OPERARE I LIMBAJE DE PROGRAMARE
Limbajul C
%unctul c$eie el acestui program este c instruciunile sunt eecutate
secvenial, ncepnd cu paranteza acolad desc$is i terminnd cu paranteza
acolad nc$is.
6.2. Cr!ar!a (i om"ilar!a unul "ro$ram
-odul n care se creeaz i se compileaz un program este determinat n
cea mai mare msur de compilatorul care se folosete i de sistemul de
operare sub care se lucreaz. %entru un *,- %C :sau alte calculatoare
compatibile; eist la dispoziie cteva compilatoare ecelente, cum ar fi /urbo
C sau IuicJ C, care conin medii de programare integrate. "ac folosii un
astfel de mediu, putei edita, compila i eecuta programul direct n acest
mediu. 5ceasta este o opiune ecelent pentru nceptori & trebuie doar urmate
instruciunile primite mpreun cu compilatorul.
"ac folosii un compilator command&line, cum ar fi compilatorul ()*+
C atunci trebuie s parcurgei urmtoarele etape pentru a crea i compila
programul8
'. Creai programul folosind un editor.
B. Compilai programul.
4. !ecutai programul.
-etoda eact de parcurgere a acestor pai este eplicat n manualul
compilatorului.
)umele programului trebuie s conin etensia C. 5ceast etensie v
ajut s recunoatei acele fiiere care conin programe C. "e asemenea, unele
compilatoare presupun automat c, dac un fiier conine un program C, atunci
va folosi etensia C.
Aiierul care conine programul C se numete fi$ier surs& fiierul care
conine forma compilat a programului se numete fi$ier object, iar fiierul care
conine forma eecutabil a acestuia se numete fi$ier e'ecutabil.
"ac n programul surs este ceva incorect, compilatorul transmite un
mesaj de eroare de sinta n momentul n care ncearc s compileze
programul. 5cest lucru se repet pentru fiecare incorectitudine gsit. Cele mai
multe compilatoare C ncearc s dea sens programului supus compilrii,
indiferent de ceea ce este scris n program. "in acest motiv, eroarea semnalat
nu reflect totdeauna cauza real a erorii. "e eemplu, dac n mod accidental
uitm s desc$idem paranteza acolad a funciei main:; din programele
precedente, unele compilatoare vor semnala instruciunea printf:; ca fiind un
identificator incorect. 5adar, cnd primim un mesaj de eroare de sinta,
pentru a gsi cauze, fii pregtii s analizai atent cel puin cteva linii de
program situate deasupra liniei care a fost semnalat ca eronat.
-ulte compilatoare C afieaz nu numai erorile, dar i unele
avertismente. Limbajul C a fost proiectat s fie foarte ngduitor i s
compileze orice program care este corect din punct de vedere sintactic. /otui,
unele c$estiuni, c$iar dei sunt corecte sintactic, sunt suspecte. Cnd
pagina K9'2 5utor8 dr.ing. ec Cezar )!C<(L!6C(
SISTEME DE OPERARE I LIMBAJE DE PROGRAMARE
Limbajul C
compilatorul ntlnete astfel de situaii, el afieaz un avertisment. "um&
neavoastr, ca programator, trebuie s decidei dac avertismentul este
justificat sau nu. (nele compilatoare v permit s activai anumite opiuni care
s afieze informaii despre programul care se compileaz. (neori aceste
informaii sunt afiate sub form de mesele de avertizare c$iar dac nu este
vorba de o avertizare propriu&zis.
"ac utillzai /urbo C, putei crea i compila programul dumneavoastr
folosind mediul integrat. "ac utilizai o interfa command&line
:presupunnd c numele programului este /!6/.C;, aceasta v va permite s
compilai programul dup ce ai folosit un editor de tete pentru crearea lui,
tastnd8
/CC /!6/.C
"ac folosii -icrosoft C, urmtoarea comand v va permite s
compilai programul, dup ce ai folosit un editor de tete pentru crearea lui :se
presupune ca numele programului este /!6/ C;8
CL /!6/.C
"ac folosii /urbo C L L sau IuicJ C , putei edita, compila i rula
programul n mediul respectiv.
6.3. D!larar!a 4ariabil!lor (i a.i$nar!a 4alorilor
O variabil& este o locaie de memorie creia i s&a atribuit un nume i care
poate conine diferite valori. )umai cele mai banale programe C nu conin
variabile. 7n C, toate variabilele trebuie declarate nainte de utilizarea lor, n
scopul de a pregti compilatorul C n ceea ce privete tipul variabilei ce va fi
utilizat. Limbajul C suport cinci tipuri de date, prezentate in /abelul 3.'
mpreun cu cuvintele c$eie care le reprezint.
/abelul 3.'
/ip 6emnificaie Cuvnt c$eie
caracter dat caracter c$ar
ntreg numr ntreg cu semn int
virgul flotant numr cu zecimale float
"ubl precizie numr cu zecimale reprezentat in
dubl precizie
double
Coid fr valoare void
O variabil de tip c$ar are n general lungimea de 3 bii i conine n mod
normal un singur caracter. "eoarece C este foarte fleibil, o variabil de tip
c$ar poate fi utilizat de asemenea ca ,,ntreg micM, dac se dorete. O
variabil de tip int poate conine numere ntregi cu semn :numere fr parte
pagina N9'2 5utor8 dr.ing. ec Cezar )!C<(L!6C(
SISTEME DE OPERARE I LIMBAJE DE PROGRAMARE
Limbajul C
fracionar; din domeniul de valori &4B.1N3 la 4B.1N1 :la unele computere plaja
poate fi mai mare;.
Cariabilele de tip float i double conin numere n virgul flotant, deci
care pot avea componente fracionare. "iferena ntre float i double const n
faptul c double ofer o precizie de dou ori mai mare :numr de cifre
semnificative; dect float. Cariabilele de tip float i double pot conine numere
foarte mari.
%entru a declare o variabil se folosete aceast form general8
t(%e var_name)
unde8 t(%e este tipul de dat C
var_name " este numele variabilei.
"e eemplu, n continuare se declar variabila ount!r ca fiind de tipul int.
int ount!r+
*n C, declararea unei variabile trebuie s se termine cu >. Cariabilele se
pot declara n dou locuri din program8 in interiorul funciilor sau n eteriorul
lor. Cariabilele declarate n eteriorul funciilor se numesc variabile globale i
ele pot fi accesate de orice funcie din program. Cariabilele globale eist tot
timpul n care se eecut programul. Cariabilele declarate in interiorul funciilor
se numesc variabile locala. O variabil local este cunoscut i poate fi
accesat numai de funcia n interiorul creia a fost declarat. !ist practica
de a declara toate variabilele locale utilizate de o funcie dup paranteza
acolad desc$is, adic la nceputul funciei.
!ist dou aspecte importante de reinut8
variabilele locale dintr&o funcie nu au nici o legtur cu variabilele
locale din oricare alt funcie. 5dic dac o variabil numit count este
declarat ntr&o funcie, o alt variabil numit count poate fi declarat ntr&o
alt funcie, cele dou variabile fiind complet separate i neavnd nimic n
comun una cu cealalt.
variabilele locale sunt create cnd funcia respectiv este apelat, i ele
sunt distruse cnd funcia cedeaz controlul programului apelant. "e
asemenea, variabilele locale nu i menin valorile ntre dou apeluri ale
funciei.
6e pot declara mai multe variabile de acelai tip ntr&o declaraie, folosind
virgule. "e eemplu, declaraia urmtoare fieaz variabilele , G i z ca fiind
de tipul float.
%loat 56768+
Ca i numele funciilor, numele de variabile n C pot conine literele
alfabetului, cifrele de la 2 la 0 i underscore. "up cum s&a artat deja, C este
casesensitive, adic literele mari i literele mici sunt tratate ca litere diferite,
deci CO()/ i count sunt dou nume de variabile complet diferite. %entru a
asigna o valoare unei variabile, punei numele ei n stnga semnului egal i apoi
pagina 19'2 5utor8 dr.ing. ec Cezar )!C<(L!6C(
SISTEME DE OPERARE I LIMBAJE DE PROGRAMARE
Limbajul C
punei valoarea pe care vrei s o dai variabilei n dreapta semnului egal. *n C,
operaia de asignare este o instruciune, deci ea trebuie terminat prin >. Aorma
general a unei instruciuni de asignare este8
*ar_ name + valoare)
"e eemplu, pentru a asigna unei variabile de tip ntreg denumit num
valoarea '22, trebuie scris8
numO'22>
"up cum eist diferite tipuri de variabile, eist i diferite tipuri de
constante. O constant& este o valoare fi utilizat n program. Constantele
sunt folosite deseori pentru a iniializa variabilele, la nceputul eecuiei
programului.
O constant tip caracter poate fi specificat plasnd caracterul ntre apos&
trofuri. "e eemplu, pentru a specifica litera 5 ca o constant tip caracter,
trebuie scris =5=. Constantele n virgul mobil trebuie s includ punctul
zecimal. "e eemplu, pentru a specifica numrul '22,' trebuie scris '22.' .
"ac o constant float nu are cifre n dreapta punctului zecimal, atunci n
aceste poziii trebuie folosit 2. "e eemplu, pentru a instrui compilatorul c
'22 este un numr float, se scrie '22.2.
%utei folosi funcia printf:; pentru a afia valori de tip c$ar, int, float sau
double. %entru a realiza aceasta, trebuie s nvm mai multe despre printf:;
6 privim mai nti la un eemplu8
printf:M5fim numrul PdM,00;>
5ceast instruciune afieaz pe displaG8
A%i(9m num9rul ::
"up cum se vede, aceast apelare a funciei printf:; conine nu unul, ci
dou argumente. %rimul este un ir ntre g$ilimele, iar al doilea este constanta
00. 6 notm c argumentele sunt separate unul de cellalt prin virgul. %rimul
argument poate conine caractere normale sau specificatori de format care
ncep cu P. Caracterele normale sunt afiate pe ecran n ordinea n care sunt
ntlnite n ir :citind de la stnga la dreapta;. 6pecificatorul de format
informeaz printf:; c o alt categorie de date va fi afiat. *n acest caz, Pd
nseamn c trebuie afiat un ntreg n format zecimal. Caloarea care trebuie
afiat se afl n al doilea argument, i este afiat pe ecran n locul n care
specificatorul de format este ntlnit n ir. %entru a nelege relaia dintre
caracterul normal i specificatorul de format, s eaminm instruciunea8
printf:Q5fim Pd din nouM,00;>
pagina 39'2 5utor8 dr.ing. ec Cezar )!C<(L!6C(
SISTEME DE OPERARE I LIMBAJE DE PROGRAMARE
Limbajul C
5cum funcia printf:; afieaz8
A%i(am :: din nou.
"up cum se vede, valoarea asociat cu specificatorul de format este
afiat n locul n care este ntlnit n sir specificatorul de format. "ac se
dorete afiarea unei valori tip /ar6 specificatorul de format este Pc. %entru a
specifica o valoare float, se folosete Pf. 6pecificatorul de format Pf se
folosete att pentru valori de tip float, ct i double. Com vedea ulterior c
funcia printf:; are mult mai multe posibiliti. 6 notm c valorile care pot fi
afiate folosind specificatori de format nu trebuie s fie neaprat constante. 7n
acelai mod se afieaz i variabilele.
%rogramul de mai jos ilustreaz cele trei concepte noi introduse n aceast
seciune. %rimul declar o variabil denumit num, al doilea asigneaz acestei
variabile valoarea '22, iar a treilea utilizeaz funcia printf:; pentru a afia pe
ecran valoarea este '22. 6 eaminm atent acest program8
Finclude Mstdio.$M
main:;
?
int num>
num O '22>
printf:Qvaloarea este PdR,num;>
@
"eclaraia8
int num>
stabilete c num este o variabil de tip ntreg.
%entru a afia valoarea lui num, programul folosete instruciunea8
printf:Mvaloarea este PdM,num;>
5cest program creeaz variabile de tip c$ar, float i double, asigneaz
fiecreia cte o valoare i afieaz aceste valori pe ecran.
Finclude Mstdio.$R
main:;
?
c$ar c$>
float f>
double d>
c$ OSS>
f O '22.'B4>
pagina 09'2 5utor8 dr.ing. ec Cezar )!C<(L!6C(
SISTEME DE OPERARE I LIMBAJE DE PROGRAMARE
Limbajul C
d O 'B4.220>
printf:Qc$ O Pc Q, c$;>
printf:Rf O Pf R, f;>
printf:Rd O Pf R , d;>
@
pagina '29'2 5utor8 dr.ing. ec Cezar )!C<(L!6C(

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