Università di Roma
A.A. 2006/2007 - Docente: Emanuele Panizzi
Prova del 10 novembre 2006
PRIMA PARTE: ESONERO
Rispondere alle domande seguenti barrando la risposta. Un punto per ogni risposta corretta. 0 punti per risposte sbagliate o non date.
Tempo a disposizione: 40 minuti.
E’ PROIBITO CONSULTARE LIBRI O ALTRO MATERIALE
E’ PROIBITO COMUNICARE CON ALTRE PERSONE PRESENTI O A DISTANZA
NOME: COGNOME: MATRICOLA:
(ripetere la matricola su tutti i fogli)
1 | float v[10]; v[10] = v[0]; a) corretto b) errore di compilazione c) possibile errore runtime |
2 | int x = 10; int& y = x; a) b) c) |
3 | int cubo(int x); a) x per valore, ritorno per valore b) x per riferimento, ritorno per valore c) x per valore, ritorno per riferimento d) x per riferimento, ritorno per riferimento |
4 | Per cambiare il segno di una variabile int mediante una funzione la cui chiamata nel main è la seguente: CambioSegno(i); l’intestazione della funzione deve essere: a) void CambioSegno(int x); b) void CambioSegno(int& x); c) int CambioSegno(int* px); |
5 | Il parametro attuale a in: main() { int a; f(a); } è passato: a) per valore b) per riferimento c) non si può stabilire senza guardare la dichiarazione della funzione |
6 | void f(int val, int& rif) { val++; rif++; } main() { int i = 1; int j = 1; f(i,j); cout << style=""> “ <<> } La cout stamperà: a) 1 1 b) 1 2 c) 2 1 d) 2 2 |
7 | void f(int& x, int& y) { int t = x; x = y; y = t; t = x; } main() { int a = 10; int b = 20; f(a,b); cout <<>“ “ <<> } a) 10 20 b) 20 10 c) 10 10 d) 20 20 |
8 | void f(int* v) { // ... } main() { int v[1000]; f(v); } a) passaggio per valore dell’array v b) pass. Per valore del puntatore alla prima locazione dell’array c) pass. Per riferimento dell’array d) pass per riferimento del punt alla prima locazione |
9 | int f() {} a) corretta in C++ b) errore: non restituisce nessun valore c) errore: il corpo di una funzione non può essere mai vuoto |
10 | int* f() { int l; // ... return &l; } a) corretta b) l’indirizzo restituito al chiamante non esiste più: errore a runtime c) il contenuto della locazione puntata può essere cambiato |
11 | void f(int*& p) { p++; } a) corretta, modifica il parametro attuale b) corretta, incrementa l’oggetto puntato dal parametro attuale c) errata |
12 | int v[5] = {5,10,15,20,25}; int* p = &v[2]; cout << *(p+2) <<> a) stampa 15 b) stampa 25 c) stampa 20 d) errata |
13 | int v[5] = {5,10,15,20,25}; int* p = &v[2]; *(p+2) = p[2] + 3; Il vettore v cambia in: a) 5,10,15,23,25 b) 5,10,18,20,25 c) Errata d) 5,10,15,20,28 |
14 | delete p; a) dichiara libera la locazione di memoria puntata da p b) cancella il contenuto della locazione puntata da p c) cancella il contenuto del puntatore p |
15 | int* p = new int[100]; //... Quale è corretta: a) delete p; b) delete [] p; c) delete *p; d) delete p[100]; |
16 | int* v = new int[100]; Data questa dichiarazione si può affermare che v[0] e *v: a) sono equivalenti b) indicano rispettivamente un int e un puntatore c) sono equivalenti, ma la seconda è sconsigliabile d) solo la seconda è corretta |
17 | void Alloca(...p) { p = new int[100]; } I puntini di sospensione vanno sostituiti con: a) int* b) int& c) int*& d) nessuna delle precedenti |
18 | int n; cin >> n; int* v = new int[n]; a) corretta b) errore di compilazione: non si può usare una variabile nella new c) errore runtime: il compilatore non ha potuto allocare v non conoscendo il valore di n |
19 | int n; cin >> n; int v[n]; a) errore, le dichiarazioni di variabile devono precedere tutte le istruzioni b) errore di compilazione: il compilatore non può allocare v non conoscendone la dimensione c) corretta |
20 | for (i = 0; i <> { int j = 0; j = j + 1; } cout <<> a) stampa 0,1,3,6,10 b) stampa 0,1,2,3,4 c) errore: ridichiarazione di variabile |
21 | void f() { cout <<> main() { int i = 100; f(); } a) stampa 100 b) stampa 0 perché la i dentro f() è diversa da quella del main c) errore: i non è visibile in f() |
22 | void f(int i) { cout <<> main() { int i = 10, j = 20; f(j); } a) stampa 10 b) stampa 20 c) errore: ridichiarazione di variabile |
23 | int a = 0; void f() { cout <<> a = 20; } main() { a = 100; f(); int a = 30; } a) stampa 100 b) stampa 0 c) stampa 20 d) stampa 30 |
24 | main() { int i = 5, j; if (i <> { int k; k = i * 2; y = k / 3; } cout <<> cout <<> } a) 3 10 b) 3.333333 10 c) 3 0 d) Compile error, k ha terminato il suo ciclo di vita |
25 | Visibilità e ciclo di vita di una variabile: a) sono sinonimi b) sono due concetti distinti c) si riferiscono rispettivamente alle variabili locali e globali |
26 | int fatt(int n) { return n * fatt(n – 1); } a) corretto, calcola il fattoriale ricorsivamente b) errato: non c’è il passo base della ricorsione c) errore di compilazione: la fatt() non è ancora definita quando viene usata |
27 | Un campo privato di un oggetto: a) può essere acceduto solo dalle funzioni proprie dell’oggetto b) può essere acceduto solo dalle funzioni proprie della classe c) può essere acceduto solo dagli oggetti pubblici autorizzati |
28 | class Coppia { // ... int Primo(); } a) non ha argomenti b) ha un argomento, l’oggetto di invocazione c) ha due argomenti di cui uno implicito |
29 | class Coppia { // ... int Primo(); } a) può modificare l’oggetto di invocazione b) non può modificare l’oggetto di invocazione c) non è dichiarata correttamente |
30 | Un metodo (funzione propria di una classe) può accedere: a) i campi privati di qualsiasi oggetto della sua classe b) i campi privati di qualsiasi oggetto di qualsiasi classe c) i campi privati del solo oggetto di invocazione |
2 commenti:
Vorrei chiedere al Professore Panizzi se può postare la prova di esonero dell'anno scorso in un file .pdf o .doc con le soluzioni (non potendo discuterla a lezione).
Grazie!
Fatto, la può trovare tra i post di novembre.
Posta un commento