Sunteți pe pagina 1din 19

1

CURS
Sumar
Generaliti. Noiuni
primare C/C++
Introducere n programare
Tipuri de fiiere n C/C++
Erori de sinta i erori logice ntr!un program
"tructura programelor C
#oca$ularul lim$a%ului
&peraii de citire i scriere de la consol
#aria$ile. Tipuri de date. Tipuri standard
Constante
Epresii. &peratori
'plicaii re(ol)ate
'plicaii propuse
1. Introducere n programare
*rogramele de calculator+ cunoscute i su$ numele de componente soft+ sunt
constituite dintr!o serie de instruciuni pe care le eecut calculatorul. C,nd se creea( un
program+ tre$uie specificate instruciunile pe care calculatorul tre$uie s le eecute pentru a
reali(a operaiile dorite.
C,nd se creea( un program+ instruciunile se pstrea( ntr!un fiier '"CII la al crui
nume este ataat etensia+ care implicit este .c+ n ca(ul programelor reali(ate n lim$a%ul C+ sau
.cpp+ n ca(ul programelor reali(ate n lim$a%ul C++.
Instruciunile pe care le eecut un calculator sunt de fapt grupuri de 1 i - .cifre
$inare/ care repre(int semnale electronice produse n interiorul calculatorului. *entru a
programa primele calculatoare .n anii 01-/+ programatorii tre$uiau s neleag modul n care
calculatorul interpreta diferitele com$inaii de - i 1+ deoarece programatorii scriau toate
programele folosind cifre $inare. Cum programele de)eneau din ce n ce mai mari+ acest mod
de lucru a de)enit foarte incomod pentru programatori. 2e aceea cercettorii au creat lim$a%e
de programare care permit eprimarea instruciunilor calculatorului ntr!o form mai
accesi$il omului.
1
'stfel c+ dup ce programatorii scriau instruciunile ntr!un fiier .numit fiier surs/+
un al doilea program .numit compilator/+ con)ertea instruciunile lim$a%ului de programare
n irurile de - i 1 .cunoscute su$ numele de cod main/+ pe care le putea nelege
calculatorul. 3iierele re(ultate+ cu etensia .ee sau .com conin codul main .iruri de - i
1/ pe care calculatorul l )a eecuta. 3igura de mai %os ilustrea( procesul de compilare a unui fiier
surs+ n urma cruia se o$ine un program eecuta$il.
void main()
100011101101
{
101110111101

110111101111
}
011110100100
nume4fisier.c .sau .cpp/ compilator nume4fisier.ee
3igura de mai sus e)idenia( faptul c+ un compilator con)ertete instruciunile din cod surs n
cod main.
5. Tipuri de fiiere n C/C++
Toate compilatoarele de C++ sunt i compilatoare de C. 6ns+ atunci c,nd se
compilea( programe n C tre$uie s se rein un lucru important7 fiierele tre$uie s ai$
etensie .c nu .cpp. C8iar dac C este coninut n C+++ eist c,te)a diferene minore ntre cele
dou lim$a%e din punctul de )edere al lim$a%ului C. 2in acest moti)+ programele n C tre$uie
compilate ca programe n C+ iar cele n C+++ ca programe n C++.
'stfel c+ atunci c,nd se scrie un program n C sau C+++ se plasea( instruciunile ntrun
fiier surs care are dup ca( etensiile .c sau .cpp. 2ac programul se compilea( cu succes+
compilatorul )a crea un fiier eecuta$il+ cu etensia .ee.
9ulte din programele reali(ate utili(ea( aa numitele fiiere antet+ sau fiiere
$i$liotec .acestea au etensia .8/+ care conin instruciuni utili(ate n mod curent. 'cestea sunt
introduse prin intermediul unei directi)e .:include/.
2ac se )a eamina coninutul directorului de lucru dup ce s!a reali(at i compilat un
program+ se )a putea constata ca )a eista unul sau mai multe fiiere cu etensia .o$%. 'ceste
fiiere+ denumite fiiere o$iect+ conin instruciuni su$ form de iruri de - i 1+ pe care le
nelege calculatorul. Totui+ nu se pot eecuta aceste fiiere o$iect+ deoarece coninutul lor nu
este c8iar complet.
Compilatorul de C/C++ pune la dispo(iie rutine .cum ar fi printf/+ care reali(ea(
operaiile frec)ent utili(ate i reduc numrul de instruciuni care tre$uie introduse n program.
5
2up ce compilatorul eaminea( sintaa programului+ el creea( un fiier o$iect. 6n ca(ul
programului nume4fis.c .sau+ nume4fis.cpp/+ compilatorul )a crea un fiier o$iect denumit
nume4fis.o$%. 2up aceea+ un program denumit editor de legturi alctuiete programul
eecuta$il prin com$inarea instruciunilor programului din fiierul o$iect cu funciile pe care le
deine compilatorul .cum ar fi printf+ de eemplu/. 2e cele mai multe ori+ atunci c,nd se
apelea( compilatorul pentru a eamina fiierul surs+ acesta )a apela n mod automat editorul de
legturi dac programul s!a compilat cu succes. 3igura urmtoare ilustrea( procesul de
compilare i de reali(are a legturilor unui program.
Scriere
nume_fis.c
Rulare
(sau .cpp) nume_fis.exe
2'
Compilare
Cu
2' Editare Cu
nume_fis.c
succes?
legturi
succes?
(sau .cpp)
nume_fis.obj
N;
Editare
N;
<. Erori de sinta i erori logice ntr!un program
3iecare lim$a% de programare are un set de reguli+ denumite reguli sintactice+ care tre$uie
respectate atunci c,nd sunt introduse instruciunile n cadrul programului. 2ac este nclcat o
regul sintactic+ programul nu )a fi compilat cu succes. 6ntr!o astfel de situaie+ compilatorul )a
afia pe ecran mesa%e de eroare ce preci(ea( linia din program care conine eroarea+ precum i o
scurt descriere a acesteia.
*e msur ce programele scrise )or de)eni mai complee+ pot aprea situaii n care
programul se compilea( cu succes+ dar nu eecut corect cerea dat de utili(ator. C,nd
programul nu lucrea( aa cum dorete programatorul+ nseamn c el conine erori logice+
numite i $ugs. C,nd programele scrise conin erori logice tre$uie ncercat descoperirea i
corectarea cau(ei erorii. *rocesul de nlturare a erorilor logice dintr!un program este numit
depanare.
<
1. "tructura programelor C
=im$a%ul C a aprut la nceputul anilor >- ! creaia lui 2ennis ?itc8ie i @rian
Aerning8an. ;n program C este alctuit din una sau mai multe funcii. & funcie este o
colecie de instruciuni care eecut o anumit sarcin.
6n linii mari+ putem spune c7
3iecrui algoritm .su$algoritm/ n C i corespunde o funcie care codific algoritmul
.su$algoritmul/ n instruciuni C.
& funcie poate ntoarce sau nu un re(ultat. 2ac aceasta nu ntoarce nici un re(ultat+
spunem c tipul re(ultatului este void. Tot aa+ eist funcii cu re(ultat de tip ntreg+ real+
etc.
& funcie poate conine declaraii de )aria$ile+ care pot fi utili(ate doar de ea+ nu i de
celelalte funcii.
*rogramul C este alctuit din una sau mai multe funcii+ din care una este rdcin ! adic
nu poate lipsi i eecuia programului ncepe automat cu ea. 'ceasta se numete main. 2e
asemenea+ programul poate conine i declaraii de )aria$ile glo$ale ! adic )aria$ile cu
care pot lucra toate funciile care l alctuiesc.
" )edem cum arat cel mai simplu program C7
void main ()
{
}
*rogramul de mai sus este corect. Cu toate acestea el nu face nici o operaie. 2ac l anali(m+
putem trage primele conclu(ii7
B Este alctuit numai din funcia rdcin ! main.
B 3uncia rdcin este de tipul void ! adic nu ntoarce nici un re(ultat.
B Cele dou parante(e rotunde () se ataea( oricrei funcii. 6ntre ele se scriu opional
anumii parametri. ;n parametru este o informaie pe care programul o transmite
funciei. 6n acest ca( ei lipsesc.
B Cele dou acolade {} constituie corpul funciei. 6ntre ele se scriu instruciunile care o
alctuiesc. 6n ca(ul de fa mulimea lor este )id.
&$ser)aie 17 =im$a%ul face distincie ntre literele mari i cele mici. *rogramul de mai %os d
eroare de sinta+ pentru c tipul oid nu este cunoscut.
oid main ()
{
}
1
&$ser)aie 57 Nu are importan plasarea cu)intelor pe linie+ nici spaiile dintre ele.
*rogramul mai poate fi scris i aa7
void main ( ) { }
'ceasta nu nseamn c este $ine s procedm astfel. El poate fi rulat+ dar este greu de neles.
&$ser)aie <7 Este permis ca tipul funciei s lipseasc. 6n acest ca( se presupune c funcia
ntoarce un re(ultat ntreg .de tipul int/. 2e eemplu putem scrie aa7
main()
{
}
6n acest ca(+ la compilare se primete un a)ertisment. 2e )reme ce tipul este int+ se
ateapt ca funcia s ntoarc un re(ultat de acest tip. 2ar+ ea nu ntoarce nimic. 'cest
a)ertisment poate fi ignorat.
C. #oca$ularul lim$a%ului
#oca$ularul oricrui lim$a% este format din7
B setul de caractereD
B identificatoriD
B separatoriD
B comentarii.
"etul de caractere. ?epre(int ansam$lul de caractere cu a%utorul crora se poate scrie un
program C7
! literele mari i mici ale alfa$etului engle( .' ! E+ a ! (/D
! cifrele sistemului de numeraie n $a(a 1- .- ! F/D
! caractere speciale7 ++ !+ G+ /+ H+ I+ J+ K+ .+ /+ L+ M+ N+ O+ .+ ++ 7+ D+ :+ P+ Q+ 4+ i !lan" .spatiu/
Identificatori. *rin identificatori nelegem o succesiune de litere+ cifre sau caracterul
special 04R din care prima nu tre$uie s fie cifr. Cu a%utorul identificatorilor se asocia( nume
constantelor+ )aria$ilelor+ procedurilor+ etc.
Eemple de identificatori7 a1# tasta# un$numar# $varia!ila.
Contraeemple7 1ar# mt% .primul ncepe cu o cifr+ iar al doilea conine un caracter
special/.
"eparatori i comentarii. "eparatorii sunt+ dup ca( unul sau mai multe $lancuri+
caracterul C?+ sf,ritul de linie sau caraterul 0DR. Comentariile se introduc ntre caracterele 0/GR si 0G/R
pentru mai multe linii ale tetului surs+ respecti) 0//R ptr. o sigur linie de comentarii ale tetului
surs.
C
S. Citiri. "crieri
3unciile print&() i scan&() efectuea( ieiri+ respecti) intrri formatate ! ele pot
scrie+ respecti) citi date n di)erse formate. 'm$ele funcii tiu s lucre(e cu orice cu orice tip de
date eistent+ inclusi) caractere+ iruri i numere. *rototipurile lor sunt7
printf('&ormat()#'parametri(*)+
scanf('&ormat()#'parametri(*)+
*entru a putea efectua citiri/scrieri tre$uie utili(at directi)a7
,include'stdio.-(
deoarece+ pentru a utili(a funciile cerute+ compilatorul are ne)oie de anumite informaii
referitoare le ele. 'cestea se gsesc ntr!un fiier 8eader .antet/ numit stdio.-. prin directi)a
,include se solicit ca fiierul stdio.8 s fie inclus naintea tetului care repre(int
programul C.
"pecificatorii de format printf./
Cod
3ormat
Tc
Caracter
Td
Nr. ntregi n $a(a 1- cu semn
Ti
Nr. ntregi n $a(a 1- cu semn
Te
Notaie tiinific .cu litera e mic/
TE
Notaie tiinific .cu litera E mare/
Tf
Nr. (ecimal n )irgul mo$il
Tg
3olosete Te sau Tf .care din ele este mai mic/
TG
3olosete TE sau T3 .care din ele este mai mic/
To
Numr n octal fr semn
Ts
Uir de caractere
Tu
Numere ntregi (ecimale fr semn
T
Nr. 8ea(ecimale fr semn .cu litere mici/
TV
Nr. 8ea(ecimale fr semn .cu litere mari/
Tp
'fiea( un pointer
Tn
'rgumentul asociat este un pointer de tip ntreg n
care a fost plasat numrul de caractere scrise p,n
atunci
TT
'fiea( un semn T
2e eemplu+ ptr. a afia un numr ntreg reinut ntr!o )aria$il n se folosete urmtoarea
apelare a funciei print&()7
print&(./d0# n)+
"pecificatorii de format pentru scanf./
Cod "emnificaie
Tc Citete un singur caracter
Td Citete un numr ntreg (ecimal
Ti Citete un numr ntreg (ecimal
Te Citete un numr n )irgul mo$il
Tf Citete un numr n )irgul mo$il
Tg Citete un numr n )irgul mo$il
S
To Citete un numr n octal
Ts Citete un ir
T Citete un numr n 8ea(ecimal
Tp Citete un pointer
Tn *rimete o )aloare egal cu numrul de caractere
citite p,n atunci
Tu Citete un numr ntreg fr semn
TL M Caut un set de caractere
&$ser)aie7 Toate )aria$ilele folosite pentru a primi )alori prin scan&() tre$uie s fie
transmise prin adresele lor. 'ceasta nseamn c toate argumentele tre$uie s fie pointeri la
)aria$ilele care primesc efecti) intrrile. 2e eemplu+ pentru a citi un ntreg ntr!o )aria$il n se
folosete urmtoarea apelare a funciei scan&()7
scan&(./d0# 1n)+
>. #aria$ile. Tipuri de date+ tipuri standard
& )aria$il este un nume pe care compilatorul de C/C++ l asocia( cu una sau mai
multe locaii de memorie. 'tunci c,nd se declar o )aria$il ntr!un program+ tre$uie s se
specifice tipul i numele ei. Tipul unei )aria$ile specific genul de )alori pe care )aria$ila le poate
pstra i setul de operaii pe care programul le poate eecuta asupra datelor.
=im$a%ul C conine urmtoarele tipuri standard7
1. tipuri ntregiD
5. tipuri reale.
&$ser)aie 17 6n C nu eist tipul !oolean a.i. orice )aloare diferit de 0+ a oricrui tip+ este
considerat ca fiind 2R3E+ iar orice )aloare 0+ a oricrui tip+ este considerat ca fiind 456SE.
&$ser)aie 57 6n C tipul caracter este asimilat tipurilor ntregi.
6n C eist cinci tipuri de $a(7 c-ar .prin intermediul cruia se pot memora )alori ce
repre(int caractere+ din ta$loul codurilor '"CII/+ int .ntreg/+ &loat .n )irgul mo$il/+
dou$le .n )irgul mo$il cu du$l preci(ie/ i void .fr nici o )aloare/.
Tipurile de date definite pentru standardul C
Tip 2imensiune aproimati) in $ii 2omeniu minimal de )alori
c8ar W de la !15W la 15>
unsigned c8ar W de la - la 5CC
signed c8ar W de la !15> la 15>
int 1S de la !<5>S> la <5>S>
unsigned int 1S de la - la SCC<C
signed int 1S similar cu int
s8ort int 1S similar cu int
>
unsigned s8ort int 1S de la - la SCC<C
signed s8ort int 1S similar cu s8ort int
long int <5 de la !5.11>.1W<.S1> la
5.11>.1W<.S1>
signed long int <5 similar cu long int
unsigned long int <5 de la - la 1.5F1.FS>.5FC
float <5 ase (ecimale eacte
dou$le S1 (ece (ecimale eacte
long dou$le W- (ece (ecimale eacte
W. Constante
Eist mai multe tipuri de constante7
1. Constante ntregi7
B (ecimale7 5<+ 15<F+ CS.
B octale .n $a(a W/ ! o constant n $a(a W se declar percedat de un - nesemnificati)7
-15< ! reine numrul 15<
.W/
B 8ea(ecimale .n $a(a 1S/ ! acestea sunt precedate de -V sau -7 -V1'5 sau -1a5 !
reine numrul 1'5
.1S/
5. Constante caracter7
'cestea se trec ntre dou caractere apostrof .0/. Eemple ar fi7 0aR+ 0'R+ 01R. 9emorarea lor se face
utili(,nd tipul c-ar. "e memorea( codul '"CII al caracterului respecti). 2e eemplu+ pentru 01R
! 1F
.1-/
+ respecti) pentru 0aR ! F>
.1-/
.
<. Constante de tip $acXslas8 caracter .su$ forma de sec)en escape/7
C admite mai multe coduri $acXslas8 speciale a.i. s se poat introduce caracterele respecti)e ca pe
nite constante.
Coduri $acXslas8
Codul "emnificaia
Y$ $acXspace
Yf a)ans 8,rtie
Yn r,nd nou
Yt spaiu de ta$ulare ori(ontal
YZ g8ilimele du$le
YR g8ilimele simple
Y- nul
YY $acXslas8 .linie nclinata spre st,nga/
Y) spaiu de ta$ulare )ertical
Ya alert
YN constant n octal .unde N este constanta n
octal/
YN constant n 8ea(ecimal .unde N este o
constant n 8ea(ecimal/
W
Eemplu 17 " se scrie un program care care emite o linie nou i un spaiu de ta$ulare i apoi
afiea( irul 'cesta este un tet.
,include'stdio.-(
void main ()
{
print&(78n8t5cesta este un te9t7)+
}
Eemplul 57 *rogramul de mai %os tiprete din mai multe iposta(e caracterul a.
,include'stdio.-(
void main(void)
{
print&(7:ec;/d# oct;/o# -e9a;/98n7#<a<#<a<#<a<)+
print&(7/c /c /c /c /c /c8n7#<a<#=>#01?1#09@1#<81?1<#<89@1<)+
}
1. Constante reale7
Eemple7 !1C.SS+ -.<+ !5.CE!15.adic+ !5.CG1-
!15
/
C. Constante ir de caractere7
'cestea se declar ntre dou caractere 0.
Eemplu7 [acesta este un tetZ.
2eclaraii de tip constant
*entru a da un nume constantelor se folosete const. 3orma general a unei astfel de
declaraii este7
const )tip* nume;valoare+
unde7
B tip ! repre(int tipul constantei .dac este a$sent+ tipul este int/D
B nume ! repre(int numele constanteiD
B valoare ! repre(int )aloarea constantei.
Eemple7
B const int numar;10+
B const numar;10+ //la fel ca mai sus
B const &loat pi;A.1?+
" anali(m ultimul eemplu7 dac const ar fi lipsit am fi a)ut7 &loat pi;A.1?+ adic+
am fi declarat o )aria$il de tip float iniiali(at cu )aloarea A.1?. *re(ena modificatorului
const determin protecia la modificare a )aria$ilei pi. Cu alte cu)inte+ pi este o )aria$il
de tip [citete numaiZ .are spaiu re(er)at+ reine o )aloare care nu poate fi modificat/.
F
F. Epresii. &peratori
2efiniie7 "e numete epresie o succesiune de operatori i operan(i legai ntre ei+ dup reguli
specifice lim$a%ului+ n scopul efecturii unor operaii .calcule+ atri$uiri+ apelri de funcii etc./.
&peran(ii pot fi7 constante+ )aria$ile+ funcii.
*recedena operatorilor .n ordine descresctoare/
() )* B(
CC BB C B D 1 E F si:eo&
D G /
C B
(( ''
;; E;
1
H
I
11
II
?J
; C; B;; D; G;
#
1. &peratori aritmetici7
6n C eist urmtorii operatori aritmetici7
B+ + .unare si $inare/+ G+ /+ T .unare si $inare/
5. &peratori relaionali7
J+ K+ JH+ KH.
6n C nu eist )alorile logice 2R3E i 456SE+ re(ultatul unei operaii logice fiind 1+ n ca(ul n
care inegalitatea este respectat i - n ca( contrar.
<. &peratori de egalitate7
;; .pentru egalitate/+ \H .pentru inegalitate/.
Ca i operatorii relaionali+ epresiile de acest tip returnea( - sau 1 ! n funcie de modul n
care este respectat sau nu egalitatea .inegalitatea/. &peran(ii pot fi constante+ )aria$ile+
funcii.
1. &peratori de incrementare i decrementare7
'ceti operatori sunt unari i au rolul de incrementa .adun 1/ sau decrementa .scad 1/.
&peratorii sunt7
B ++ pentru incrementareD
B BB pentru decrementare.
&peratorii pot fi prefiai .aplicai n faa oparandului/ sau postfiai .aplicai dup
operand/. " ne g,ndim c pot fi epresii care conin i ali operatori n afara celor de
incrementare .decrementare/.
1-
2ac operatorul este prefiat+ )aria$ila este incrementat
)aloarea reinut de ea s intre n calcul.
2ac operatorul este postfiat+ )aria$ila este incrementat
)aloarea reinut de ea intr n calcul.
C. &peratori logici7
E negare logic
11 i logic
II sau logic
.decrementat/ nainte ca
.decrementat/ dup ce
'ceti operatori se aplic oricrei )aria$ile i constante sau epresii din cele mai sus
menionate.
S. &peratori logici pe $ii7
=im$a%ul C este dotat cu un set de operatori care permit accesul la $it. 'cetia sunt7
JJ+ KK operatori de deplasare ctre st,nga/dreapta coninutul tuturor $iilor din
st,nga sa+ cu un numr de po(iii egal cu )aloarea reinut de al doilea operandD
1 i pe $ii
I sau pe $ii
H sau eclusi) pe $ii
F negare pe $ii .operator unar/.
>. &peratori de atri$uire7
6n C a)em mai muli operatori de atri$uire. &peratorul K;Lse folosete ntr!o epresie de
forma7
v;e9presie #unde v este o )aria$il.
*ot eista i atri$uiri multiple de forma7
v;v1;vM;vA;..;vn;e9presie #unde v#v1#vM#vn sunt )aria$ile.
*entru atri$uiri se mai pot utili(a i operatorii7 D;# G;# /;# C;# B;# '';# ((;# 1;#
H;# I;.
Eemplu7 3ie declaraia int a;A+ i epresia aD;M. 6n urma e)alurii a )a reine )aloarea @.
W. &peratorul condiional7
"e folosete n epresii de genul7
e9p
1
?e9p
M
Je9p
A
principiul de eecuie este urmtorul7
11
B se e)aluea( e9p
1
B dac aceasta produce o )aloare diferit de -+ se e)alue( e9p
M
i este e9p
A
ignorat .nu se
e)aluea(/D
B altfel+ se e)aluea( e9p
A
i e9p
M
este ignorat.
6n ansam$lu+ epresia este de tipul lui e9p
M
sau e9p
A
i produce )aloarea e9p
M
sau e9p
A
.n
funie de cea care se e)aluea(/.
F. &peratorul si(eof
're rolul de a returna numrul de octei pentru memorarea unei )alori. &peratorul poate fi
utili(at ntr!una din cele dou forme de mai %os7
si:eo& (e9presie)
siteo& (tip)
Este de reinut faptul c epresia nu este e)aluat .deci nu apar efecte secundare/.
Eemple7
B fie declaraia int a+ si:eo&(a);M .adic+ tipul int ocup 5 octei/
B si:eo&(&loat);?
B si:eo&(CC9);? .dac 9 este de tip &loat+ dar 9 rm,ne nemodificat ! epresia CC9 nu
a fost e)aluat/.
1-. &peratorul de con)ersie eplicit7
2e multe ori+ se dorete ca unul sau mai muli operan(i s intre n calcul con)ertii ntr!o
form dorit+ nu implicit. *entru aceasta+ naintea operandului se trece ntre parante(e rotunde
tipul su.
Eemple7
B 3ie declaraia &loat 9;B1.=+ 'tunci (int)9;B1 .se face con)ersia din tipul &loat
n int prin trunc8iere/D
B 6n aceleai condiii (int)(CC9CA);M adic+ .9;B1.=# CC9;0.=# CC9CA;M.=#
int(M.=);M+/D
B 3ie declaraiile7 int a;A# !;@+ 'tunci (&loat)aG!;0.N .
15
1-. 'plicaii re(ol)ate
'plicatia 1. "a se scrie din mai multe iposta(e tetul Z"alut C\Z.
a) S se scrie o rutin afieaz textul: "Salut C!".
,include'stdio.-(
void main()
{
print&(7Salut CE7)+
}
b) S se modifice programul anterior astfel nc!t mesajul de afiat s fie
transmis prin intermediul unei "ariabile de un tip corect adaptat.
,include'stdio.-(
void main()
{
c-ar a)*;7salut CE7+
print&(7/s7#a)+
}
c) #celai efect$ un alt tip de memorare.
,include'stdio.-(
void main()
{
c-arD a;7Salut CE7+
print&(7/s7#a)+
}
d) S se modifice programul anterior astfel nc!t afiarea s se realizeze
prin intermediul unei func%ii definite de utilizator.
,include'stdio.-(
void a&isea:a()
{
print&(7Salut CE7)+
}
void main()
{
a&isea:a()+
}
e) &unc%ia "a fi una uni"ersal$ cu posibilitatea transmiterii irului prin
parametru.
,include'stdio.-(
void a&isea:a(c-ar a)*)
{
print&(7/s7#a)+
1<
}
void main()
{
a&isea:a(7Salut CE7)+
}
f) #celai efect$ alt tip de scriere.
,include'stdio.-(
void a&isea:a(c-arD a)
{
print&(7/s7#a)+
}
void main()
{
a&isea:a(7Salut CE7)+
}
g) 'irul dorit se introduce de la tastatur$ dup care se afieaz pe
ecran.
,include'stdio.-(
void main()
{
c-arD a+
print&(7Ontroduceti de mana sirul 'Salut CE(J 7)+
scan&(7/s7#a)+
print&(a)+
}
() )arianta de mai sus nu corespunde$ aa c aratm "arianta corect.
,include'stdio.-(
void main()
{
c-arD a+
print&(7Ontroduceti de mana sirul 'Salut CE(J 7)+
gets(a)+
print&(a)+
}
'plicatia 57 " se calcule(e suma a dou numere ntregi+ prin mai multe )ariante.
a) Se dau dou "alori direct n program memorate la dou loca%ii de memorie
i se "a calcula suma lor.
,include'stdio.-(
void main()
{
int a;1#!;M#c+
11
c;aC!+
print&(7Suma esteJ /d8n7#c)+
}
b) Se citesc dou numere de la tastatur$ i se afieaz suma lor.
,include'stdio.-(
void main()
{
int a#!+
print&(7dati aJ 7)+ scan&(7/d7#1a)+
print&(7dati !J 7)+ scan&(7/d7#1!)+
print&(7Suma esteJ /d8n7#aC!)+
}
c) *ezultatul este re%inut prin intermediul unei "ariabile.
,include'stdio.-(
void main()
{
int a#!+
print&(7dati aJ 7)+ scan&(7/d7#1a)+
print&(7dati !J 7)+ scan&(7/d7#1!)+
int c+
c;aC!+
print&(7Suma esteJ /d8n7#c)+
}
d) Se "a scrie o func%ie de sumare a dou numere ntregi.
,include'stdio.-(
int suma(int 9#int P)
{
int s+
s;9CP+
return s+
}
void main()
{
int a#!+
print&(7dati aJ 7)+ scan&(7/d7#1a)+
print&(7dati !J 7)+ scan&(7/d7#1!)+
int c+
c;suma(a#!)+
print&(7Suma esteJ /d8n7#c)+
}
e) #celai efect$ dar func%ia "a n toarce rezultatul prin linia de
parametri.
1C
,include'stdio.-(
void suma(int 9#int P#intD s)
{
Ds;9CP+
}
void main()
{
int a#!+
print&(7dati aJ 7)+ scan&(7/d7#1a)+
print&(7dati !J 7)+ scan&(7/d7#1!)+
int c+
suma(a#!#1c)+
print&(7Suma esteJ /d8n7#c)+
}
f) Se "a calcula i media aritmetic a celor dou numere ntregi.
,include'stdio.-(
void main()
{
int a#!+
print&(7dati aJ 7)+ scan&(7/d7#1a)+
print&(7dati !J 7)+ scan&(7/d7#1!)+
int s;aC!+
&loat m;(&loat)sGM+ GGar fi mers si declaratia float m+s,-..
GD operatia anterioara trebuie facuta datorita faptului ca impartirea a
doua numere intregi "a rezulta catul impartirii$ adica tot un numar intreg$
de aceea unul dintre membrii trebuie con"ertit spre un tip real /,
print&(7Suma esteJ /d8n7#s)+
print&(7Qedia esteJ /.M&8n7#m)+
}
'plicatia <7 " se calcule(e puterea a n!a a lui M+ unde n este un ntreg citit de la tastatur.
GD'cest eemplu il putem folosind unul dintre operatorii speciali pe care ii are C!ul si anume+ operatorul de
deplasare pe $iti spre stanga JJ. 3ie un numar intreg. *rin JJ1 intelegem deplasarea spre stanga a $itilor
din repre(entarea pe $iti .in $a(a 5/ a lui + completandu!se cu - in dreapta. 'stfel+ de eemplu+ daca HC+
adica 1-1+atunci deplasarea pe spre stanga )a duce la o$tinerea numarului H1-+ adica 1-1-. 2e fapt+ o
deplasare spre stanga cu o unitate repre(inta o inmultire a lui cu 5. & deplasare spre stanga cu p po(itii a
lui repre(inta o inmultire a lui cu 5 de p ori. 3olosind aceste artificiu se poate calcula puterea lui 5 a unui
numar dat.DG
,include'stdio.-(
void main()
{
int n#m;1+GGaici se declara atat )aria$ila n+ cat si m care se initiali(ea(a cu 1
print&(7Rati nJ7)+
scan&(7/d7#1n)+
print&(7MH/d;/d8n7#n#m;(m''n))+
}
GD'l doilea apel al functiei printf are un element de afisare a )alorii epresiei mH.mJJn/. #aloarea unei
epresii de forma mHe+ care este si instructiune de atri$uire+ este tocmai )aloarea epresiei e. 'stfel+ cand
1S
scriem mH.mJJn/+ inseamna ca m este s8iftat spre stanga cu n po(itii+ deci m+ initial 1+ de)ine egal cu puterea n a lui
5. 'ceasta este si )aloarea epresiei mH.mJJn/+ care )a fi afisata.DG
'plicatia 17 "e citeste un numr (ecimal si unul in 8ea de cel mult 1 cifre fiecare i se cere s se
afie(e )alorile respecti)e n sistemele de numerotaie cu $a(a 1-+ W+ i 1S.
,include'stdio.-(
void main ()
{
unsigned int i#-+
print&(7Rati nr. intreg :ecimalJ 7)+
scan&(7/d7#1i)+
print&(7Rati nr. intreg -e9a:ecimalJ 7)+
scan&(7/97#1-)+
print&(78nnr. :ecJ8tSa:a 10J /u8tSa:a TJ /o8tSa:a 1@J /97#i#i#i)+
print&(78nnr. -e9J8tSa:a 10J /u8tSa:a TJ /,o8tSa:a 1@J /,U7#-#-#-)+
GG: este folosit ptr. afisarea unui prefi .- sau -/ inaintea )alorilor octale+ respecti) 8ea(ecimale
}
'plicatia C7 " se reali(e(e un program care s determine numrul de caractere afiate de
ZprintfZ folosind cunotinele acumulate.
,include'stdio.-(
void main (void)
{
int nr1#nrM+
print&(75cesta/n este un te9t./n8n7# 1nr1#1nrM)+GDspecificatorul de format Tn se
foloseste atunci cand apar situatii in care se doreste a se cunoaste numarul de caractere pe care le!a afisat functia
printf. =a folosirea lui Tn printf )a tri$ui unei )aria$ile .in urma unui transfer
printr!un pointer/ suma totala a caracterelor pe care le!a fisatDG
print&(7/10d /d7#nr1#nrM)+GGprimul nr. se scrie cu o spatiere de 1-
}
'plicatia S7 " se reali(e(e o rutin care folosete incrementarea .decrementarea/ post i
prefiat.
,include'stdio.-(
void main()
{
int val;1+
print&(73tili:are post&i9 /d8n7#valCC)+ GG1
print&(7aloarea dupa incrementare /d8n7#val)+ GGM
val;1+
print&(73tili:are pre&i9 /d8n7#CCval)+ GGM
print&(7aloarea dupa incrementare /d8n7#val)+ GGM
val;1+
print&(73tili:are post&i9 /d8n7#valBB)+ GG1
print&(7aloarea dupa decrementare /d8n7#val)+ GG0
val;1+
print&(73tili:are pre&i9 /d8n7#BBval)+ GG0
print&(7aloarea dupa decrementare /d8n7#val)+ GG0
}
1>
'plicatia >7 " se reali(e(e o rutin care eecut lucrul pe $ii.
,include'stdio.-(
void main()
{
unsigned int a;N+
const int !;>+
print&(7/d 'sau pe !iti( /d este /d8n7#a#!#aI!)+
print&(7/d 'si pe !iti( /d este /d8n7#a#!#a1!)+
print&(7/d 'sau e9clusiv pe !iti( /d este /d8n7#a#!#aH!)+
print&(7N 'complementat pe !iti( este /u varia!ila &iind pe /u
octeti8n7#Fa#si:eo&(a))+
}
'plicatia W7 " se scrie un program care citete )aloarea lui + po(iti)+ afiea( )alorile lui +
LM+ NO+ calculea( i afiea( )aloarea urmtoarei epresii7 CGGLM!<GNO+1C.
,include'stdio.-(
void main()
{
dou!le 9+
int P+ GGpentru partea intreaga
dou!le :+ GGpentru partea :ecimala
scan&(7/l&7#19)+
print&(79; /g8t7#9)+
print&(7)9*; /d8t7#P;9)+
print&(7{9}; /&8n7#:;9BP)+
print&(7e; /g8n7#ND9DPBAD:C1N)+
}
'plicatia F7 " se determine maimul i minimul a dou numere ntregi+ folosind
cunotinele din acest la$orator.
,de&ine ma9(9#P) 9(P?9JP
,de&ine min(9#P) 9'P?9JP
,include'stdio.-(
void main()
{
int 9#P+
print&(7Rati 9 si P J 7)+
scan&(7/d /d7#19#1P)+
print&(78n8tQa9imul esteJ /d7#ma9(9#P))+
print&(78n8tQinimul esteJ /d7#min(9#P))+
}
/G 6n programul de mai sus am definit dou macrouri ptr. minim i maim. 'ceste macroinstruciuni ofer
posi$ilitatea de a defini constantele pe care procesorul le su$stituie n tot programul nainte s nceap
compilarea. 6n plus+ macroinstruciunile permit crearea unor operaii asemntoare funciilor+ care lucrea( cu
parametri. *arametrii sunt )alori care tre$uie transmise macroinstruciunii.G/
'plicatia 1-7 "e dau trei numere reale a+$+c. *ot repre(enta ele lungimile laturilor unui
triung8i]
,de&ine si 11
1W
,de&ine adevarat ?
,de&ine alt&el J
,de&ine a&isea:a print&
,de&ine citeste scan&
,de&ine reale &loat
,include'stdio.-(
void main()
{
reale a#!#c+
a&isea:a(7Rati lungimile laturilorJ8n7)+
citeste(7/& /& /&7#1a#1!#1c)+
(a(;0) si (!(;0) si (c(;0) si (a'!Cc) si (!'aCc) si (c'aC!)
adevarat a&isea:a(78t/?.M&# /?.M& si /?.M& &ormea:a triung-i.7#a#!#c)
alt&el a&isea:a(78tVu &ormea:a triung-i.7)
}
11. 'plicaii propuse
1. " se scrie un program care citete pe n de tip ntreg i afiea( )aloarea epresiei
nG(nC1) cu 1N (ecimale.
5. " se determine maimul i minimul a dou numere ntregi+ folosind macrouri i
cunotinele din acest la$orator.
<. " se scrie un program care s calcule(e numrul de picioare dintr!o curte+ n care se
afl g gini+ p pisici i un om.
1. 3olosind operatorul condiional s se )erifice dac un numr real 9 se afl n inter)alul
)a#!)+ unde a i ! sunt date de la tastatur.
C. " se scrie un program care citete )aloarea )aria$ilei i afiea( )aloarea funciei
&(9) definit ca mai %os7
I A9D9C>9B10 pentru 9'0
&(9) ; I M pentru 9;0
I ?9D9 pentru 9(0
S. " se m$unteasc eemplul > astfel nc,t s se poat introduce i numere negati)e.
"e )or folosi doar cunotinele acestui la$orator.
1F