Verifica: puntatori, array e stringhe in C 1

tempo a disposizione: 1 620 s punteggio massimo: 10
quantità di domande: 27 punti di penalità per ogni secondo di ritardo: 0.006 58
tempo massimo per completare l'invio della stampa del risultato: 20 s
data:
cognome e nome:
classe e sezione (corso):

Quando viene richiesto di indicare valori numerici, non si deve specificare la base.

1) [-0.37035..0.37037] Indicare quali componenti delle espressioni seguenti devono essere un lvalue.

      1 a = b * c;
      2 *d = e++ * f;
      3 g = *h + i;
      4 j = k = l--;
  1. a
  2. b
  3. c
  4. *d
  5. e
  6. f
  7. g
  8. *h
  9. i
  10. j
  11. k
  12. l

2) [0..0.37037] La variabile scalare i consente di rappresentare un valore numerico comune. Come si ottiene il puntatore all'area di memoria che corrisponde a i?

3) [0..0.37037] Si vuole dichiarare la variabile puntatore p, tale da fare riferimento a un'area di memoria corrispondente a un intero normale. Non si deve scrivere il punto e virgola e non si mettano più spazi del necessario.

4) [0..0.37037] Secondo la mappa delle figura successiva, nella quale ogni cella rappresenta un byte e si presume che l'architettura del microprocessore sia tale da accedere in modalità big endian (ovvero quella più semplice dal punto di vista umano), si scriva il valore che si ottiene dereferenziando il puntatore i, in esadecimale, rappresentando tutte le cifre, ma senza indicare la base.

mappa

5) [0..0.37037] Secondo la mappa delle figura successiva, nella quale ogni cella rappresenta un byte e si presume che l'architettura del microprocessore sia tale da accedere in modalità little endian, si scriva il valore che si ottiene dereferenziando il puntatore k, in esadecimale, rappresentando tutte le cifre, ma senza indicare la base.

mappa

6) [0..0.37037] Si prenda in considerazione il programma successivo e si scriva il valore contenuto nella variabile i, così come rappresentato dalla funzione printf().

#include <stdio.h>
int f (int *x, int y)
{
    (*x)++;
    y++;
    return (*x + y);
}
int main (void)
{
    int i = 1;
    int j = 2;
    int k;
    k = f (&i, j);
    printf ("%i\n", i);
    getchar ();
    return 0;
}

7) [-0.37037..+0.37037] Cosa comporta l'istruzione seguente?

int a[3];
  1. La dereferenziazione del puntatore a.
  2. La creazione del puntatore a, al tipo intero normale, in sola lettura.
  3. La restituzione del valore contenuto nel terzo elemento dell'array a.
  4. La restituzione del valore contenuto nel quarto elemento dell'array a.
  5. La creazione dell'array a, di tre elementi di tipo intero normale.
  6. La creazione dell'array a, di tre elementi di tipo intero normale, inizializzato, rispettivamente, con i valori 1, 2 e 3.
  7. La creazione dell'array a, di tre elementi di tipo intero normale, inizializzato, rispettivamente, con i valori 0, 1 e 2.

8) [-0.37037..+0.37037] Cosa comporta l'istruzione seguente?

int a[3][2];
  1. La dereferenziazione del puntatore a.
  2. La creazione del puntatore a, al tipo intero normale, in sola lettura.
  3. La restituzione del valore contenuto nel sesto elemento dell'array a.
  4. La restituzione del valore contenuto nel quinto elemento dell'array a.
  5. La creazione dell'array a, di tre per due elementi di tipo intero normale.
  6. La creazione dell'array a, di tre per due elementi di tipo intero normale, inizializzato, rispettivamente, con i valori 1, 2, 3, 4, 5 e 6.
  7. La creazione dell'array a, di tre per due elementi di tipo intero normale, inizializzato, rispettivamente, con i valori 0, 1, 2, 3, 4 e 5.

9) [-0.37037..0.37037] Cosa comporta l'istruzione seguente, limitatamente alla sua porzione evidenziata con carattere più scuro?

      1 x = a[1];
  1. La dereferenziazione del puntatore a, corrispondente al primo elemento che questo può rappresentare.
  2. La dereferenziazione del puntatore a, corrispondente al secondo elemento che questo può rappresentare.
  3. La creazione del puntatore a.
  4. La restituzione del valore contenuto nel primo elemento nell'array a.
  5. La restituzione del valore contenuto nel secondo elemento nell'array a.
  6. La creazione dell'array a, contenente un solo elemento.
  7. La creazione dell'array a, contenente due elementi.

10) [-0.370368..0.37037] Cosa comporta l'istruzione seguente, limitatamente alla sua porzione evidenziata con carattere più scuro?

      1 x = a[1][2];
  1. La dereferenziazione del puntatore a, corrispondente al primo elemento, il quale a sua volta contiene un puntatore del quale si vuole ottenere il secondo elemento.
  2. La dereferenziazione del puntatore a, corrispondente al secondo elemento, il quale a sua volta contiene un puntatore del quale si vuole ottenere il terzo elemento.
  3. La creazione del puntatore di puntatori a.
  4. La restituzione del valore contenuto nel secondo sottoelemento del primo elemento nell'array a.
  5. La restituzione del valore contenuto nel terzo sottoelemento del secondo elemento nell'array a.
  6. La creazione dell'array a, contenente complessivamente due elementi.
  7. La creazione dell'array a, contenente complessivamente tre elementi.
  8. La creazione dell'array a, contenente complessivamente quattro elementi.

11) [0..0.37037] Si prenda in considerazione il programma successivo e si scriva il valore contenuto nella variabile r, così come rappresentato dalla funzione printf().

#include <stdio.h>
int main (void)
{
    int a[3] = {4, 5, 6};
    int *p;
    int r;

    r = a[2];
    printf ("%i\n", r);
    getchar ();
    return 0;
}

12) [0..0.37037] Si prenda in considerazione il programma successivo e si scriva il valore contenuto nella variabile r, così come rappresentato dalla funzione printf().

#include <stdio.h>
int main (void)
{
    int a[3] = {4, 5, 6};
    int *p = a;
    int r;

    r = *p;
    printf ("%i\n", r);
    getchar ();
    return 0;
}

13) [0..0.37037] Si prenda in considerazione il programma successivo e si scriva il valore contenuto nella variabile r, così come rappresentato dalla funzione printf().

#include <stdio.h>
int main (void)
{
    int a[3] = {4, 5, 6};
    int *p = a;
    int r;

    p++;
    r = *p;
    printf ("%i\n", r);
    getchar ();
    return 0;
}

14) [0..0.37037] Si prenda in considerazione il programma successivo e si scriva il valore contenuto nella variabile r, così come rappresentato dalla funzione printf().

#include <stdio.h>
int main (void)
{
    int a[3] = {4, 5, 6};
    int *p = a;
    int r;

    r = p[1];
    printf ("%i\n", r);
    getchar ();
    return 0;
}

15) [0..0.37037] Si prenda in considerazione il programma successivo e si scriva il valore contenuto nella variabile r, così come rappresentato dalla funzione printf().

#include <stdio.h>
int main (void)
{
    int a[3][2] = {{4, 5}, {6, 7}, {8, 9}};
    int *p = (int *) a;
    int r;

    r = a[1][1];
    printf ("%i\n", r);
    getchar ();
    return 0;
}

16) [0..0.37037] Si prenda in considerazione il programma successivo e si scriva il valore contenuto nella variabile r, così come rappresentato dalla funzione printf().

#include <stdio.h>
int main (void)
{
    int a[3][2] = {{4, 5}, {6, 7}, {8, 9}};
    int *p = (int *) a;
    int r;

    r = *p;
    printf ("%i\n", r);
    getchar ();
    return 0;
}

17) [0..0.37037] Si prenda in considerazione il programma successivo e si scriva il valore contenuto nella variabile r, così come rappresentato dalla funzione printf().

#include <stdio.h>
int main (void)
{
    int a[3][2] = {{4, 5}, {6, 7}, {8, 9}};
    int *p = (int *) a;
    int r;

    r = p[5];
    printf ("%i\n", r);
    getchar ();
    return 0;
}

18) [0..0.37037] Si prenda in considerazione il programma successivo e si scriva il valore contenuto nella variabile r, così come rappresentato dalla funzione printf().

#include <stdio.h>
int main (void)
{
    int a[3][2] = {{4, 5}, {6, 7}, {8, 9}};
    int *p = (int *) a;
    int r;

    p += 3;
    r = *p;
    printf ("%i\n", r);
    getchar ();
    return 0;
}

19) [0..0.37037] Si prenda in considerazione il programma successivo e si scriva il valore contenuto nella variabile r, così come rappresentato dalla funzione printf().

#include <stdio.h>
int main (void)
{
    int a[3] = {4, 5, 6};
    int b[2] = {7, 8};
    int c    = 9;
    int *p[3];
    int r;

    p[0] = a;
    p[1] = b;
    p[2] = &c;
    
    r = p[1][1];
    printf ("%i\n", r);
    getchar ();
    return 0;
}

20) [0..0.37037] Si prenda in considerazione il programma successivo e si scriva il valore contenuto nella variabile r, così come rappresentato dalla funzione printf().

#include <stdio.h>
int main (void)
{
    int a[3] = {4, 5, 6};
    int b[2] = {7, 8};
    int c    = 9;
    int *p[3];
    int r;

    p[0] = a;
    p[1] = b;
    p[2] = &c;
    
    r = *p[1];
    printf ("%i\n", r);
    getchar ();
    return 0;
}

21) [0..0.37037] Si prenda in considerazione il programma successivo e si scriva il valore contenuto nella variabile r, così come rappresentato dalla funzione printf().

#include <stdio.h>
int main (void)
{
    int a[3] = {4, 5, 6};
    int b[2] = {7, 8};
    int c    = 9;
    int *p[3];
    int r;

    p[0] = a;
    p[1] = b;
    p[2] = &c;
    
    r = **p;
    printf ("%i\n", r);
    getchar ();
    return 0;
}

22) [0..0.37037] Si prenda in considerazione il programma successivo e si scriva il valore contenuto nella variabile r, così come rappresentato dalla funzione printf().

#include <stdio.h>
int main (void)
{
    int a[3] = {4, 5, 6};
    int b[2] = {7, 8};
    int c    = 9;
    int *p[3];
    int **q = p;
    int r;

    p[0] = a;
    p[1] = b;
    p[2] = &c;
    
    r = **q;
    printf ("%i\n", r);
    getchar ();
    return 0;
}

23) [0..0.37037] Si prenda in considerazione il programma successivo e si scriva il valore contenuto nella variabile r, così come rappresentato dalla funzione printf().

#include <stdio.h>
int main (void)
{
    int a[3] = {4, 5, 6};
    int b[2] = {7, 8};
    int c    = 9;
    int *p[3];
    int **q = p;
    int r;

    p[0] = a;
    p[1] = b;
    p[2] = &c;
    
    r = *q[2];
    printf ("%i\n", r);
    getchar ();
    return 0;
}

24) [0..0.37037] Si prenda in considerazione il programma successivo e si scriva il valore contenuto nella variabile r, così come rappresentato dalla funzione printf().

#include <stdio.h>
int main (void)
{
    int a[3] = {4, 5, 6};
    int b[2] = {7, 8};
    int c    = 9;
    int *p[3];
    int **q = p;
    int r;

    p[0] = a;
    p[1] = b;
    p[2] = &c;
    
    r = q[0][1];
    printf ("%i\n", r);
    getchar ();
    return 0;
}

25) [-0.37037..+0.37037] Cosa comporta l'istruzione seguente?

char a[] = "ciao" "amore" "mio";
  1. La creazione dell'array a, composto da 14 caratteri, inizializzato con la stringa "ciao amore mio".
  2. La creazione dell'array a, composto da 13 caratteri, inizializzato con la stringa "ciaoamoremio".
  3. La creazione dell'array a, composto da 12 caratteri, inizializzato con la stringa "ciaoamoremio".
  4. La creazione dell'array a, composto da tre elementi che a loro volta contengono un puntatore al tipo carattere.

26) [-0.37037..+0.37037] Cosa contiene l'array creato con l'istruzione seguente?

char a[] = {'c', 'i', 'a', 'o'};
  1. La stringa "ciao".
  2. Cinque caratteri che rappresentano le lettere della parola «ciao», oltre al carattere nullo finale.
  3. Quattro caratteri che rappresentano le lettere della parola «ciao».

27) [-0.37037..+0.37037] L'istruzione seguente comporta la creazione di una stringa?

char a[] = {'c', 'i', 'a', 'o', '\n'};
  1. Sì perché è terminata dal carattere nullo finale.
  2. Sì perché è terminata dal carattere new line finale.
  3. No perché non contiene il carattere nullo finale.
  4. No perché non contiene il carattere new line finale.

«a2» 2013.11.11 --- Copyright © Daniele Giacomini -- appunti2@gmail.com http://informaticalibera.net