Tipurile simple (sau tipurile de bază) ale limbajului
C/C++ definesc dimensiunea zonei de memorie ocupată de valoarea unei variabile precum şi modul în care va fi interpretat conţinutul acestei zone. Limbajul C/C++ oferă de asemenea un mecanism de conversie a tipului care va fi prezentat în cadrul lectiei operatori. Tipurile de bază ale limbajului C/C++ pot fi grupate în trei mulţimi: Tipuri întregi: char, short, int şi long. Aceste tipuri sunt utilizate pentru reprezentarea numerelor întregi. Diferenţa dintre acestea constă în dimensiunea zonei de memorie ocupată de o variabilă de acest tip şi implicit de mărimea domeniului de valori. Acest lucru este sintetizat în tabela 1. Tabela 1. Tipurile întregi Tipul Dimensiunea Domeniul memoriei ocupate char 8 biţi - 128..127 short 16 biţi - 32768..32767 int 16 biţi - 32768..32767 long 32 biţi -2147483648.. (long int) 2147483647 Tipuri reale: float, double Aceste tipuri sunt folosite pentru a reprezenta numere reale. Ele se disting prin precizia de reprezentare: float – numere reale în simplă precizie – aproximativ 6 cifre semnificative; double pentru numere reale în dublă precizie – aproximativ 15 cifre semnificative. Tabela 2. Tipurile reale Tipul Dimensiunea Domeniul memoriei ocupate float 32 biţi 3,4*10-37 3,4*1037
double 64 biţi 1,7*10-308 1,7*10308
long double 80 biţi 3,4*10-4932 1,1*104932
Tipul vid: void. Este un tip folosit pentru reprezentări de dimensiune nulă. Acest tip se utilizeaza atunci cand este necesar sa specificam absenta oricarei valori( de exemplu, pentru tipul functiilor care nu intorc nici un rezultat, cazul lui main). void main ( ) {} /* lista parametrilor este vida, iar functia nu intoarce nici un rezultat, lucru indicat prin specificarea tipului void, corpul functiei este vid { }, deci functia nu face nimic */ OBS! In limbajul C/C++ nu exista un tip de date special pentru valori logice. Valoarea 0 este asociata valorii de adevar fals, orice valoare diferita de 0 fiind asociata valorii de adevar adevarat. Pentru tipurile întregi se pot folosi specificările signed şi unsigned. Specificarea signed tip este echi-valentă cu tip iar unsigned tip are semnificaţia din Tabela 3. Tabela 3. Tipuri întregi unsigned Tipul Dimensiunea Domeniul
unsigned char 8 biţi 0 .. 255
unsigned short 16 biţi 0 .. 65535
unsigned (int) 16 biţi 0 .. 65535
unsigned long (int) 32 biţi 0 .. 4294967295
Literali
Literalii (sau constantele literale) sunt
valori constante; ele reprezintă valori care nu pot fi modificate pe parcursul execuţiei unui program. In limbajul C se folosesc diferite reguli sintactice pentru reprezentarea constantelor. Tabela 4 sintetizează unele din aceste reguli. Tabela 4. Constante literale Constante Exemple Explicaţii
întregi 123, -457, +423, 0 Notaţia zecimală( în baza 10)
012, 03724 Notaţia octală (prefix 0)-în baza 8 0x7F, 0X3, A24E Notaţie hexazecimală(prefix 0x sau 0X) 39u, 0245u, 57F3u în baza 16 Constante fără semn
întregi long 12L, 42153l, 042l Reprezentare pe 32 biţi
423uL, 25AfuL Constante fără semn pe 32 biţi
flotant 3.14159, -12.03, .425 Reprezentare fără exponent
-15.2E-3, 10e-12 Reprezentare cu exponent
caracter ‘a’, ‘A’, ‘^’
Şir de caractere “şir de caractere” Obs! ‘a’ este diferit de “a”
Există şi caractere speciale (de control) care sunt compuse din caracterul “\” şi din alt caracter. Acestea sunt: ‘\n’- interlinie (linie nouă); ‘\t’- tabulare; ‘\\’- caracterul \ (backslash); ‘\f’- retur de linie; ‘\0’- caracterul NULL; ‘\’’- caracterul ‘’’ ‘\’’ ’- caracterul ”;‘\r’- retur de car; ‘\u’- tabulare verticală; ‘\b’- backspace; ‘\ddd’ - caracter de cod octal ddd; ‘\xhh’ - caracter de cod hexazecimal hh. Declararea unei variabile şi a unei constante Declararea unei date trebuie sa se faca inainte ca ea sa fie folosita intr-o instructiune! Variabilele sunt obiectele de bază ale limbajului (date care isi pot modifica valoarea pe parcursul executiei programului) şi au un nume care este un identificator. Un identificator în limbajul C este un şir de caractere care trebuie să îndeplinească condiţiile: primul caracter este literă sau ‘_’ (underscore); următoarele caractere sunt caractere alfanumerice (litere sau cifre) sau ‘_’. Nu trebuie să coincidă cu vreun cuvânt cheie (vezi Tabela 5) Tabela 5. Cuvintele cheie ale limbajelor C şi C++ asm delete handle public this auto do if register throw break double inline return try case else int short typedef catch enum long signed union char extern new sizeof unsigned class float operator static virtual const for overload struct void continue friend private switch volatile default goto protected template while O variabilă se declară prin una din următoarele instrucţiuni: tip nume; tip nume = valoare; Mai multe variabile de acelaşi tip pot fi declarate în aceeaşi instrucţiune, despărţite prin virgule! O constantă se declară prin: const tip nume= valoare; Directiva #define, intr-un format simplu, permite definirea unei constante simbolice: #define nume valoare Cuvantul cheie typedef, in cadrul unei instructiunii declarative, permite definirea unor tipuri utilizator: typedef tip_baza nume_tip; Declararea unui set de constante(constanta de tip enumerare) - constante intregi din domeniul [0,32767] enum nume_set {lista_constante}; Exemple: enum logic {NU,DA}; // constanta NU=0, DA=1. enum set1 {A,B,C}; // constantele A=0,B=1,C=2. enum set2 {A=2,B=5,C};//A=2,B=5,C=6. enum set3 {A,B=2,C=4};//A=0,B=2,C=4. enum set4 {A=5,B,C=B,D}; // A=5,B=6,C=6,D=7. Exemple: int i, j, k,a,b=3,c=2+4; float eps = 1.e-4, pi = 3.14159,x=b*2.5,y;
char n1='\n';
const double e = 2.71828182845905;
const float pi = 3.14159;
#define PI 3.1415
#define NrMaxElevi 35
typedef unsigned int byte;
/* tipul de data trebuie definit inainte de a se declara o data
de acel tip */ byte a; OBS! Variabilele se declară la începutul funcţiilor (variabile locale) sau în exteriorul tuturor funcţiilor (variabile globale care sunt automat initializate cu 0). Se recomanda utilizarea constantelor simbolice atunci cand dorim sa asociem o denumire mai sugestiva unei valori, ceea ce conduce la cresterea lizibilitatii programului si modificarii acestuia mai usor. Declararea unui tip de data nu creeaza un tip nou de data, ci numai un nume nou care este atribuit unui tip existent si care poate fi folosit la declararea variabilelor de memorie si a constantelor simbolice, determinand ca un program sa fie mai usor de citit atunci cand trebuie modificat. EXPRESII
O expresie în limbajul C – ca în orice limbaj de
programare – este o secvenţă de operatori şi operanzi care descrie algoritmul de calcul al unei valori(combinatie valida de operanzi si operatori). Operanzii într-o expresie pot fi nume de variabile sau de constante (literali) constante funcţii care furnizeaza un rezultat. Aceşti operanzi, fiecare dintre ei, au un anume tip iar în funcţie de aceste tipuri se vor aplica operatori specifici pentru determinarea valorii expresiei. Operatorii sunt simboluri care determină executarea anumitor operaţii. unari- se aplică pe un singur operand binari- se aplică pe doi operanzi ternari- se aplică pe trei operanzi În funcţie de rezultatul obţinut în urma evaluării, există : Expresii matematice : rezultatul este un număr întreg sau real Expresii logice : rezultatul este 0 sau 1 care poate fi interpretat ca FALSE sau TRUE. Expresii te tip text : rezultatul este un şir de caractere. Expresii fără tip, care conţin apelul unei funcţii care nu furnizează nici un rezultat.