Sunteți pe pagina 1din 4

Tipul de date struct

Elemente de teorie
n anumite situaii nu este sucient o structur de date care conine doar elemente de acelai tip, ca de exemplu tablourile. Pentru a putea construi structuri de date care s conin tipuri de date diferite s-a introdus tipul de date struct . Acest tip de date poate conine mai multe cmpuri, ecare cu tipul su de date. Sintax:
struct nume_structura { tip1 camp1_1 , camp1_2 ,. . ., camp1_n1 ; tip2 camp2_1 , camp2_2 ,. . ., camp2_n2 ; ... tipm campm_1 , campm_2 ,. . ., campm_nm ; };

O variabil structur cu aceste cmpuri se declar prin:


struct nume_structura variabila;
Exemplu:

struct persoana { char nume[20], prenume[20], ocupatie[20]; int varsta; };

O variabil pers cu o astfel de structur se declar prin:


struct persoana pers;

Cmpurile variabilei pers se acceseaz prin operatorul .


Exemplu:

pers.nume="Popescu"; pers.prenume="Ion";

pers.varsta=20; pers.ocupatie="Student";

Exemplu de program n care se citete o list de persoane:


#include<stdio.h> #include<malloc.h> struct persoana { char nume[20], prenume[20], ocupatie[20]; int varsta; }; void main() { struct persoana *v; int i, n; printf("nr persoane n="); scanf("%d",&n); v=(struct persoana *)malloc(n*sizeof(struct persoana)); for(i=0;i<n;i++) { printf("nume="); fflush(stdin); gets(v[i].nume); printf("prenume="); gets(v[i].prenume); printf("varsta="); scanf("%d",&v[i].varsta); printf("ocupatie="); fflush(stdin); gets(v[i].ocupatie); } printf("Persoanele introduse\ n"); for(i=0;i<n;i++) printf("%s %s - %d ani - %s\ n", v[i].nume, v[i].prenume, v[i].varsta, v[i].ocupatie); }

De obicei pentru a simplica utilizarea de structuri se combi declararea stcturii cu denirea unui tip nou. Pentru exemplul de mai sus:
typedef struct persoana { char nume[20], prenume[20]; int varsta; char ocupatie[20]; } persoana;

n acest caz restul programului devine


void main() { persoana *v; int i, n; printf("nr persoane n="); scanf("%d",&n); v=(persoana *)malloc(n*sizeof(persoana)); for(i=0;i<n;i++) { printf("nume="); fflush(stdin); gets(v[i].nume); printf("prenume="); gets(v[i].prenume); printf("varsta="); scanf("%d",&v[i].varsta); printf("ocupatie="); fflush(stdin); gets(v[i].ocupatie); } printf("Persoanele introduse\ n"); for(i=0;i<n;i++) printf("%s %s - %d ani - %s\ n", v[i].nume, v[i].prenume, v[i].varsta, v[i].ocupatie); }

Se observ c n toate declaraiile a disprut cuvntul cheie struct, deoarece a fost denit tipul persoana ca ind struct persoana .

Exerciii i probleme
1. S se scrie un program pentru operaii cu numere complexe. Acest program s efectueze: suma, diferena, produsul a dou numere complexe i s calculeze modulul unui numr complex. Numerele complexe vor  denite cu ajutorul unei structuri cu dou cmpuri: real i complex. Operaiile vor  efectuate prin intermediul unor funcii corespunztoare. 2. S se introduc o list de studeni folosind o structur student cu urmtoarele cmpuri: nume, prenume, data_n (=data naterii, care de asemenea este o structur), dou cmpuri cu note, un camp cu media calculat din cele dou note. Data va  o structur cu trei cmpuri: zi,luna, an. (a) Sortai lista descresctor dup medie. (b) Sortai lista cresctor dup nume. n ambele cazuri aai lista frumos ntr-un tabel.

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