Sunteți pe pagina 1din 59

Elemente de baz ale limbajului C/C++

Cuprins
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Istoric Elemente sintactice de baz Structura unui program C/C++ Apelul unei funcii Revenirea din funcii Directive preprocesor Comentarii Exemple de programe C/C++ Tipuri de date Constante Variabile simple Tablouri iruri de caractere
2

1. Istoric
A fost creat n anul 1972 de ctre Dennis Ritchie la AT&T Lab Implementat pentru prima data pe calculatoate PDP-11 sub SO UNIX In anul 1978 apare prima ediie a crii de referin The C programming Language de Brian Kernighan si Dennis Ritchie In anul 1988 apare standardul ANSI C
C99: ultimul standar C adoptat in anul 2000

In anul 1981 este creat limbajul C++ de ctre Bjarne Stroustroup la AT&T Lab, limbaj considerat ca un superset al limbajului C
standardizat in anul 1998 ultima versiune a standardului: 2003

Limbajul C a fost folosit la implementarea SO UNIX iar compilatorul C a fost scris n mare parte chiar n limbajul C
3

Istoric

Caracteristici:
asigur o foarte bun portabilitate a codului combin avantajele limbajelor de nivel nalt cu funcionalitatea limbajelor de asamblare C i C++ se folosesc la o gam larg de aplicaii: SO, grafica, baze de date,...
limbaje de band larg

2. Elemente sintactice de baz


Cuvinte cheie (keywords)
Sunt rezervate pentru declaraii de date i pentru instruciuni Standardul ANSI C prevede 32 de cuvinte cheie Implementrile C/C++ pot aduce extensii setului de cuvinte cheie Toate cuvintele cheie folosesc litere mici Limbajul C/C++ face distincie ntre litere mici i litere mari (este "case-sensitive") (de exemplu identificatorul Cod este diferit de cod) Cuvintele cheie vor fi introduse pe msura introducerii tipurilor de date i a instruciunilor
5

Elemente sintactice de baz

Identificatori
Sunt secvene de caractere folosite pentru nume de constante, tipuri de date, variabile sau funcii Un identificator este compus din litere mici sau mari, cifre i caracterul underscore (_) Un identificator nu poate s nceap cu o cifr Lungimea maxim a unui identificator depinde de implementare

Identificatorii trebuie s difere de cuvintele cheie

Elemente sintactice de baz

Constante
Sunt valori fixe, reprezentnd numere ntregi sau reale, caractere sau iruri de caractere De obicei se scriu cu litere mari Exemple:
12 23.45 'A "RRRYYY"

Elemente sintactice de baz

Operatori
Sunt simboluri utilizate pentru specificarea unor operaii de efectuat asupra unor variabile sau constante In urma aplicrii unui operator se obine un rezultat O combinaie valid de operatori, variabile, constante, apeluri de funcii formeaz o expresie
cea mai simpl expresie conine doar o variabil sau o constant

Exemple: operatori de atribuire, aritmetici, logici, relaionali, etc.

Elemente sintactice de baz

Delimitatori
Sunt simboluri care separ diverse entiti In limbajul C/C++ unele simboluri au dubl semnificaie, de operator i delimitator, n funcie de context
spaiul alb {, } (, ) [, ] <, > " ' /*, */ // ; (spaiu simplu, tab, newline sau LF, comentarii), delimitarea instruciunilor compuse compunerea expresiilor; definirea i apelul funciilor declarare tablou; referire element de tablou directive preprocesor sau ca operatori relaionali delimitare irurilor de caractere constante caracter sau secvene de evitare comentarii pe mai multe linii comentarii pe o singur linie marcare sfrit de instruciune
9

Elemente sintactice de baz

Date
Sunt caracterizate prin valori, operaii primitive i structur Tipurile de date se dau prin cuvinte cheie Exemple: char, int, float, double

Variabile
Permit reprezentarea n program a valorilor unor date, valori ce pot fi modificate pe parcursul execuiei programului

10

3. Structura unui program C/C++


In limbajul C/C++, programul este o colecie de uniti distincte numite funcii

Structura general a unui program C/C++:


[directive preprocesor] [declaraii globale] funcii

Preprocesorul efectueaz operaii prealabile compilrii (includere de fiiere, macrodefiniii):


directivele preprocesorului ncep ntotdeauna cu caracterul "#

Declaraiile globale specific tipuri de variabile sau tipuri de date respectiv funcii
11

Structura unui program C/C++ Orice program C/C++ conine o funcie cu numele main i eventual alte funcii Execuia programului ncepe cu funcia main iar la terminarea execuiei acestei funcii se ncheie i execuia programului In funcia main pot fi apelate alte funcii (proprii sau din biblioteci), care la rndul lor pot apela alte funcii, .a.m.d. Un program C/C++ nu poate avea mai multe funcii main
O funcie C/C++ are urmtoarea structur:
[tip_rezultat] <nume_functie>([lista_parametri_formali]) { [declaratii_locale] [instructiuni] }

12

Structura unui program C/C++

Tip rezultat:
specific tipul de date returnat de funcie poate s fie un tip predefinit sau un tip definit de utilizator dac nu este specificat se consider implicit c este tipul int dac funcia nu ntoarce nici un rezultat, se specific acest lucru prin tipul void (vid, lips)

Nume funcie:
este un identificator al limbajului:
ca urmare se face distincie ntre litere mici i litere mari funciile Fact() i fact() sunt diferite
13

Structura unui program C/C++

Parametri formali:
o list de variabile asociate datelor ce urmeaz a fi prelucrate, folosit la definirea funciei numele acestora trebuie s fie ct mai sugestiv pentru rolul sau coninutul acestora lipsa parametrilor formali se specific prin cuvntul cheie void

14

Structura unui program C/C++ Delimitatorii {,} ncadreaz o construcie numit instruciune compus (sau bloc), alctuit din declaraii i instruciuni
Declaraiile unui bloc se numesc declaraii locale i sunt valabile numai pn la sfritul blocului

15

Structura unui program C/C++ Deci, o funcie poate fi considerat ca fiind format din:
antet: definete interfaa cu restul programului blocul asociat: descrie operaiile efectuate

Limbajul C++ permite declaraii i n interiorul unui bloc, de exemplu nainte de utilizare:
domeniul unei astfel de declaraii este cuprins ntre poziia acesteia i sfritul blocului

16

Structura unui program C/C++ Se face distincie ntre declaraia i definiia unei funcii Declaraia (prototipul) este format din antetul funciei (nume funcie, tip rezultat, tipul i eventual numele fiecrui parametru formal) i se ncheie obligatoriu cu caracterul ;
Definiia cuprinde antetul (inclusiv numele parametrilor formali dar fr caracterul ;) urmat de blocul funciei

De regul, prototipul apare la nceputul programului a.i. compilatorul poate verifica corectitudinea apelurilor funciei, indiferent unde se afl definiia acesteia

17

Structura unui program C/C++

Observaii:
In interiorul unei funcii nu se admit alte definiii de funcii In limbajul C/C++ nu exist funcii ncorporate n limbaj (predefinite):
funciile unui program sunt definite de utilizator sau sunt luate din biblioteci de funcii C/C++

Funciile unui program pot fi amplasate n mai multe fiiere (module):


n acest caz se creaz un proiect ("project") folosind facilitile mediului de programare funciile definite ntr-un modul i folosite n alte module trebuie declarate nainte de folosire direct sau prin includerea unor fiiere antet cu prototipurile acestora
18

4. Apelul unei funcii


In limbajul C nu exist o instruciune special de apel Apelul unei funcii se face prin nume astfel:
nume_functie([lista_param_actuali]);

Noiuni: funcie apelant, funcie apelat Parametrii actuali: valori corespunztoare parametrilor formali, comunicate funciei n momentul apelului

19

Apelul unei funcii Dac nu exist parametri actuali, la apel se folosete combinaia nume_functie( ) Apelul unei funcii poate s apar n expresii mai simple sau mai complicate:
dac apare izolat, apelul se termin, cu caracterul ;

Parametrii actuali trebuie s corespund ca numr, poziie i tip cu parametrii formali Parametrii actuali sunt n general expresii:
dup evaluarea acestora se fac anumite conversii admise de la un tip de date la altul
20

5. Revenirea dintr-o funcie


Revenirea dintr-o funcie se face cu instruciunea return
Prin aceast instruciune se termin execuia funciei curente i se d controlul funciei apelante

Instruciunea return poate s apar oriunde n blocul unei funcii


Forme:
return; return expresie;

21

Revenirea dintr-o funcie

Valoarea expresiei (cu unele conversii implicite) este transmis funciei apelante:
expresia trebuie s aib tipul rezultatului declarat n prototipul funciei sau un tip ce poate fi convertit ctre acel tip

O funcie care returneaz un rezultat trebuie s conin o instruciune "return expresie"


Funcia apelant poate neglija rezultatul ntors de o funcie

Dac funcia nu returneaz ceva, instruciunea return poate lipsi iar revenirea din funcie se face dup execuia ultimei instruciuni

22

6. Directive preprocesor
Funciile din biblioteci sunt declarate mpreun cu constantele, tipurile i variabilele asociate n fiiere antet ("header"), avnd extensia ".h" Utilizarea acestor funcii necesit includerea fiierelor antet corespunztoare n program Acest lucru se realizeaz cu directiva preprocesor #include

23

Directive preprocesor Forme:


#include <nume_fisier> #include "nume_fisier"

Prima form permite includerea unor fiiere a cror amplasare este specificat n setrile mediului de programare A doua form include fiiere antet din directorul curent Exemple:
#include <stdio.h> #include "my_def.h"

24

Directive preprocesor Directiva "define":


#define identificator sir_simboluri

Permite definirea unor constante simbolice Identificatorul este nlocuit cu irul de simboluri, din poziia curent i pn la sfritul fiierului sau pn la ntlnirea unei directive #undef ce anuleaz definiia Exemple:
#define PI #define MAX #define DIM #undef PI 3.1415
100

MAX*5

25

7. Comentarii
Permit introducerea unor explicaii n programul surs pentru creterea lizibilitii programului Nu sunt luate n considerare de ctre compilator Comentariile n limbajul C/C++ se pot introduce n dou moduri:
/* Comentarii specifice limbajului C dar pot fi folosite i n limbajul C ++*/
caz n care tot ce este delimitat de caracterele /* i */ este considerat comentariu

// Comentarii specifice limbajului C++


n acest caz tot ce urmeaz dup caracterele // pn la sfritul liniei curente este considerat comentariu

26

Comentarii

La nceputul fiecrui program se poate utiliza un bloc de comentarii cu urmtorul coninut:


numele programului numele autorului programului, eventual adresa de e-mail o scurt descriere a programului data finalizrii primei versiuni a programului numele fiierului

Utilizarea judicioas a comentariilor n codul surs fac ca depanarea, revizuirea i ntreinerea programelor s fie mai uoar

27

8. Exemple de programe C/C++


Exemplul 1:
// directive preprocesor #include <stdio.h> // functia main void main(void) { printf("Hello world"); }

28

Exemplul 2: // directive preprocesor #include <stdio.h> int sqr(int); // prototip functie sqr void main(void) { int numar, rezultat; printf("Introduceti un numar intreg : "); scanf("%d", &numar); rezultat = sqr(numar); // apel functie sqr printf("%d la patrat = %d \n", numar, rezultat); } // definitie functie sqr int sqr(int z) { return(z*z); }

29

Exemplul 3: program pentru citirea i afiarea unui ir de caractere folosind funcii


// directive preprocesor /* includerea unor fisiere antet ce contin prototipurile functiilor din biblioteca standard folosite in program*/ #include <stdio.h> // definirea unei constante simbolice #define DIM 24 // declaratii globale // tablou de caractere char tab[DIM]; // prototipuri functii void cit_sir(void); void afis_sir(void);
30

void main(void) { cit_sir(); // apel functie de citire sir afis_sir(); // apel functie de afisare sir } // functie pentru citirea unui sir de caractere pe care il depune in tabloul global void cit_sir(void) { // apel functie din biblioteca standard pentru afisarea unui mesaj printf("\nIntroduceti sirul : "); // apel functie din biblioteca standard pentru citirea unui sir de caractere scanf("%s", tab); } // functie pentru afisarea unui sir de caractere, preluat din tabloul global void afis_sir(void) { // apel functie din biblioteca standard pentru afisarea unui mesaj // si a unui sir de caractere printf("\nSirul introdus anterior este : %s\n", tab); }

31

Observaii:
Comentariile pot s apar oriunde poate s apar un spaiu alb

Funciile printf() i scanf() fac parte din grupul de funcii de intrare/ieire pentru consol din biblioteca C:
aceste funcii permit realizarea dialogului dintre operator i program de aceea este necesar cunoaterea acestor funcii din documentaii sau din help-ul mediului de programare

Funcia main() poate ntoarce un rezultat i poate avea parametri

32

9. Tipuri de date
Data este o reprezentare a informaiei prelucrate (numr, mrime fizic, ...) caracterizat prin valorile pe care le poate avea, prin operaiile primitive de transformare i prin structur Tipul unei date determin valorile pe care aceasta le poate lua, dimensiunea zonei de memorie ocupate i modul n care este reprezentat valoarea n memorie Tipul unei date se specific prin cuvinte cheie

33

Tipuri de date

Clasificare:
tipuri fundamentale (aritmetice i void) tipuri derivate (tablouri, pointeri, tipuri definite de utilizator)

Alt clasificare:
tipuri predefinite (existente n limbaj) tipuri definite de utilizator

34

Tipuri de date

Tipuri fundamentale
Tipul void
Indic absena oricrei valori Utilizare: declararea unei funcii fr parametri sau fr rezultat (pn n aceasta faz)

Tipuri aritmetice
Tipuri de baz:char, int, float, double
bool(C++): true, false

Modificatori de tip: signed, unsigned, short, long

35

Tipuri de date
Tip bool [signed] char unsigned char [signed] int short [int] signed [short int] unsigned [int] unsigned [short int] [signed] long [int] unsigned long [int] Bii 8 8 8 16 16 16 16 16 32 32 Domeniu Reprez. Obs

-27 ...27 - 1 0...28 - 1


-215...215 - 1 -215...215 - 1 -215...215 - 1 0...216 - 1 0...216 - 1 -231...231 - 1 0...232 - 1

C2 C2
C2 C2 C2 C2 C2 C2 C2

float double long double

32 64 80

+-(3.4*10-38...3.4*10+38) VM +-(1.7*10-308...1.7*10+308) VM +-(3.4*10-4932...3.4*10+4932 VM

7 cifre 15 cifre 19 cifre

36

10. Constante
Constantele sunt valori fixe (numerice, caractere sau iruri de caractere), nealterabile prin program

Tipul constantei este determinat de compilator:


Implicit, pe baza valorii constantei Explicit, pe baza sintaxei utilizate

37

Constante

Constante ntregi
Tipuri: zecimale, octale, hexazecimale Tipul implicit:
0 215 231 215 - 1 231 - 1 232 - 1 int long int unsigned long int

Tipul explicit se precizeaz prin adugarea unui sufix (U,u, L, l):


U, u L, l UL, Ul, ul, uL unsigned int sau unsigned long int long int sau unsigned long int unsigned long int

38

Constante Constante zecimale (baza 10): prima cifr nu este 0 Constante octale (baza 8): prima cifr este 0, urmat de cifre octale Constante hexazecimale (baza 16): prefix 0x sau 0X, urmat de cifre hexazecimale

O constant ntreag devine negativ dac i se aplic operatorul unar de negativare "-" Exemple:
12, -15, 24u, 43l, 678ul 076, 0777u, 01275ul 0x13, 0x3412, 0X1234566

39

Constante

Constante flotante
Tip implicit: double Tip explicit: prin sufixe F,f, L,l
F,f L,l float long double

Se compun din:
o parte ntreag ca i o constant zecimal o parte fracionar: punct zecimal (.) urmat de o succesiune de cifre zecimale

un exponent: e(E)[+,-]sir_cifre_zecimale

40

Constante Restricii:
Partea ntreag i partea fracionar nu pot lipsi simultan Punctul zecimal pe de-o parte i simbolul e(E) cu exponentul pe de alt parte, nu pot lipsi deodat

Exemple:
9.23E6 9.23x106 2e-4 2x10-4 -.45E16 -0.4x1016 .0, 0., 1., 1.0

41

Constante

Constante caracter
Sunt caractere ncadrate ntre apostrofuri
exemplu: 'a', '0', '+', '$

Pentru reprezentarea intern se folosete codul ASCII In C tipul constantei caracter este int, cu octetul mai semnificativ 0 sau cu extensie de semn i poate s apar oriunde poate s apar tipul int

In C++ tipul constantei caracter este char


42

Constante Caractere ASCII:


neafiabile: afiabile: din setul extins: 0...31, DEL (127) spatiu(32), 33...126 128...255

Pentru a putea specifica caractere neafiabile, se utilizeaz "secvenele de evitare" ("escape sequences") care folosesc caracterul \ ("backslash")

43

Constante

\b 0x08 \f 0x0c \n 0x0a \r 0x0d \t 0x09 \v 0x0b \\ 0x5c \' 0x27 \" 0x22 \ddd ; \0xdd ; \0Xdd Exemple:
\8' BS

BS FF LF CR HT VT \ ' "

'\42' " '\x41' A


44

Constante

Constante ir de caractere
Sunt succesiuni de caractere delimitate de ghilimele:
Exemplu: "Sir de caractere (sic)"

Caracterele din interiorul irului pot fi secvene de evitare:


Exemplu: "\t Sir cu tabulare"

Caracterul " (ghilimele) poate s apar ntr-un ir dac se utilizeaz o secven de evitare:
Exemplu: "Tipul \"int\""

Un ir se continu pe rndul urmtor folosind caracterul \ (backslash), la sfritul rndului care se continu:
Exemplu: "Text (linia 1)\ continuare (linia 2)"
45

Constante Caracterele unui ir se memoreaz unul dup altul, pe 1 octet fiecare Sfritul de ir se marcheaz cu caracterul '\0' (NULL) Deci un ir de n caractere ocup (n+1) octei n memorie Exist i noiunea de ir nul: ""

Atenie:
Caracterul 'A' ocup 1 octet n C++ i 2 octei n C irul "A" ocup 2 octei irul nul "" ocup 1 octet
46

11. Variabile simple


Variabila permite reprezentarea n program a valorii unei date, valoare ce poate fi modificat pe parcursul execuiei unui program Referirea la o variabil se face prin numele acesteia:
prin nume putem citi valoarea variabilei i putem modifica (scrie) aceast valoare

O variabil simpl (sau izolat) nu are legtur cu alt variabil simpl Unei variabile simple i corespunde un tip de date ce nu poate fi schimbat pe parcursul execuiei programului

47

Variabile simple

Tipul unei variabile se specific prin cuvinte cheie


Corespondena ntre numele unei variabile i tipul acesteia se definete printr-o declaraie:
tip nume_var; tip lista_de_nume;

Exemple:
int suma; int suma, produs, media; char answer;

48

Variabile simple

Observaii:
1. Declaraia se termin obligatoriu cu delimitatorul ; 2. Pentru variabile se folosesc, de obicei, litere mici 3. Variabilele declarate n interiorul unei funcii (bloc) se numesc variabile locale (automatice) iar cele declarate n afara oricrei funcii se numesc variabile globale 4. Fiecrei variabile i corespunde o zon din memoria intern care are asociate dou valori:

adresa zonei de memorie (referin, left-value sau l-value) (poate sta n stnga unui operator de atribuire) valoarea memorat (r-value sau right-value) (poate sta numai n dreapta unui operator de atribuire !)
49

Variabile simple Variabilele se pot iniializa prin construcii de forma:


tip nume = expresie_constanta;

Variabilele globale se aloc n memorie la compilare i se iniializeaz cu valoarea expresiei:


implicit se iniializeaz cu zero

Variabilele locale (automatice) se aloc pe stiv, la execuie:


cele neiniializate au valori nedefinite

Dac tipul expresiilor de iniializare nu coincide cu tipul variabilei pe care o iniializeaza atunci se fac conversii de tip (cele permise) Exemple:
char ch='A', ans = 'N'; int k=-100, i=0; float e=2.7172;
50

12. Tablouri
Un tablou este o list de elemente de acelai tip plasate succesiv n memorie
Orice tablou are un nume

Tipul elementelor tabloului reprezint tipul tabloului respectiv


Tipuri:
Unidimensionale (vectori) Multimensionale

51

Tablouri

Tablouri unidimensionale (vectori)


Declaraia tabloului:
tip nume_tablou[dimensiune]; tip este un tip de dat (predefinit sau definit de utilizator) nume_tablou este un identificator [ ] este delimitator dimensiune este o expresie constant ntreag i pozitiv ce specific numrul de elemente din tablou

52

Tablouri

Pentru referirea unui element se folosete operatorul de indexare [ ], preciznd numele tabloului i poziia elementului n tablou (numit i index sau indice):
nume_tablou[index]

Indexul este, n general, o expresie ntreag i pozitiv (nu neaprat constant) Primul element are indexul 0 iar ultimul are indexul (dimensiune-1)

53

Tablouri Pe baza numrului de elemente i a tipului, compilatorul determin dimensiunea zonei de memorie care se aloc tabloului, dup relaia:
dimens_memorie = sizeof(tip) * dimensiune

Exemplu:
int tab[100]; primul element: tab[0] ultimul element: tab[99] un element oarecare: tab[i] dimensiunea memoriei alocate tabloului este: sizeof(int)*100 = 200

54

Tablouri

Dup alocarea memoriei necesare, la compilarea restului programului sau la execuie, nu se mai fac verificri de domeniu la indici:
de exemplu o referire de genul tab[200] nu va fi semnalat ca eroare ns va genera surprize la execuie

Acest lucru impune o mai mare atenie din partea programatorului

55

Tablouri

Tablouri multidimensionale
Declaraie:
tip nume_tablou[dim1][dim2]...[dimN];

Referirea unui element se face astfel:


nume_tablou[index1][index2]...[indexN];

Dac n=2 tabloul se numete matrice


Exemplu: float tab[10][5];

56

Tablouri

Un tablou cu mai multe dimensiuni este de fapt un tablou unidimensional avnd ca elemente alte tablouri
Exemplu:
int tab[10][20];
este un tablou cu 10 elemente iar fiecare element este un tablou de 20 de numere ntregi

57

13. iruri de caractere


In limbajul C nu exist un tip de date special pentru iruri de caractere, dar se pot folosi tablourile unidimensionale de caractere pentru a memora iruri de caractere
Declarare:
char nume_tablou[dimensiune];

Pentru a marca sfritul irului, dup ultimul caracter se adaug un octet cu valoarea 0 (caracterul '\0'):
In cazul unui ir vid nume_tablou[0] = '\0'

58

iruri de caractere

Intr-un tablou se pot memora cel mult (dimensiune-1) caractere


Terminatorul '\0' permite testarea uoar a sfritului irului de caractere Constantele iruri de caractere pot fi folosite pentru iniializarea unui tablou de caractere
Exemplu:
char tab[ ] = Program de test;

59

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