Sunteți pe pagina 1din 15

Curs 3 Elementele limbajului C; Tipuri de date n C

1

LIMBAJUL C
- s-a dezvoltat ntre anii 1969-1973, o dat cu dezvoltarea
sistemului de operare Unix. (B.W.Kernighan, D.M.Ritchie); Totui,
anul 1972 este admis ca anul "naterii" limbajului C. La sfritul
anului 1973 elementele eseniale ale limbajului C au fost complete.
O alt perioad de schimbri majore ale limbajului se produce ntre
1977 i 1979. In anul 1978 a aprut prima descriere larg a
limbajului n cartea "The C programming language" scris de ctre
B.W.Kernighan, D.M.Ritchie.
n anul 1983 a fost nceput standardizarea limbajului C de ctre
ANSI (American National Standards Institute), iar n 1989 a aprut
ANSI C.

Avantaje:
1. limbaj de programare de scop general
- permite dezvoltarea de aplicaii diverse: soft tiinific, soft pentru gestiunea bazelor
de date, editoare de texte, jocuri, etc.
- nu este specializat pe un domeniu particular de aplicaii
- ofer un control modern al funciilor i al structurilor de date i posed un set bogat
de operatori
2. permite o foarte bun portabilitate a programelor
- programele scrise n C pot fi transferate uor de la un calculator la altul.

3. permite programarea structurat (modular)

4. permite scrierea softului de baz (programare de sistem)

5. ofer posibilitatea lucrului pe bii i a calculului adreselor


C++ -aprut in 1986 (B.Stroustrup)
- permite programarea orientat spre obiecte (Object Oriented Programming OOP )
OOP - tip de programare n care sunt definite nu numai tipurile de date ale unei structuri de date
ci i operaiile i funciile care pot fi aplicate asupra structurii de date respective. Astfel, o structur
de date devine un obiect care include datele ca atare dar i funciile cu care aceste date pot fi
prelucrate. In plus, diferite obiecte pot moteni caracteristicile altor obiecte.

Visual C , Visual C++
- permit dezvoltarea de aplicaii WINDOWS


Curs 3 Elementele limbajului C; Tipuri de date n C

2
Elementele limbajului C

Exemplu

// program de adunat numere
# include <stdio.h>
void main ( )
{
float x,s=0;
int n=0;
while (scanf("%f",&x)==1)
{
s+=x;
n++;
}
//adunarea se incheie la introducerea unei valori care nu
//poate fi convertita la tipul float
printf("\n S-au adunat %d numere. Suma lor este %g",n,s);
getch( );
}

Observaii: 1. Programele scrise n C sunt compuse din una sau mai multe funcii.
2. Funcia principal = funcia main ( )
3. Corpul oricrei funcii (setul de instruciuni care se execut n funcia respectiv)
este cuprins ntre acolade { }
Funciile conin instruciuni prin care sunt specificate operaiile de calcul care trebuie efectuate.

Categorii de elemente
Comentarii
- note explicative (adnotri) n program care sunt complet ignorate de ctre compilator
- iruri de caractere (pot fi i caractere speciale sau cuvinte cheie) cuprinse ntre
/* */ sau care se gsesc pe un singur rnd dup caracterele //

Exemple: /* Comentariu */

/* Acest program este
scris in scopul ......... */

// i este o variabila contor
// folosita in ciclul do-while

s+=x; //s reprezinta suma valorilor adunate : s=s+x

Cuvinte cheie (din Help > Contents > Key words)
Cuvintele cheie sunt cuvinte rezervate limbajului de programare, cu utilizare predefinit sau altfel
spus, nume cu destinaii speciale. Toate cuvintele cheie n limbajul C se scriu cu litere mici.
//"celebrul" program Hello world!
# include <stdio.h>
void main ( )
{
printf("Hello world!");
}
Curs 3 Elementele limbajului C; Tipuri de date n C

3
Exemple:
auto double int struct
break else long switch
case enum register typedef
char extern return union
const float short unsigned
continue for signed void
default goto sizeof volatile
do if static while

Astfel, o declaraie de forma:

int while;

va fi semnalat ca eroare de ctre compilator deoarece se ncearc declararea unei variable cu
numele while, care este cuvnt cheie rezevat.
Se recomand s nu se foloseasc cuvinte cheie din C++ ca i nume de variabile n programe
scrise n C deoarece este posibil c vreodat codul scris n C s fie transcris n C++.

Identificatori (nume)
Identificatorii sunt folosii pentru a denumi variabile, constante, funcii, structuri de date,
etc. i reprezint succesiuni de caractere alfanumerice, primul caracter trebuind s fie literar.
Menionm c limbajul C face distincie ntre literele mari i literele mici i c un identificator poate
conine oricte caractere dar sunt luate n considerare doar primele 32 caractere. Identificatorii nu
pot conine caractere speciale :
+ - / ^ < > ( ) [ ] { } . , : ; ' # $ @ - spatiu
Recomandm ca identificatorii folosii ntr-un program s fie sugestivi, adic s sugereze scopul
alegerii lor.

Exemple:
a, suma, SUMA, m2, nr_stud_an1f, NrStudAn1F
incorect: 2x, a*b, if
pentru valoarea x
2
se pot folosi variabilele: xp, xx, xla2,etc.

Exist identificatori care ncep cu caracterul _ (underscore) sau care conin caracterele _ _
(dublu underscore). Aceste stiluri de identificatori care ncep cu _ sau conin _ _ sunt folosite
pentru implementare i pentru librriile standard n C i C++.

Variabile
Variabilele sunt nume simbolice asociate unor locaii de memorie, ale cror valori pot fi
modificate prin instruciuni ale programului. Declararea (definirea) variabilelor const n precizarea
tipului i numelui lor.

Exemplu:
int n; (n = variabila de tip ntreg, stocat ntr-o locaie de 2 octei = 16 bii)
float s; (s = variabil de tip real, stocat ntr-o locaie de 4 octei = 32 bii)

Curs 3 Elementele limbajului C; Tipuri de date n C

4
Declararea variabilelor de acelai tip se poate face ntr-o singur linie.
Exemplu:
char a , nume [20], prenume [20];
float medie, xcm, ycm, zcm, note [100] ;

Observaii:
Aceeai variabil nu poate fi declarat cu dou tipuri. De asemenea, variabilele pot fi iniializate
n momentul declarrii. In multe cazuri, variabilele trebuie s fie iniializate i acest lucru este n
mod special important pentru pointeri.

Exemplu:
float s=0;
int i, j, k, n=1;

Variabilele declarate n afara funciei main se numesc variabile globale i sunt iniializate automat
cu valoarea zero.

Exemplu:
# include <stdio.h>

float s=0; //s era oricum iniializat cu 0
//fiind variabil global

void main ( )
{ ......
s=s+x;
......
}

Program exemplu: transformarea temperaturii din grade Fahrenheit n grade Celsius

/*program tF -> tC
tC=5*(tF-32)/9;
*/
#include <stdio.h>

void main()
{
int tF, tC, min, max, pas;
min=0; max=200; pas=10;
tF=min;
while(tF<=max)
{
tC=5*(tF-32)/9;
printf("\noF: %d\toC: %d",tF,tC);
tF=tF+pas;
}
}
Curs 3 Elementele limbajului C; Tipuri de date n C

5
Constante
Constantele sunt valori care nu pot fi modificate n decursul programului. n limbajul C, constantele
sunt de dou feluri i anume constante simbolice i constante obiect.

a) Constante simbolice
- se definesc cu directiva define
Directiva define - stabilete (definete) un nume simbolic pentru o anumit valoare
- se compune din cuvntul cheie #define, o denumire simbolic i o
valoare
Exemplu:
#define h 6.625e-34
#define c 3e8

Observaie: Directiva define nu se termin cu ;
Exemplu:
#define MAX 50
float sir [MAX];
int memorie_necesara;

void main ( )
{
......
memorie_ necesara = 4*MAX;
......
}

Peste tot n program, compilatorul va nlocui automat MAX cu valoarea 50.
n practica limbajului C, toate constantele simbolice se noteaz folosind majuscule.

Exemplu:
#define X 200
#define Y X+10
..........
z=3*Y;
..........

z va avea valoarea: 3*200+10=610
Dac dorim ca z s fie 3*(x+10) atunci va trebui s modific directivele define astfel:

#define X 200
#define Y (X+10)

.........
z =3*Y;
.........

In acest caz z are valoarea: z= 3*(200+10)=630

O directiv define autorizeaz substituia pe care o definete din punctul n care este scris pn la
sfritul fiierului sau pn la ntlnirea unei directive undef.

Exemplu:

#define DIM 25
Curs 3 Elementele limbajului C; Tipuri de date n C

6
.........
float medii_fm[DIM]; //echivalent cu: medii_fm[25];
.........
#undef DIM
........
#define DIM 100
........
double alfa;
........
alfa=DIM/2; //echivalent cu: alfa=50

Al doilea tip de constante n C sunt:

b) Constantele obiect
Acestea se numesc i constante cu tip, iar declararea lor const din cuvntul cheie const
urmat de tipul constantei i de un identificator iniializat. Declararea acestor constante se termin
cu caracterul ;.

Exemplu:
int const DIM = 50; // sau const int DIM=50;
char const cc='x';

O constant de tip char (caracter) este un ntreg, scris ca un singur caracter ntre dou simboluri '.
Valoarea constantei caracter este valoarea caracterului respectiv n setul de caractere ASCII
(American Standard Code for Information Interchange).
Astfel, '0' are valoarea 48, 'A' are valoarea 65, iar 'a' are valoarea 97. (vezi Anexa 1).

Program exemplu: caracterele corespunztoare codurilor ASCII

// Program ASCII: caracterele corespunzatoare codurilor ASCII
#include <stdio.h>

void main()
{
int i,m,M;
printf("Coduri ASCII -> caractere\n");
printf("Introduceti limita min si max: ");
scanf("%d %d",&m,&M);
printf("Cod ASCII\tCaracter");
for(i=m;i<=M;i++)
printf("\nCod: %d\tCaracter: %c",i,i);
}

Constantele caracter pot fi operanzi n orice operaii aritmetice, ca orice ntreg.

Curs 3 Elementele limbajului C; Tipuri de date n C

7
Instruciuni
Instruciunile sunt pri (linii) de program care prin compilare produc aciuni (coduri)
executabile.
Fiecare instruciune se termin cu caracterul ; numit terminator de instruciune. Altfel spus, pentru
ca o expresie s devin instruciune ea trebuie ncheiat cu caracterul ;.
Compilatorul semnaleaz lipsa caracterului ; la nceputul liniei urmtoare prin mesajul:

Statement missing ; in function ...

Exemple:
float x, s=0;
s+=x;
while (.......)
{
..........
}


int i=0, max=100;

while(i<=max)
{
i=i+5;
printf("\n%d",i);
}

Observaii
In urma execuiei programului se tipresc valorile de la 5 la 105.
Dac nu se pun acolade la while se va tipri doar valoarea 105

Expresii
Expresiile sunt construcii formate din operanzi i operatori. Ele au valori i tipuri, att
valorile ct i tipurile expresiilor fiind determinate de ctre valorile i tipurilor operanzilor i de
ctre operatorii care compun expresia.

Exemplu:
b*b-4*a*c aceasta este o expresie
a , b , c sunt operanzii expresiei
* , - sunt operatorii expresiei
delta = b*b - 4*a*c ; aceasta este o instruciune prin care se atribuie variabilei
delta rezultatul evaluarii expresiei b
2
- 4ac

Operanzii pot fi :
- constante
- identificatori (nume) de variabile
- nume de tipuri de date
- apeluri de funcii
- expresii cuprinse ntre paranteze rotunde


Funcii
Curs 3 Elementele limbajului C; Tipuri de date n C

8
Funciile sunt grupuri de instruciuni recunoscute sub un anumit nume. Funciile realizeaz
aciuni i ntorc (returneaz) valori programului principal (funciei principale) sau altei funcii
apelante. Ele se apeleaz prin nume i lista lor de parametri.
Parametrii funciilor sau valorile cu care sunt apelate transfer informaia din exteriorul funciilor n
interiorul lor. Valorile pe care le returneaz funciile nu trebuie folosite n mod obligatoriu (vezi de
ex. funciile scanf() i printf())
Funcia principal returneaz valori sistemului de operare, acesta fiind programul apelant al ei.
Anumite funcii standard sunt gata scrise i prototipurile lor se gsesc n bibliotecile limbajului
(header files).

Exemple:
<stdio.h> - conine funcii standard de intrare ieire (I/O)
(printf, scanf, getch, ...)
<stdlib.h> - conine funcii standard precum
(abort, exit, rand, atoi, itoa,...)
<string.h> - conine funcii pentru prelucrarea irurilor de caractere
(strcpy, strlen, strcmp, strcat,...)
<math.h> - conine funcii matematice
(cos, sin, pow, fabs, abs, ...)
<graphics.h> - conine funcii pentru gestiunea ecranului n mod grafic
(initgraph, putpixel, line, outtext, outtextxy , cleardevice, ...)
<conio.h> - conine funcii standard de intrare ieire de la consol
(clrscr, getch, getche, gotoxy, putch, wherex, wherey,...)
<time.h> - conine funcii pentru gestiunea orei i a datei sistemului de calcul
(gettime, settime, ctime,...)
<dos.h> - conine funcii pentru interaciunea cu sistemul de operare DOS
(setdrive, inport, outport)
etc.

Exemplu: funcia atoi
char str1[] = "124z3yu87";
char str2[] = "-3.4";
char *str3 = "e24";
printf("str1: %d\n", atoi(str1));
printf("str2: %d\n", atoi(str2));
printf("str3: %d\n", atoi(str3));

Output-ul rezultat este:

str1: 124
str2: -3
str3: 0

Curs 3 Elementele limbajului C; Tipuri de date n C

9
Exemplu: funcia itoa (nu este suportat de toate compilatoarele)

#include <stdio.h>
#include <stdlib.h>

int main()
{
char str[10]; // trebuie sa fie destul de mare pentru a putea stoca
//toate caracterele numarului rezultat prin conversie
//itoa are ca parametri:valoarea care se converteste, sirul care va
//contine caracterele rezutate prin conversie si sistemul de numeratie
//in care se face conversia
printf("15 in binar este %s\n", itoa(15, str, 2));
printf("15 in octal este %s\n", itoa(15, str, 8));
printf("15 in zecimal este %s\n", itoa(15, str, 10));
printf("15 in hexazecimal este %s\n", itoa(15, str, 16));
return 0;
}
Outputul acestui program este:
15 in binar este 1111
15 in octal este 17
15 in zecimal este 15
15 in hexazecimal este f
Orice funcie se compune dintr-un antet i un corp de instruciuni.

Exemplu:
Antetul este format din tipul valorii pe care o returneaz funcia, din numele funciei i lista
parametrilor funciei, adic tipul i numele variabilelor funciei.
Corpul unei funcii este grupul de instruciuni care se execut la apelul funciei respective.
Apelul unei funcii se face prin numele su i lista de parametri. La apelul funciei, controlul
programului este pasat acelei funcii.
La ntlnirea instruciunii return n interiorul unei funcii se face saltul n afara funciei, controlul
fiind preluat de ctre funcia main, din locul imediat urmtor celui n care a fost apelat funcia din
care se face saltul.

Exemplu:
cnk = fact(n)/fact(k)/fact(n-k);

Curs 3 Elementele limbajului C; Tipuri de date n C

10
Funcia main
Funcia main este partea principal a unui program C. Aceasta este apelat i lansat n
execuie de ctre sistemul de operare.

Exemplu:
void main ( ) int main ( )
{ {
......... ...........


} return 0;


}
n cel de-al doilea exemplu, tipul int al funciei main comunic compilatorului c funcia returneaz
la ieire o valoare ntreag, apelatorul fiind sistemul de operare. Dac valoarea returnat este zero
nseamn ca nu au fost erori la execuia programului.

Funcii recursive
O funcie este recursiv dac se autoapeleaz. Astfel de funcii se folosesc la definirea
proceselor recursive. Un proces este recursiv dac are o parte care se definete prin el nsui.
La apelurile recursive ale unei funcii aceasta este reapelat nainte de a se reveni din ea.

Exemplu
1) Funcia factorial
dac n==0 fact(n)=1 <- aceasta este partea apelului recursiv care nu se definete prin el
nsui (partea definit direct)
altfel
fact(n)=n*fact(n-1) <- se definete funcia fact prin ea nsi

Funcia fact recursiv:
double fact(int n)
{
if((n==0) return 1.0;
else
return n*fact(n-1);
}

2) Cel mai mare divizor comun
dac a%b==0 cmmdc(a,b)=b
altfel
cmmdc(a,b)=cmmdc(b,a%b)

Funcia cmmdc recursiv:
int cmmdc(int a, int b)
{
if(!(a%b)) return b;
else
return cmmdc(b,a%b);
}

La fiecare reapel al unei funcii recursive, parametrii i variabilele automatice ale ei se aloc ntr-o
zon special de memorie, numit stiv. Acestea au valori diferite la fiecare reapelare.
Recursivitatea nu conduce la coduri mai rapide i nici la necesiti de memorie mai mici.
Totui, codurile recursive sunt mai compacte i uneori mai uor de neles. Recursivitatea este n
special convenabil pentru structuri de date definite recursiv (arbori).

Curs 3 Elementele limbajului C; Tipuri de date n C

11
Tablouri
Tablourile sunt colecii de valori de acelai tip.

Exemplu:
S presupunem c trebuie s declarm 5 elemente de tip ntreg. Acest lucru poate fi fcut sub
forma:



Elementele unui tablou pot fi accesate folosind un index. Aceste elemente sunt indexate de la 0 la
n-1 unde n reprezint dimensiunea tabloului.
Un tablou unidimensional se numete vector, iar unul bidimensional se numete matrice.

Exemplu
Este declarat un tablou unidimensional de 5 elemente i elementele tabloului sunt apoi iniializate
cu valoarea 0.

int a[5];
int i;
for(i=0;i<5;i++)
a[i]=0;

Exemplu

float medii[10];
Dac se va face atribuirea:

medii[10]=9.85;

se obine o eroare deoarece elementul medii[10] nu exist.

Pentru a indexa elementele unui tablou de la 1 la n atunci respectivul tablou trebuie declarat de
dimensiune cel puin n + 1.

Exemplu:
float x[6];
x[1] = 12; x[2]=34; x[5] = 14; //x[0] = nedefinit !!

Dar din declaraia:

float x[6] = {12, 34, 1, 9, 14}
Curs 3 Elementele limbajului C; Tipuri de date n C

12
//rezult: x[0] = 12; ... x[4] = 14; i x[5] = nedefinit !!



iruri de caractere
irurile de caractere sunt tablouri cu elemente de tip char (caractere).

Exemplu:
char nume[20], prenume[20];
char nume[20] = "Popescu";

irurile de caractere trebuie cuprinse ntre " ".

Exemplu
Dac avem declaraia:
char nume[20] = "Popescu"
Atunci o reiniializare de forma:
nume = "Ionescu"
va produce o eroare.

O iniializare a unui ir se poate face fie la declararea lui, fie folosind funcia strcpy (string copy).

Exemplu
# include <stdio.h>
.................
char nume[20] = "Popescu";
.................
strcpy (nume, "Ionescu");
.................

Citirea i tiprirea irurilor se face cu funciile gets( ) i puts( ).

Exemplu
#include <string.h>
.....................
char nume[20];
.....................
gets(nume);
....................
puts(nume);
....................

Orice ir se ncheie cu caracterul NULL (marcatorul sfritului irului respectiv) i va trebui s se
in seama de acest lucru la declararea irurilor, cnd se specific dimensiunea lor.
Un ir de caractere este stocat n elementele succesive ale unui tablou cu elemente de tip char,
tabloul fiind terminat cu caracterul NULL (caracterul '\0'). Astfel irul "Programare" este stocat de
exemplu n tabloul de caractere sircar[] dup cum urmeaz:

char sircar[DIM]
sircar[0]='P'; sircar[1]='r'; sircar[2]='o'; sircar[3]='g'
sircar[4]='r' sircar[5]='a'; sircar[6]='m'; sircar[7]='a';
sircar[8]='r' sircar[9]='e'; sircar[10]='\0';
Curs 3 Elementele limbajului C; Tipuri de date n C

13
Caracterul NULL este scris folosind secvena escape '\0', fiind definit n <stdio.h>, iar valoarea
sa ASCII este 0.

Secvene escape
Secvenele escape sunt coduri de control (spaii albe), folosite pentru specificarea
formatelor de scriere a datelor i constau din combinaii dintre un caracter backslash \ urmat de o
liter sau de o combinaie de cifre .
Setul de secvene escape n C este:

Cod
escape
Descriere
\n Rnd nou
\t Tabulator orizontal
\r Intoarcere la nceputul rndului
\a Alarm (sunet)
\b Backspace
\f Pagin nou la imprimant
\ Ghilimele
\ Apostrof
\\ Backslash
\0OO Valoare n octal
\xHH Valoare n hexazecimal
O secven escape este vzut ca un singur caracter i reprezint un caracter constant.
Unele secvene escape sunt specifice perifericelor folosite. Astfel, secvenele \v (tabulator vertical)
i \f (pagin nou la imprimant) nu afecteaz formatul de ieire al datelor pe monitor ci numai la
imprimant.

Exemplu:
In urma instruciunii:
printf("\nSuma celor %d numere este %g\t\a"n,s);
se obine:
Suma celor 5 numere este 43.75 _ (cursor)

Exemplu
n urma execuiei instruciunilor:
printf("\n\tSem I\t\tSem II");
for(i=1; i<=nrstud; i++)
printf("\n%d:\t%5.2f\t\t%5.2f",i,medsem1[i],medsem2[i]);
se obine:
Sem I Sem II
1: 8.75 5.25
2: 10.00 10.00
3: 5.30 6.67
...................................................

Exemplu:

#define fis_intrare "d:\\fiz1r\\centru.dat"

adic pentru a despri directoarele ntr-o cale de directoare scris ntr-un program C trebuie
folosite dou caractere backslash (\\).
Curs 3 Elementele limbajului C; Tipuri de date n C

14
Codul ASCII
Codul ASCII (American Standard Code for Information Interchange) este un cod standard
de reprezentare a caracterelor ca valori ntregi pe 7 bii. Acest cod a fost introdus pentru a se
obine o compatibilitate ntre diferitele tipuri de echipamente folosite la procesarea datelor.
Codul ASCII standard const din 128 de numere ntregi (reprezentate pe 7 bii, cu valori ntre 0
i 127) atribuite unor caractere (cele englezeti), numere, semne de punctuaie, celor mai uzuale
caractere speciale i unor coduri de control (comenzi) netipribile (primele 32 de caractere).
Codul ASCII extins const de asemenea din 128 numere ntregi, cu valori ntre 128 i 255
(pentru reprezentarea lor folosindu-se toi cei 8 bii ai unui octet), care reprezint caractere
suplimentare din alte limbi, simboluri matematice, grafice, caractere speciale sau sau simboluri ale
unor monede strine.
Folosirea acestor coduri face posibil i prelucrarea caracterelor, nu numai a numerelor.
n figurile urmtoare sunt date codurile ASCII (standard i extins) i caracterele
corespunztoare.



Curs 3 Elementele limbajului C; Tipuri de date n C

15

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