Documente Academic
Documente Profesional
Documente Cultură
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
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
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"
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
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
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
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
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
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
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++
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
21
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
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
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
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
26
Comentarii
Utilizarea judicioas a comentariilor n codul surs fac ca depanarea, revizuirea i ntreinerea programelor s fie mai uoar
27
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
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
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
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
C2 C2
C2 C2 C2 C2 C2 C2 C2
32 64 80
36
10. Constante
Constantele sunt valori fixe (numerice, caractere sau iruri de caractere), nealterabile prin program
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
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
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 \ ' "
Constante
Constante ir de caractere
Sunt succesiuni de caractere delimitate de ghilimele:
Exemplu: "Sir de caractere (sic)"
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
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
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
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
51
Tablouri
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
55
Tablouri
Tablouri multidimensionale
Declaraie:
tip nume_tablou[dim1][dim2]...[dimN];
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
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
59