2012 – 4

È dato il seguente programma:

#include 

int vett[10];

void scambia(int *a, int *b) 
{
   int c;
   c=*a; 
   *a=*b; 
   *b=c;
}

main() 
{
   int i;
   for(i=0; i < 10; i++)
      vett[i]=i;
   for(i=9; i >= 0; i--)
      scambia(&vett[i], &vett[i%3]);
   for(i=0; i < 10; i++)
      printf("%d ", vett[i]);
}

Cosa viene visualizzato a video dall'esecuzione di main()?


Soluzione: 3 4 5 6 7 8 9 1 2 0


Il primo for generea la sequenza 0...9

0 1 2 3 4 5 6 7 8 9

Il secondo for scambia ogni elemento alla posizione i con il corrispondente alla posizione i%3

scambia(9, 0): 9 1 2 3 4 5 6 7 8 0
scambia(8, 2): 9 1 8 3 4 5 6 7 2 0
scambia(7, 1): 9 7 8 3 4 5 6 1 2 0
scambia(6, 0): 6 7 8 3 4 5 9 1 2 0
scambia(5, 2): 6 7 5 3 4 8 9 1 2 0
scambia(4, 1): 6 4 5 3 7 8 9 1 2 0
scambia(3, 0): 3 4 5 6 7 8 9 1 2 0
scambia(2, 2): 3 4 5 6 7 8 9 1 2 0
scambia(1, 1): 3 4 5 6 7 8 9 1 2 0
scambia(0, 0): 3 4 5 6 7 8 9 1 2 0

Il terzo for visualizza gli elementi

3 4 5 6 7 8 9 1 2 0