Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




Structuri si uniuni

c


Structuri si uniuni

1. Structuri



O structura este un tip de date definit de utilizator. O structura este o colectie de date de tipuri diferite. Datele dintr-o structura sunt numite componente sau campuri. O structura se defineste cu instructiunea

struct nume ;

unde nume este noul tip de date.

De exemplu, urmatoarea structura poate defini tipul numere complexe

struct complex ;

Mentionam ca o structura poate contine componente de orice tip, chiar si alte structuri.

Variabilele de tipul unei structuri se definesc cu instructiunea

struct nume lista de variabile;

De exemplu, intr-un program putem defini numerele complexe a si b cu instructiunea

struct complex a, b;

Adresarea unui element al unei structuri se face cu operatorul "." cu forma

nume.membru

Putem da valori variabilelor definite anterior astfel:

a.real = 1.0;

a.imag = -1.2 + sin(0.3);

Putem utiliza valorile componentelor unei structuri in expresii, ca de exemplu:

float x;

x = a.real * a.imag;

La fel ca si in cazul variabilelor putem defini variabile tip pointer la o structura, ce vor contine adresa unei structuri. Instructiunea de definire a unui pointer la o structura are formele

struct nume * identificator;

unde nume este numele structurii. De exemplu,

struct complex * pc;

defineste un pointer de tip struct complex. Variabila tip pointer poate fi initializata ca orice variabila tip pointer, folosind operatorul de calcul al adresei &

pc = &a;

In cazul unui pointer p la o structura, un camp al structurii este adresat astfel

(*p).membru

deoarece operatorul . are precedenta mai mare decat operatorul *.

Prin definitie, aceasta scriere se prescurteaza ca

p->membru

Putem defini un tip de date structura cu instructiunea typedef

typedef struct tipnou ;

In acest caz definirea unor variabile de tipul structurii se face mai simplu cu instructiunea

tipnou lista de variabile ;

Probleme rezolvate

Problema 1. Se considera structura

struct complex

;

ce descrie numerele complexe. Sa se defineasca o functie care sa adune doua numere complexe. Sa se faca un program care sa defineasca trei variabile de tipul complex, sa atribuie valori la doua dintre variabile si sa calculeze suma lor utilizand functia. Se vor scrie apoi valorile variabilelor pe ecran sub forma (real, imag). Vom defini tipul de date cu instructiunea typedef. Programul ce rezolva problema este urmatorul.

# include <stdio.h>

// structuri C

typedef struct

numcmp;

numcmp addcmp(numcmp a, numcmp b)

int main ()

Rezultatele rularii programului sunt cele de mai jos.

Probleme propuse

Problema 1. Se considera structura complex din problema propusa 1. Sa se faca un program care sa defineasca un vector x cu 10 componente de tipul complex. Se va calcula dimensiunea structurii complex si a vectorului x cu ajutorul instructiunii sizeof.

Problema 2. Se considera structura complex din problema propusa 1. Sa se defineasca functii pentru scaderea , inmultirea si impartirea a doua numere complexe. Prototipurile acestor functii vor fi

numcmp subcmp(numcmp a, numcmp b)

numcmp mulcmp(numcmp a, numcmp b)

numcmp divcmp(numcmp a, numcmp b)

Problema 3. Fie structura

struct data

;

ce descrie data nasterii unei persoane. Sa se defineasca un vector cu 5 elemente tip data care se vor initializa cu valorile

nume zi luna an

Radu 10 7 1985

Dragos 11 2 1992



Cosmin 5 9 1978

Ovidiu 8 9 1964

Raul 15 4 1994

Sa se calculeze cate persoane sunt nascute dupa anul 1990.

2. Uniuni

O uniune se defineste cu instructiunea

union nume ;

Toate campurile unei uniuni ocupa aceeasi zona de memorie. Uniunile se utilizeaza atunci cand variabile de tipuri diferite nu trebuie initializate in acelasi timp.

Variabilele de tipul unei uniuni se definesc cu instructiunea :

union nume lista de variabile;

Probleme rezolvate

Problema 1. Fie uniunea

union id

;

Sa se defineasca o variabila de tip id care se va initializa pe rand cu valorile "alb" si 10 si se vor scrie aceste valori pe ecran. Se va calcula dimensiunea uniunii id cu operatorul sizeof. Programul ce rezolva problema este urmatorul.

# include <stdio.h>

# include <string.h>

int main()

union id x1;

x1.size = 8;

printf('size : %dn', x1.size);

strcpy(x1.color, 'white');

printf('color : %sn', x1.color);

printf('union size : %dn', sizeof(id));

return 0;

Rezultatele rularii programului sunt cele de mai jos.

3. Functii de timp

  • Timpul curent este masurat in secunde incepand cu 1 ianuarie 1990 ora 0, GMT.
  • Variabilele ce contin timpul au tipul time_t.
  • Functia

time_t time(time_t*);

initializeaza variabile de tipul time_t cu timpul curent.

  • Functia   

char * ctime(time_t * t1);

converteste timpul curent GMT indicat de variabila t1 intr-un sir de caractere ce contine timpul curent local.

  • Structura predefinita

struct tm ;

contine timpul curent convertit in an, luna, zi, ore, minute, secunde.

  • Functia

struct tm * localtime(time_t * timeptr);

converteste timpul continut intr-o variabila time_t in structura tm.

  • Prototipurile functiilor de mai sus se afla in biblioteca <time.h>

Probleme rezolvate

Problema 1. Sa se completeze o variabila de tipul tm cu informatiile corespunzatoare si sa se afiseze aceste informatii pe ecran. Se va completa mai intai o variabila tip time_t cu functia time() si apoi structura tip tm cu functia localtime(). Se va afisa timpul curent local si cu functia ctime(). Se va afisa si timpul GMT gmtime().Programul ce rezolva problema este urmatorul.

# include <stdio.h>

# include <time.h>

// functii de timp

int main()

Rezultatele rularii programului sunt cele de mai jos.





Document Info


Accesari: 2450
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2025 )