Programarea Calculatoarelor, seria CC
Definirea unei structuri:
struct A {
int a, b, c;
}; // se va folosi: "struct A x" pentru a declara o variabila de acest tip
typedef struct A B; // asa se poate folosi "B x"
// intr-un singur pas:
typedef struct C {
int x, y;
} C;
typedef struct {
int x, y, z;
} POINT;
int main()
{
POINT p, *pp;
pp = &p; // pp va fi un pointer catre p
p.x = 1;
(*pp).y = 2;
pp->z = 3;
printf("%d %d %d\n", pp->x, p.y, p.z
return 0;
}
Uniunile permit accesarea aceleiași zone din memorie ca fiind de mai multe tipuri de date. Toate elementele declarate într-o uniune ocupă aceeași zonă de memorie, dimensiunea ei fiind maximul dintre dimensiunile membrilor. Declararea unei uniuni are aceeași sintaxă cu declararea unei structuri.
Exemplu:
Folosite pentru a da nume simbolice. Sintaxa:
enum nume_enumeratie { val1, val2, val3, ... };
int main()
{
int a, b, rez;
enum operatii { adunare, scadere, inmultire } op;
scanf("%d%d%d", &a, &b, &op);
switch (op) {
case adunare: rez = a + b; break;
case scadere: rez = a - b; break;
case inmultire: rez = a * b; break;
}
printf("%d\n", rez);
return 0;
}
Declararea unei variabile de tip pointer la funcție are următoarea sintaxă:
Exemplu de utilizare:
#include <stdio.h>;
int cmp_cresc ( const int x, const int y )
{
if ( x == y )
return 0;
return x > y ? 1 : -1;
}
int cmp_desc ( const int x, const int y )
{
if ( x == y )
return 0;
return x > y ? -1 : 1;
}
void swap ( int *x, int *y)
{
int aux;
aux = *x;
*x = *y;
*y = aux;
}
void sort(int v[], int n, int (*cmp) ( const int x, const int y) )
{
int i, j;
for ( i = 0; i < n - 1; i++ )
for ( j = i + 1; j < n; j++ )
if ( cmp ( v[i], v[j] ) == 1 )
swap( &v[i], &v[j] );
}
int main()
{
int v[100], n, ord;
int (*cmps[2]) ( const int, const int ) = { cmp_cresc, cmp_desc };
// citire n si vector ...
printf("Alegeti tipul de sortare: 0 - crescator; 1 - descrescator.\n");
scanf("%d", &ord);
sort(v, n, cmps[ord]);
// afisare vector sortat ...
return 0;
}
Sunt precedate întotdeauna de
Exemple directive de preprocesare:
Exemple macrodefiniții (
#define N 100
#define MAX( a , b ) ( ( a ) > ( b ) ? ( a ) : ( b ) )
int main()
{
int v[N], n, i, max;
// citire vector
max = v[0];
for ( i = 1 ; i < n ; i++ )
max = MAX ( max, v[i] );
// ...
}
Să se scrie o funcție pentru calculul integralei definite, pe un interval dat [a,b] a unei funcții oarecare (cu rezultat real) f(x), prin metoda trapezelor, cu un număr dat de pași n.
Funcția primește ca argument adresa funcției de integrat și numărul de pași și
va avea antetul
Programul principal va apela funcția de calcul a integralei pentru două funcții diferite și un n suficient de mare. Se pot integra functiile sin(x) si cos(x) pe intervalul [0, PI].
Să se definească tipul structură
Să se definească o structură