Lab10 Struct

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

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], char 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:


#inculde<stdio.h>
#inculde<malloc.h>
struct persoana
{
char nume[20], prenume[20], char 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:
2

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 disprul 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