// structuri tip C
typedef struct
{
float real;
float imag;
} numcmp;
numcmp addcmp(numcmp a, numcmp b)
{
numcmp c;
c.real = a.real + b.real;
c.imag = a.imag + b.imag;
return c;
}
int main ()
{
numcmp cx, cy, cz;
numcmp * pv;
cx.real = 1;
cx.imag = 1;
cy.real = 0;
cy.imag = 1;
cz = addcmp(cx, cy);
// apeleaza componentele cu operatorul .
printf("(%f , %f)\n", cz.real, cz.imag);
pv = &cz;
// apeleaza componentele prin pointer
printf("(%f , %f)\n", pv->real, pv->imag);
return 0;
}
Rezultatele rulării programului sunt cele de mai jos.
7.3Probleme propuse
Problema 1. Se consideră structura complex din problema rezolvată 1. Să se facă un program care să definească un vector x cu 10 componente de tipul complex. Se va calcula dimensiunea structurii complex şi a vectorului x cu ajutorul instrucţiunii sizeof.
Problema 2. Se consideră structura complex din problema rezolvată 1. Să se definească funcţii pentru scăderea, înmulţirea şi împărţirea a două numere complexe. Prototipurile acestor funcţii 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
{
char nume[20];
int zi, luna, an:
};
ce descrie data naşterii unei persoane. Să se definească un vector cu 5 elemente tip data care se vor iniţializa 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
Să se calculeze câte persoane sunt născute după anul 1990.
7.4Uniuni
O uniune se defineşte cu instrucţiunea
union nume {lista de declaraţii de tip};
Toate câmpurile unei uniuni ocupă aceeaşi zonă de memorie. Uniunile se utilizează atunci când variabile de tipuri diferite nu trebuie iniţializate în acelaşi timp.
Variabilele de tipul unei uniuni se definesc cu instrucţiunea :
union nume lista de variabile;
Probleme rezolvate
Problema 1. Fie uniunea
union id
{
char culoare[10];
int marime;
};
Să se definească o variabilă de tip id care se va iniţializa pe rând cu valorile “alb” şi 10 şi se vor scrie aceste valori pe ecran. Se va calcula dimensiunea uniunii id cu operatorul sizeof. In program definim tipul de date corespunzător uniunii, id, cu instrucţiunea typedef.
Programul ce rezolvă problema este următorul.
# include
# include
typedef union
{
int size;
char color[20];
} id;
int main()
{
id x1;
x1.size = 8;
printf("size : %d\n", x1.size);
strcpy(x1.color, "white");
printf("color : %s\n", x1.color);
printf("union size : %d\n", sizeof(id));
return 0;
}
Rezultatele rulării programului sunt cele de mai jos.
7.5Funcţii de timp
In acest paragraf vom prezenta funcţiile de timp. Prototipurile acestor funcţiilor se află în biblioteca sau .
-
Timpul curent este măsurat în secunde începând cu 1 ianuarie 1990 ora 0, GMT.
-
Variabilele ce conţin timpul au tipul time_t.
-
Funcţia
time_t time(time_t*);
iniţializează variabile de tipul time_t cu timpul curent.
char * ctime(time_t * t1);
converteşte timpul curent GMT indicat de variabila t1 într-un şir de caractere ce conţine timpul curent local.
struct tm {
int tm_sec; /* seconds after the minute - [0,59] */
int tm_min; /* minutes after the hour - [0,59] */
int tm_hour; /* hours since midnight - [0,23] */
int tm_mday; /* day of the month - [1,31] */
int tm_mon; /* months since January - [0,11] */
int tm_year; /* years since 1900 */
int tm_wday; /* days since Sunday - [0,6] */
int tm_yday; /* days since January 1 - [0,365] */
int tm_isdst; /* daylight savings time flag */
};
conţine timpul curent convertit în an, luna, zi, ore, minute, secunde.
struct tm * localtime(time_t * timeptr);
converteşte timpul conţinut într-o variabilă time_t în structura tm.
Probleme rezolvate
Problema 1. Să se completeze o variabilă de tipul tm cu informaţiile corespunzătoare şi să se afişeze aceste informaţii pe ecran. Se va completa mai întâi o variabila tip time_t cu funcţia time() şi apoi structura tip tm cu funcţia localtime(). Se va afişa timpul curent local şi cu funcţia ctime(). Se va afişa şi timpul GMT gmtime().
Programul ce rezolvă problema este următorul.
# include
# include
// functii de timp
int main()
{
time_t t1, t4;
struct tm t3;
struct tm * t2;
// calculeaza timpul
t1 = time(NULL);
printf("%s\n", ctime(&t1));
// calculeaza timpul local
t2 = localtime(&t1);
t3 = * t2;
printf("local time : %i:%i:%i\n", t3.tm_hour, t3.tm_min, t3.tm_sec);
// converteste structura tm în time_t
t4 = mktime(t2);
printf("%s\n", ctime(&t4));
// calculeaza timpul GMT
t2 = gmtime(&t1);
t3 = * t2;
printf("GMT time : %i:%i:%i\n", t3.tm_hour, t3.tm_min, t3.tm_sec);
return 0;
}
Rezultatele rulării programului sunt cele de mai jos.
Dostları ilə paylaş: