Sunteți pe pagina 1din 11

Programarea calculatoarelor 30

II. Limbajul C


Limbajul C a aparut n 1972. Este un limbaj cu destinatie universala.
Autorii sai sunt Dennis M. Tichie si Brian K. Kerninghan de la Bell
Laboratories.
Limbajul C a fost proiectat n ideea de a asigura implementarea portabila a
sistemului de operare UNIX. Un rezultat direct al acestui fapt este ca
programele scrise n limbajul C au o portabilitate foarte buna.
Facilitatile principale ale limbajului C sunt:
- portabilitate lipsesc operatiile de I/E (n baza limbajului)
- flexibilitate n programare ( nr. redus de controale)
- programe compacte ( expr. de atribuire, expr. conditionata, i++, i--)
- lucrul pe biti si calcul de adrese, specifice limbajelor de asamblare este
un intermediar ntre limbajele de asamblare si limbajele de nivel nalt
Exista un standard ANSI, dar multe implementari se abat de la standard.
n 1980 a fost dat publicitatii limbajul C++ care permite programarea
orientata pe obiect. Este un superset al limbajului C.
Limbajul C este implementat de la microcalculatoare pna la
supercalculatoare.
Cele mai cunoscute implementari sunt cele ale firmelor Borland si
Microsoft.
Borland comercializeaza o biblioteca de componente standardizate care
pot fi utilizate la implementarea interfetelor utilizator utiliznd unul din limbajele
C si PASCAL. Produsul se numeste Turbo Vision.
De asemenea s-au realizat extensii ale C++ pentru Windows: BC for
Windows, Microsoft C++ 7.0, Visual C si Visual C++ (interfata utilizatorilor
se specifica grafic cu mouse).
Din cele de mai sus putem afirma ca C++ se bucura de o mare
popularitate fiind utilizat n mare masura la implementare de aplicatii complexe.
Daca n 1970 o persoana putea programe 4-5 mii instructiuni, acum o
persoana poate programa 25 mii de instructiuni.


Limbajul C Notiuni de baza

31

1.Notiuni de baza

Un program contine una sau mai multe functii. Dintre acestea una este
functia principala.
Fiecare functie are un nume. Numele functiei principale este main.
Programele se pastreaza ntr-un fisier sau n mai multe. Fisierele au extensia .c
pentru limbajul C si .cpp pentru limbajul C++.
Un fisier care contine un program scris n C sau care contine numai o parte a
acestuia se va numi fisier de sursa.


compilare



linkeditare




Prin compilarea unui fisier rezulta un fisier obiect. Acesta are extensia .obj.
Fisierele obiect corespunzatoare unui program pot fi reunite ntr-un program
executabil prin editare de legaturi (linkeditare) fisier executabil.

1.1. Nume

Un nume este o succesiune de litere (plus caracterul _) si eventual
cifre. Primul caracter fiind litera.
Implicit numai primele 32 caractere din nume se iau n considerare.
Exemplu: x,i, a1, a_1, aib2c3, Axy.
Acesta_Este_Tot_un_NUME
Se recomanda ca numele sa fie sugestiv, adica sa sugereze pe ct posibil data
pe care o reprezinta.

sursa
obiect
executabil
Programarea calculatoarelor 32


1.2. Cuvinte cheie

Exista un numar de cuvinte care au o utilizare predefinita.
Exemplu: if, while, for, break, class,

1.3. Tipuri de date de baza


Tip

nr. biti

reprezentare

domeniu

Int

16

C2

[-2
15
, 2
15
-1]
Short 16 C2 [-2
15
, 2
15
-1]
Long 32 C2 [-2
31
, 2
31
-1]
Unsigned 16 ntreg fara semn [0, 2
16
-1]
unsigned long 32 ntreg fara semn [0, 2
32
-1]
[signed] char 8 ASCII [0, 255]
unsigned char 8 ASCII [-128, 127]
Float 32 flotant simpla precizie val. abs. [3.4*10
-38
; 3.4*10
38
]
Double 64 flotant dubla precizie val. abs. [1.7*10
-308
; 1.7*10
308
]
long double 80 flotant dubla precizie val. abs. [3.4*10
-4932
; 3.4*10
4932
]

1.4. Structura unei functii

tip nume(lista declaratiilor parametrilor formali) //antet
{
declaratii
instructiuni
}
- tip - tipul valorii returnate de functie (implicit este int)
- daca doresc sa nu returneze nimic tip este void
- lista declaratiilor parametrilor formali (parametrii separati prin virgula, cu
tipul si numele lor)
- poate fi vida
Limbajul C Notiuni de baza

33
Exemplu:
void f ()
void f (void)
int g ()
g ()
double h (void)
main ()

Parametri utilizati la apel se numesc parametri actuali sau efectivi.
Transmisia parametrilor se face prin valoare.

1.5. Comentariu

Un comentariu poate fi:
/* comentariu */ pe mai multe linii, sau
// comentariu pe o linie.

Ex.:
/*

*/
//

Comentariile sunt explicatii pentru programatori. Ele nu au nici un efect asupra
complilatorului si sunt omise la compilare.

Ex.:
F:
I:
E:


1.6. Constante

Programarea calculatoarelor 34
O constanta are un tip si o valoare. Att tipul ct si valoarea sunt
determinate de caracterele care intra n compunerea constantei. Valoarea unei
constante nu poate fi modificata n timpul executiei.

1.6.1.Constante ntregi

Pot fi n baza 10, 16 sau 8.
O constanta zecimala ntreaga este un sir de cifre zecimale.
- 16 biti int (daca o dorim long adaugam L sau l)
- 32 biti long
- unsigned se termina cu U sau u
- 16 biti (dorim long. ul, lu, LU, UL)
- 32 biti
Ex.: 40000u (16 biti)
O constanta octala este o succesiune de cifre octale (0..7) precedata de un 0
(zero) nesemnificativ.
- 16 biti
- 32 biti
- unsigned
O constanta hexa este o succesiune de cifre hexa (0..F) precedate de 0x sau
0X.

1. Constante flotante

O constanta flotanta reprezinta un numar rational. Ea se compune din:
- o parte ntreaga (poate fi vida) constanta zecimala
- o parte fractionala (poate fi vida) caracterul punct . + o succesiune de
cifre zecimale
- un exponent (poate fi vida) litera e sau E + o succesiune de cifre
zecimale (precedate de semn) (10
exp
)
Ex.:
123.
123.7
123.456e2

Limbajul C Notiuni de baza

35
Constantele flotante se reprezinta cu dubla precizie (64 biti)
- cu f, F simpla precizie
- l, L pe 80 biti

2. Constante caracter

O constanta caracter corespunzatoare unui caracter imprimabil se
reprezinta prin caracterul respectiv inclus ntre caractere apostrof c.
Exceptii:
- \\
- \
- \
Caractere netiparibile :
\t 9 TAB
\n 10 LF
\a 7 BEL
\b 8 BS
\v ?? VT
\f 12 FF
\r 13 CR
- orice cod ASCII \ddd, unde ddd este octal.

3. Sir de caractere

Sir

1.7. Caractere sau spatii albe

Definitie: Caracter sau spatiu alb:
- spatiu ( );
- tabulator aranj. (\ t);
- rnd nou (\ n);
Un comentariu poate fi inserat oriunde este legal sa apara un spatiu alb.

1.8.Variabile simple, tablouri si nregistrari
Programarea calculatoarelor 36

Definitie: variabila si schimba continutul n timpul executiei.
Definitie : variabila simpla nu are legaturi (de exemplu de ordine) cu
alte date. Variabila are un nume. i corespunde un tip (nu poate fi schimbat).
Corespondenta tip, nume variabila se face printr-o declaratie.
Mai multe date de acelasi tip formeaza un tablou.
Mai multe date de tipuri diferite formeaza o nregistrare (structuri).
Tipul unei structuri este un tip nou (tip utilizator). Un neajuns al tipurilor
utilizator definite n limbajul C este faptul ca nu se stabileste nici o legatura ntre
reprezentarea tipului si functiile care definesc operatii cu datele respective.
Acest neajuns a fost nlaturat n C++ prin introducerea notiunii de clasa.
Tipurile definite prin intermediul claselor se numesc tipuri abstract de date.


1.9. Declararea unei Variabile simple

n limbajul C nu exista declaratii implicite orice variabila trebuie
declarata:
tip lista_de_nume
unde tip cuvintele cheie ale tipurilor predefinite
lista_de_nume unul sau mai multe nume de variabile separate prin virgule.

Ex.:
int i, j;
char c;
long double x; //80 biti

1.10. Declararea unui tablou

tip nume [lim1][lim2] [limn];
unde tip tipul elementelor
lim i limita superioara a indicelui al i-lea: 0..limi-1 (este o expresie constanta
o expresie care poate fi evaluata la compilare n momentul ntlnirii ei de
catre compilator)
Limbajul C Notiuni de baza

37
Observatie: Numele unui tablou este un simbol care are ca valoare
adresa primului sau element si poate fi utilizat n diferite expresii.
La ntlnirea unei declaratii de tablou, compilatorul aloca o zona de memorie
necesara pentru a pastra valorile elementelor sale.

Ex.:
int vect [10]; //20 octete vect [0], , vect [9]
char tab [100]; //100 octete
double dmat [10][50]; //10*50*8=4000 octeti
La elementele acestui tablou ne referim prin:
dmat [0][0], dmat [0][1], , dmat [0][49]
dmat [1][0], dmat [1][1], , dmat [1][49]

dmat [9][0], dmat [9][1], , dmat [9][49]




1.11. Apelul si prototipul functiilor

ntr-un program o functie poate avea o definitie si unul dau mai multe
apeluri.
Antetul functiei este:
tip nume (lista_decl_par_formali)
Ex.: int f(int x, double y)
O functie poate fi apelata folosind o constructie de forma:
nume (lista_par_actuali) (1)
Observatie: Parametrii actuali se corespund cu cei formali prin ordine
si tip.
La apel se atribuie parametrilor formali valorile parametrilor actuali, apoi
executia se continua cu prima instructiune a functiei apelate.
La revenirea din functie se ajunge n functia din care s-a facut apelul si executia
continua cu constructia urmatoare apelului.
O functie poate fi apelata simplu punnd dupa apel caracterul ; sau utiliznd
constructia (1) ca operand al unei expresii. Un astfel de apel este valabil numai
Programarea calculatoarelor 38
pentru functiile care returneaza o valoare la revenirea din ele. n acest caz
valoarea returnata de functie se foloseste la evaluarea expresiei din care s-a
facut apelul.
Ex.1:
int tab [100];

f((tab); //functia are antetul: void f(int x[100]) sau void f(int x[])
Ex.2:
double mat[4][10];

fct (mat); // void fct (double m[ ][10])

O functie poate fi apelata ntr-un punct al unui fisier sursa daca n prealabil a
fost definita n acel fisier sursa.
Apelurile nu pot fi precedate ntotdeauna de definitia functiei apelate. n astfel
de cazuri definitia functiei nlocuita printr-un asa numit prototip al ei.
Definirea prototipului:
tip nume (lista tipurilor parametrilor formali);
Observatie: Se poate pune tot antetul urmat de ;.


Ex.:
void c(int x, long y[ ], double z);
sau
void c(int, long[ ], double);

Compilatorul utilizeaza datele din prototip pentru a verifica tipurile parametrilor
de la apel si a aloca memorie pentru acestia.
Utilizatorii limbajului C si C++ pot folosi o serie de functii aflate n bibliotecile
standard ale acestor limbaje. Prototipurile acestor functii se gasesc n fisiere
header (.h).

Ex.:
stdio.h //operatii I/E
string.h //operatii pe siruri de caractere
Limbajul C Notiuni de baza

39

Observatie: Puteti afla prototipul unei functii (n BC):
- scriind numele functiei
- Ctrl - F1

1.12. Preprocesare

nainte de compilare un fisier sursa C este prelucrat, efectundu-se
urmatoarele operatii:
1. includeri de fisiere sursa: #include;
2. definitii si apeluri de macrouri: # define;
3. compilare conditionata

1.12.1.Includeri de fisiere

#include specificator de fisier
//cauta n directorul curent sau pe calea precizata
sau
#include <specificator_de_fisier>
//pentru fisiere standard pentru prototipuri
// cauta n directoarele INCLUDE din Directories/Options

Ex.:
#include <stdio.h>
#include fis1.cpp
#include c:\\bc\\sursa\\fis2.c


1.12.2.Substituiri de caractere

# define nume succesiune_de_caractere
Se substituie nume cu succesiune_de_caractere peste tot n textul sursa.
Observatie: De obicei nume se scrie cu majuscule.
Este folosita pentru a defini constante.
O definitie # define nume este valabila pna cnd apare # undef nume.
Programarea calculatoarelor 40
Succesiunea de caracter dintr-o constructie #define poate contine nume care
au fost definite anterior prin alte constructii #define.

Ex.:

#define A 100
#define DIMAX (A*20)
char tab [DIMAX]; //tab [200];

Avantajele constantei simbolice:
- se pot defini nume sugestive unor constante:
#define PI 3.14159
- se pot face prescurtari
- permite nlocuirea simpla a valorii constantei cu o alta valoare, n toate
locurile unde apare.