Sunteți pe pagina 1din 11

30 Programarea calculatoarelor

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 pâna 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 utilizând 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++. sursa
Un fisier care contine un program scris în C sau care contine numai o parte a
acestuia se va numi fisier de sursa.

obiect
compilare

executabil

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 cât posibil data
pe care o reprezinta.
32 Programarea calculatoarelor

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 [-215, 215-1]


Short 16 C2 [-215, 215-1]
Long 32 C2 [-231, 231-1]
Unsigned 16 întreg fara semn [0, 216-1]
unsigned long 32 întreg fara semn [0, 232-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*1038]
Double 64 flotant dubla precizie val. abs. [1.7*10-308; 1.7*10308]
long double 80 flotant dubla precizie val. abs. [3.4*10-4932; 3.4*104932]

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
34 Programarea calculatoarelor

O constanta are un tip si o valoare. Atât tipul cât 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) (10exp)
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’);
- rând nou (‘\ n’);
Un comentariu poate fi inserat oriunde este legal sa apara un spatiu alb.

1.8.Variabile simple, tablouri si înregistrari


36 Programarea calculatoarelor

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 întâlnirii 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 întâlnirea 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 punând dupa apel caracterul ‘;’ sau utilizând
constructia (1) ca operand al unei expresii. Un astfel de apel este valabil numai
38 Programarea calculatoarelor

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, efectuându-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 pâna când apare # undef nume.
40 Programarea calculatoarelor

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.

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