ESEMPIO PUNTATORE /* pointer.c illustra l`utilizzo dei puntatori

Transcript

ESEMPIO PUNTATORE /* pointer.c illustra l`utilizzo dei puntatori
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 l’utilizzo 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 l’utilizzo 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;
}
}