2009 – 5

Si consideri il seguente frammento di programma:

main()
{
   int M[3][3][3];
   int i, j, k;
   for(i=0; i < 3; i++)
   for(j=0; j < 3; j++)
   for(k=0; k < 3; k++)
      M[i][j][k]=i+k;
   for (i=0; i < 3; i++) 
   {
      for(k=0; k < 3; k++)
      for(j=0; j < 3; j++)
         printf("%3d", M[i][j][k]);
      printf("\n");
   }
}

Quale tra i seguenti insiemi di valori viene visualizzato a video dall'esecuzione di main ()?

Risposte:

  1. 0 0 0
    1 1 1
    2 2 2
    1 1 1
    2 2 2
    3 3 3
    2 2 2
    3 3 3
    4 4 4
  2. 0 0 0 1 1 1 2 2 2 1 1 1 2 2 2 3 3 3 2 2 2 3 3 3 4 4 4
  3. 0 0 0 1 1 1 2 2 2
    1 1 1 2 2 2 3 3 3
    2 2 2 3 3 3 4 4 4
  4. 0 0 0 1 1 1 2 2 2
    0 0 0 1 1 1 2 2 2
    0 0 0 1 1 1 2 2 2

Soluzione: c


Dopo il primo triplo for() la matrice contiene i valori dati dalla somma i+k

[0, 1, 2] [0, 1, 2] [0, 1, 2]
[1, 2, 3] [1, 2, 3] [1, 2, 3]
[2, 3, 4] [2, 3, 4] [2, 3, 4]

Il secondo triplo for() visualizza la matrice ma con gli indici j e k invertiti

(i=0) 0 0 0 1 1 1 2 2 2
(i=1) 1 1 1 2 2 2 3 3 3
(i=2) 2 2 2 3 3 3 4 4 4