Documente Academic
Documente Profesional
Documente Cultură
Tipuri de date
Observaţie: Pentru fiecare tip predefinit din limbajul C există cuvinte rezervate,
care reprezintă modificatori de tip: unsigned, signed, long şi short pentru tipul int;
signed şi unsigned pentru tipul char; long pentru tipul double. Cuvintele rezervate
dintre parantezele pătrate sînt opţionale şi diferitele combinaţii definesc acelaşi tip
de dată.
Tipuri de date
Declararea variabilelor
În C nu există declaraţii implicite (A). Declararea variabilelor se face
asemănător cu limbajul Pascal, prin listă de identificatori pentru care se specifică
tipul. Deosebirea constă doar în sintaxă: în C se scrie întîi tipul, apoi lista de
variabile (D). În plus, în C nu există secţiune specială pentru declararea
variabilelor (D). Declararea se poate face oriunde, iar domeniul de valabilitate
este limitat la blocul în care s-a făcut declaraţia.
• în Pascal: VAR lista_variabile:tip;
• în C: tip lista_variabile;
Exemple:
unsigned x,y,z;
float a,b,c;
char k;
Tipul caracter
Tipul caracter memorează caractere ale codului ASCII, reprezentate pe un
octet. Variabilele de tip caracter pot fi utilizate şi ca valori numerice (modul de
utilizare se alege automat, în funcţie de expresia din care face parte operandul
respectiv).
Valoarea numerică folosită depinde de modul de declarare a caracterului:
cu sau fără semn. Pentru caracterele cu coduri mai mici decât 128 nu se sesizează
nici o diferenţă (se obţine aceeaşi valoare şi pentru interpretarea ca virgulă fixă
aritmetică şi pentru interpretarea ca virgulă fixă algebrică). Pentru caracterele cu
coduri mai mari de 127, valoarea obţinută este diferită.
Ştiinţa învăţării unui limbaj de programare. Teorie
Exemple:
• declararea şi utilizarea variabilelor de tip caracter
#include<stdio.h>
void main()
{ char a;
unsigned char b;
a=200; b=200;
printf("\n\t intreg: %d \t caracter: %c",a,a);
printf("\n\t intreg: %d \t caracter: %c",b,b);}
Se observă că, deşi au fost iniţializate şi tratate în mod identic, valoarea numerică
diferă în funcţie de modul de declarare (a este cu semn, b este fără semn). Funcţia
printf va fi prezentată ulterior.
3.3 Constante
Întregi Da
Numerici
Reali Da
Literali (se autoidentifică prin
Caracter Da
Constante valoare)
Nenumerici Şir de caractere Da
Logic Nu
Constante simbolice (identificatori asociaţi constantelor) Da
Exemple: ′B′, ′b′, ′7′, ′ ′ (spaţiu), ′*′, ′\\′ (caracterul backslash, cod ASCII
92), ′\′′ (caracterul apostrof, cod ASCII 39), ′\″′ (caracterul ghilimele, cod
ASCII 34).
Exemple:
Literal Cod ASCII Denumire Utilizare
′\a′ 7 BEL Emite un sunet
′\b′ 8 BS Revenire cu un spaţiu (backspace)
′\t′ 9 HT Tab orizontal (9) spaţii
′\n′ 10 LF Newline, corespunde perechii CR/LF – rînd nou
′\v′ 11 VT Tab vertical
′\f′ 12 FF Pagină nouă la imprimantă (form feed)
′\r′ 13 CR Poziţionare la începutul rîndului (carriage
return)
Exemple:
#define pi 3.14159
pi=7.9; /*eroare la compilare*/
Exemple:
float pi=3.14159;
pi=7.9; /*nu este eroare*/
Exemplu:
const float PI=3.14159;
dacă se încearcă o atribuire (de exemplu PI=7), se generează eroare.
Tipul masiv
Masivul este o structură de date omogenă, cu acces direct la elementele
sale. În limbajul C un masiv se declară folosind o construcţie de forma:
tip nume[d1][d2]…[dn];
unde tip este tipul comun elementelor masivului iar d1, d2, dn sînt expresii
constante (care pot fi evaluate la compilare) care indică numărul de elemente de pe
fiecare dimensiune. Se acceptă oricîte dimensiuni, cu condiţia ca structura în
ansamblul ei să nu depăşească 64Ko.
Exemple:
int b[10]; /* vector cu 10 componente intregi*/
float a[10][20]; /* matrice cu 10 linii si 20 coloane */
Exemple:
int b[10]={2,3,0,5,6,7,3,6,8,5};
/*vectorul contine valorile 2 3 0 5 6 7 3 6 8 5*/
int b[10]={2,3,0,5,6,7,3,6,8,5,6};
/*se va semnala eroare la compilare, deoarece sînt mai multe
valori pentru initializare*/
int b[10]={2,3,0,5,6,7};
/* vectorul contine valorile 2 3 0 5 6 7 0 0 0 0*/
Tipuri de date
int b[]={1,2,3,4,5,6,7,8,9,0};
/*se rezerva spatiu pentru 10 elemente, care sint
initializate
cu valorile 1,2,3,4,5,6,7,8,9,0*/
float a[5][3]={{1,2,3},{1,2,3},{1,2,3}};
/* matricea contine valorile 1 2 3 1 2 3 1 2 3 0 0 0 0 0 0*/
float a[5][3]={{1,2},{1,2,3},{1}};
/* matricea contine valorile 1 2 0 1 2 3 1 0 0 0 0 0 0 0 0*/
Masivul poate fi referit global prin numele său, care reprezintă în Pascal şi
C adresa simbolică de început a zonei de memorie în care sînt memorate
elementele acestuia. Elementele se referă direct, prin numele masivului şi indicele
(indicii) corespunzători. De exemplu:
a[5][1] - elementul de pe linia a 6-a, coloana a 2-a;
b[5] - al 6-lea element din vector.
În C, primul indice de pe fiecare dimensiune are valoarea 0, iar
compilatorul nu verifică corectitudinea indicilor (în sensul de depăşire a
dimensiunilor masivului la referirea elementelor). Regăsirea elementelor se face
prin calcularea adreselor lor relativ la adresa de început a masivului. Aceste calcule
vor fi detaliate în capitolul despre pointeri.
Exemple:
float x[100];
x[0]=5.987; /*primul element*/
x[99]=7.4539; /*ultimul element*/
Exemple:
1. char s[10]="Limbajul C";
0 1 2 3 4 5 6 7 8 9 10
L i m b a j u l C 0x00
3. char[]="este";
4. declaraţia char x[4]="ABC";
este echivalentă cu char x[4]={"A","B","C",0x00};
Tipul articol
Articolul este o structură de date eterogenă, cu acces direct la elementele
sale. Tipul articol din C (denumit în continuare structură, conform terminologiei
C) este asemănător tipului record din Pascal şi are următoarea sintaxă:
unde nume_tip_art, var1, var2,…, varn sînt nume care pot lipsi, dar nu toate
deodată. Dacă nume_tip_art lipseşte, atunci măcar var1 trebuie să fie prezent. Dacă
var1, var2,…, varn lipsesc, atunci nume_tip_art trebuie să fie prezent. În
continuare, nume_tip_art este un tip nou de date, iar var1, var2,…, varn sînt
variabile de tipul nume_tip_art.
Oricare din variabilele de tip structură poate să fie un masiv cu elemente de
tip structură, dacă se modifică astfel: în loc de var1 (de exemplu) se scrie
var1[dim1][dim2]…[dimn].
Lista_cîmpuri este o înşiruire de declaraţii de cîmpuri, asemănătoare
declaraţiilor de variabile (de forma tip nume_cîmp). Cîmpurile unei structuri pot fi
variabile simple, masive sau chiar alte structuri.
O variabilă de tip nume poate fi declarată şi ulterior definirii structurii:
struct nume var1;
Descrierea anterioară constituie o definire implicită de nou tip de dată. Este
posibilă definirea explicită de nou tip de dată, adăugînd cuvîntul rezervat typedef în
faţa declarării.
Exemplu: definirea tipului de dată număr complex, a unei variabile de acest tip şi a
unui masiv unidimensional cu elemente de tip complex se poate face în oricare din
următoarele variante (pentru un număr complex se va reţine partea reală şi partea
imaginară):
a) struct COMPLEX{float r,i;}a,b[100];
b) struct COMPLEX{float r,i;};
struct COMPLEX a,b[100];
c) struct COMPLEX{float r,i;};
COMPLEX a,b[100];
d) struct {float r,i;}COMPLEX;
COMPLEX a,b[100];
e) typedef struct {float r,i;} COMPLEX;
COMPLEX a,b[100];
f) typedef struct COMPLEX{float r,i;};
struct COMPLEX a,b[100];
g) typedef struct COMPLEX{float r,i;};
COMPLEX a,b[100];
Ştiinţa învăţării unui limbaj de programare. Teorie
#include <string.h>
main()
{ struct articol {char nume[40];
char adresa[20];
int an, luna, zi;}
struct articol pers;
……………
strcpy(pers.nume, "Popescu Ion");
strcpy(pers.adresa, "Bucuresti, Pta. Romana 77");
pers.an=1979; pers.luna=3; pers.zi=15;}