Nome
Cognome
Matricola
Esame di Programmazione M-Z (Parte 1)
9 Gennaio 2017 (Simulazione d’esame)
Ingegneria e Scienze Informatiche
A.A. 2016-2017
Quesito 1. Indicare cosa stampa il seguente codice.
1 #i n c l u d e < stdio .h >
2
3 #d e f i n e M (x , y ) ( x *2)/ y
4
5 i n t main () {
6 printf ( " % d \ n " ,M (1+2 ,1+2));
7
8 return 0;
9 }
Risposta
Quesito 2. Indicare cosa stampa il seguente codice.
1 #i n c l u d e < stdio .h >
2
3 i n t main () {
4 i n t x = 0 , y = 1;
5
6 ( - - x && --y ) || ( - - x || --y );
7 printf ( " % d % d \ n " ,x , y );
8 return 0;
9 }
Risposta
Quesito 3. Indicare cosa stampa il seguente codice.
1 #i n c l u d e < stdio .h >
2
3 i n t main () {
4 i n t x = 0 , y = 1;
5
6 i f ((++ x && ++ y ) || (++ x || ++ y ))
7 printf ( " % d \ n " ,x + y );
8 else
9 printf ( " % d \ n " ,x - y );
10 return 0;
11 }
Risposta
Quesito 4. Indicare cosa stampa il seguente codice.
1 #i n c l u d e < stdio .h >
2
3 i n t main () {
4 int i;
5
6 f o r ( i = 6; i ; i -= 3)
7 printf ( " % d \ n " ,i ++);
8
9 return 0;
10 }
Risposta
Quesito 5. Indicare cosa stampa il seguente codice.
1 #i n c l u d e < stdio .h >
2
3 i n t x = 1;
4
5 i n t f () { return ++ x ; }
6
7 i n t main () {
8 printf ( " % d \ n " ,f ()+ x );
9 return 0;
10 }
Risposta
Quesito 6. Indicare cosa stampa il seguente codice.
1 #i n c l u d e < stdio .h >
2
3 void f ( unsigned i n t x ) {
4 i f ( x != 0)
5 f (x -1);
6 printf ( " % d \ n " ,x );
7 }
8
9 i n t main () {
10 f (4);
11 return 0;
12 }
Risposta
Quesito 7. Indicare gli errori di sintassi nel seguente codice
1 struct x {
2 int x;
3 s t r u c t x * next ;
4 };
5
6 s t r u c t x * create ( i n t y ) {
7 struct x x;
8 x->x = y;
9 x - > next = 0;
10 return & x ;
11 }
Risposta
Quesito 8. Indicare gli errori di sintassi nel seguente codice.
1 i n t main () {
2 i n t A [] = {1 ,2 ,3} , B [] = {4 ,5 ,6} , * tmp ;
3 tmp = A ;
4 A = B;
5 B = tmp ;
6 return 0;
7 }
Risposta
Quesito 9. Indicare cosa stampa il seguente codice.
1 #i n c l u d e < stdio .h >
2
3 s t r u c t node {
4 int x;
5 s t r u c t node * next ;
6 };
7
8 s t r u c t node * create ( i n t x ) {
9 s t r u c t node n ;
10 n.x = x;
11 n . next = NULL ;
12 return & n ;
13 }
14
15 i n t main () {
16 s t r u c t node * n = create (1);
17 printf ( " % d \ n " ,n - > x );
18 return 0;
19 }
Risposta
Quesito 10. Indicare cosa stampa il seguente codice.
1 #i n c l u d e < stdio .h >
2 #i n c l u d e < stdlib .h >
3
4 i n t main () {
5 i n t * p = ( i n t *) malloc ( s i z e o f ( i n t ));
6 i n t ** q = ( i n t **) malloc ( s i z e o f ( i n t *));
7
8 *q = p;
9 * p = 1;
10
11 printf ( " % d % d \ n " ,*p ,** q );
12 return 0;
13 }
Risposta
Esame di Programmazione M-Z (Parte 2)
9 Gennaio 2017 (Simulazione d’esame)
Ingegneria e Scienze Informatiche
A.A. 2016-2017
Utilizziamo una struttura dati concatenata per rappresentare testo di caratteri:
• Righe differenti di testo sono rappresentate tramite una lista concatenata sem-
plice (principale) in cui ogni nodo contiene un campo line, che punta ad una lista
di caratteri, e un campo next, che punta alla riga successiva.
• Ogni riga di testo è rappresentata tramite una lista concatenata semplice (se-
condaria) in cui ogni nodo contiene un campo c, che memorizza un singolo carattere
di testo, e un campo next, che punta al nodo/carattere successivo.
Ad esempio, il seguente testo
M’illumino
d’immenso
viene memorizzato nel seguente modo:
T
M ' i l l u m i n o
NULL
NULL
d ' i m m e n s o
NULL
NULL
Le strutture che implementano tale struttura dati sono define nel seguente modo:
1 s t r u c t line {
2 char c ;
3 s t r u c t line * next ;
4 };
5
6 s t r u c t text {
7 s t r u c t line * line ;
8 s t r u c t text * next ;
9 };
Da notare che:
• La variabile T che punta all’intera struttura è di tipo struct text *.
• La lista concatenata di testo non contiene caratteri newline: le righe differenti di
testo sono gestite tramite la lista concatenata principale (struct text).
• Una riga vuota è rappresentata con un nodo di tipo struct text il cui campo line
punta a NULL.
Esercizio 1. Implementare il seguente prototipo della funzione read text() che trasfor-
ma il contenuto testuale di un file nella rappresentazione tramite liste concatenate.
1 s t r u c t text * read_text ( char * file );
La funzione prende come argomento una stringa che rappresenta il nome del file e ritorna
un puntatore al primo nodo della struttura struct text. La funzione ritorna NULL se
la creazione della struttura non va a buon fine (mancanza di memoria, file non leggibile
ecc). Non è strettamente necessario gestire i casi di allocazione non riuscita.
Ricordiamo quali sono le funzioni per la gestione di file:
• Apertura di un file in sola lettura: FILE *in = fopen(file,"r");
• Chiusura di un file: fclose(in);
• Verifica di raggiungimento della fin del file: feof(in);
• Lettura di un carattere da file: fgetc(in);
Esercizio 2. Implementare la seguente funzione print text() che stampa il testo
memorizzato nella struttura concatenata.
1 void print_text ( s t r u c t text * T );
Se la struttura dati non contiene nulla (i.e. T == NULL), la funzione non stampa nulla.