Sei sulla pagina 1di 6

ESEMPIO PUNTATORE /* pointer.c illustra l'utilizzo dei puntatori */ #include <stdio.

h> int main() { int b,c; /* definisco 2 interi */ int *a; /* definisco a come puntatore a intero */ b=10; a=&b; /* assegno a b il valore 10 */ /* assegno ad a l'indirizzo di memoria di b */

c=*a; /* assegno a c il valore contenuto all'indirizzo di memoria che 'e specificato da a quindi siccome a contiene l'indirizzo in memoria di b c sara' uguale a b */ printf("a = %d\n",a); printf("b = %d\n",b); printf("c = %d\n",c); return 0; }

ESERCIZI ARRAY e PUNTATORI

1. Scrivere un programma in cui il vettore v[3]=(1,2,3) venga modificato tramite lutilizzo di puntatori in modo tale da diventare v[3]=(1,20,3). 2. Scrivere un programma che richiede in input due interi decimali e li scambia. Per questo definire una funzione scambia. 3. Scrivere un programma che prenda interi da tastiera e ne calcoli il massimo, utilizzando i puntatori (in particolare: il passaggio di puntatori a funzione). 4. Scrivere un programma che ordina n numeri casuali con il metodo bubblesort, in modo che due elementi del vettore vengano scambiati con lutilizzo dei puntatori.

Esercizio 1 #include<stdio.h> main() { int v[3]={1,2,3}; *(v+1)=20; printf("\n%d\t%d\t%d",v[0],v[1],v[2]); }

Esercizio 2 #include <stdio.h> void scambio(int *,int *);

main() { int x, y; printf ("\n Dammi due interi decimali"); scanf("%d %d",&x,&y); printf("%d%d",x,y); scambio(&x,&y); printf("%d%d",x,y); } void scambio(int *a,int *b) { int z; z=*a; *a=*b; *b=z; printf("%d%d",*a,*b); }

Esercizio 3 /* Un modo per passare un array ad una funzione*/ #include <stdio.h> #define MAX 10

int array[MAX+1],count; int largest(int *x); int main() { /*input non piu' di MAX valori da tastiera*/ /*per terminare l'inserimento digitare lo zero*/ for (count=0; count < MAX; count++) { printf("\nInserire un valore intero"); scanf("%d", &array[count]); if (array[count]==0) count=MAX; } array[MAX]=0; /*chiama la funzione e visualizza il valore di ritorno*/

printf("\n Valore massimo=%d", largest(array)); return 0; }

/*La funzione largest() restituisce il valore massimo in un array di interi*/ int largest(int *x) { int count, biggest =-12000; for (count =0; x[count] != 0; count++) {

if (x[count]>biggest) biggest = x[count]; } return biggest; }

Esercizio 4

/* bubsort.C -- ordina in senso crescente n numeri generati in modo casuale usando il bubblesort */ #include <stdio.h> /* direttive al preprocessore */ #include <stdlib.h> #include <time.h> #define NMAX 1000 void bubsort(int *, int); main() /* definizione della funzione principale MAIN */ { int i, j, n, a[NMAX]; time_t t; printf("\n \nInserisci il numero di elementi che vuoi ordinare:"); if (scanf("%d", &n) != 1) { printf("Errore !\a\n"); exit(1); } else if (n <=0) { printf("Errore ! Il numero deve essere >0 ! \a\n"); exit(1); } printf("Generazione casuale di %d numeri compresi fra 0 e 32767\n\n",n); srand((unsigned) time(&t)); for(i=0; i<n; i++) { a[i]= rand(); /* 0 <= rand() <= RAND_MAX=32767 */ printf("%d, ", a[i]);

} bubsort(a, n); printf("\nL'insieme ordinato e':\n\n"); for (i=0; i < n; ++i) printf("%d, ",a[i]); system("pause"); } void bubsort(int a[], int n) { int i,j,tmp; for (i=0; i < n-1 ; ++i) for (j=n-1; j>i; --j) if (a[j-1] > a[j]) { /* bubblesort */ tmp = a[j-1]; a[j-1] = a[j]; a[j] = tmp; } }