Sei sulla pagina 1di 4

Prova Scritta di Programmazione e Laboratorio - 10 Luglio 2018 - Compito Pari

Valutazione: 2 punti per ogni risposta esatta; -0.5 punti per ogni risposta errata; 0 punti per non risposta;
Massimo 6 punti per gli esercizi di programmazione;
Per ogni domanda a risposta multipla, marcare la risposta esatta su questo foglio;
E’ possibile usare un foglio aggiuntivo per le risposte di programmazione.
Tempo a disposizione: 2 ore.

Cognome e Nome: Matricola:

Modulo 1
1. Il valore decimale del numero B812 è:
A. Impossibile B8 non è un numero
B. 14410 ;
C. 1210 ;
D. 14010 ;
2. Data la variabile unsigned char a; quale delle seguenti istruzioni assegna alla variabile unsigned
char b; il valore 0 o 1 dell’ottavo bit di a :
A. unsigned char b=1,c; c=8<<b; b=a&b;b=b>>7;
B. unsigned char c=255; b=a&c;b=b>>7;
C. unsigned char b=1,c; c=b>>7; b=a&&c;
D. unsigned char b=a,c; c=b>>7; b=a&c;
3. L’output del seguente codice dato come input 1 10 sarà:

void f(int *a, int c)


{
while(*a <= c)
{ *a += c;}
*a= c-=20;
}

int main()
{int m, n, p, q;
scanf("%d %d", &m, &n);
f(&m,n);
printf("%d %d ", m, n);
}
A. 11 10
B. -10 -10
C. -10 10
D. 20 10
4. L’output del seguente codice sarà:

int main()
{int V[5]= {5 ,10, 15, 20,0};
int *q,*p;
p = V; q = p+3;
while(p<q)
{V[4]+=(*p+*q); printf("%d,",V[4]); p++;q--;}
}
A. 5,30,15,
B. 25,25,
C. 25,50,
D. 5,30,
5. A quale dei codici che utilizzano il ciclo for corrisponde il seguente codice

d=10;c=1; while(d >= 0) { d -=3*c++; printf("%d\n",d);}


A. for(d=7,c=1;d>=0;c++,d=d-3*c) printf("%d\n",d);

B. for(d=7,c=1;d>=-8;c++,d=d-3*c) printf("%d\n",d);
C. for(d=7,c=1;d>-3;c++,d=d-3*c) printf("%d\n",d);
D. for(d=10,c=1;d>=0;c++,d=d-3*c) printf("%d\n",d);
6. Scrivere la funzione int * sommaParziale(int * a); che ricevuto in ingresso un vettore di N interi,
restituisca un vettore di N/2 interi, il cui primo elemento è dato dalla somma del primo e dell’ultimo
elemento del vettore in input, il secondo elemento è dato dalla somma del secondo e del penultimo
elemento del vettore in input, e cosı̀ via, utilizzando escusivamente l’aritmetica dei puntatori. Nel caso
N sia dispari, l’ultimo elemento del vettore risultante sarà l’elemento centrale del vettore di input. Es.:

input: [11,22,33,44,55,66,77,88,99,101,202]
output: [213,123,132,132,132,66]

Page 2
Modulo 2
1. Una struttura dati atta a rappresentare collezioni di oggetti e che supporti le operazioni insert()
(inserisci un elemento nella collezione) e randomGet() (ottieni, senza eliminarlo, un elemento a caso
dalla collezione) può essere realizzata mediante array o mediante lista concatenata. La insert() può
essere realizzata a tempo costante in entrambe le realizzazioni. La randomGet(), invece, può essere
realizzata accedendo all’i-esimo elemento (i estratto a caso), con complessità:
A. lineare per l’array e lineare per la lista;
B. costante per l’array e costante per la lista;
C. lineare per l’array e costante per la lista;
D. costante per l’array e lineare per la lista.
2. Data la dichiarazione
void (*pippo[ 3 ])( char ) = { p1, p2, p3 };
l’istruzione
(*pippo[ 2 ])( ’z’ )
A. Assegna il carattere ’z’ al terzo elemento dell’array pippo
B. Passa il carattere ’z’ come argomento alla funzione p3
C. Assegna il carattere ’z’ alla variabile p3, puntata dal terzo elemento dell’array pippo
D. Passa il carattere ’z’ al terzo argomento della funzione pippo
3. Dato un albero binario di ricerca contenente n chiavi, il numero massimo di confronti necessari per
stabilire che una chiave non è presente è
A. log n
B. n log n
C. n
D. n / 2

4. Nel file di implementazione di un ADT Stack con lista concatenata, quali variabili devono essere specifi-
cate come static?
A. nessuna
B. il puntatore alla cima dello stack
C. tutti i puntatori agli elementi dello stack
D. il puntatore al fondo dello stack
5. Quale dei seguenti statement non è equivalente agli altri tre?
A. int age = student->age;
B. struct stud sstud = (* student); int age = sstud.age;
C. int age = (* student).age;
D. int age = student.(* age);

Page 3
6. Data la struttura

struct node {
int item;
struct node *link;
};

scrivere una funzione ricorsiva


struct node * reverse(struct node * a);
che, ricevuta in ingresso una lista concatenata di strutture node, restituisca la lista inversa degli elementi,
dall’ultimo elemento al primo.
Es.:

input: 10 -> 20 -> 30 -> 40 -> 50 -> 60 -> 70 -> 80 -> 90 -> 100 ->
output: 100 -> 90 -> 80 -> 70 -> 60 -> 50 -> 40 -> 30 -> 20 -> 10 ->

Page 4