Programmazione I Appello di Luglio (prima prova) 18 luglio 2014 Cognome: Nome: Matricola: Indicare la classe di appartenenza: De Marco - Zizza De Prisco - Senatore Riservato alla commissione d’esame 1 2 3 4 5 6 7 8 TOT (/40) Ritirato 1 Esercizi Attenzione: le risposte vanno scritte dalla pagina 6 in poi. Leggere con molta attenzione il testo degli esercizi prima di svolgerli. Esercizio 1 Indicare il valore di (1<<5) ^ (7<<3). Giustificare la risposta. Esercizio 2 Cosa viene stampato eseguendo il codice seguente? #include <stdio.h> char *f (char *p); int main(void) { char p[] = "stringa lunga 26 caratteri"; printf ("%s\n", f(p)); return 0; } char *f (char *p) { *p += ’A’-’a’; *(p+15) += 1; *(p+26) = ’.’; *(p+27) = 0; return p; } Giustificare la risposta spiegando cosa fa la funzione f e come essa determina l’output. Esercizio 3 Siano c e j dichiarate come segue enum {FALSE, TRUE, UNKNOWN} c; int j; Considerare le seguenti istruzioni: a) c = TRUE; b) c--; c) j = 13*c - 8; d) c = j; d) c = c+10; 2 Quali di queste istruzioni assegna alla variabile alla sinistra dell’operatore di assegnazione un valore che `e al di fuori dell’insieme di valori previsti dal tipo della variabile stessa? Esercizio 4 Dire cosa fa la seguente funzione. Si dica espressamente se il carattere di newline viene inserito nella stringa. char *f(char s[], int n){ int ch, i=0; do { ch=getchar(); i f (i < n) s[i++] = ch; } while (ch != ’\n’); s[i]=’\0’; return s; } Esercizio 5 Indicare un opportuno valore per la malloc in riga 6. Sapreste indicare cosa fa la funzione f e cosa viene stampato se, dopo la compilazione, viene eseguito ./a.out 5? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 #include <stdio.h> #include <stdlib.h> long *f(int *array, int n) { long *new = malloc(...); int i; i f (new){ for (i=0; i<n; i++) { new[i] = array[i]*array[i]; new[n+i] = new[i]*array[i]; } } else fprintf(stderr, "oops\n"); return new; } int main(int argc, char **argv){ i f (argc != 2) return 0; int x = atoi(argv[1]); int array1[x]; 3 24 25 26 27 28 29 30 31 32 33 34 } int y = x; while (x) array1[--x] = x; long *array2 = f(array1, y); int i = 0; for (; i<2*y; i++) printf("%li ", array2[i]); printf("\n"); return 0; Esercizio 6 Sapreste indicare cosa fa la funzione g e cosa viene stampato se viene eseguito il main seguente? #include <stdio.h> int g(unsigned int n) { int c = 0, d = 0, e; unsigned int m = n; while (m) { d++; m >>= 1; } e = 1 << (d-1); fo r (; (n&e) ; n <<= 1) c++; return c; } int main(void) { printf("Valore: printf("Valore: printf("Valore: printf("Valore: return 0; } %d\n", %d\n", %d\n", %d\n", g(1)); g(2)); g(225)); g(49)); Esercizio 7 La funzione f del seguente programma non fornisce il risultato atteso. Sapreste indicare l’errore? #include <stdio.h> 4 struct studente { char *nome; char *cognome; int matricola; int max_voto; int n; }; struct esame { int matricola; int voto; }; void f(struct studente t, struct esame s) ; int main(void) { struct studente st = {"Boninsegna","Roberto", 123456, 28, 1}; struct esame es = {00020, 28}; f(st, es); es.voto = 30; f(st, es); es.voto = 27; f(st, es); printf("%s\n", (&st)->cognome); printf("%s\n", st.nome); printf("Voto piu‘ alto: %d\n", (&st)->max_voto); return 0; } void f(struct studente s, struct esame e) { s.n++; s.max_voto = (s.max_voto < e.voto)? e.voto: s.max_voto; } Esercizio 8 Cosa fa il seguente programma? Indicare cosa viene stampato se, dopo la compilazione, vengono eseguiti i seguenti comandi: A. ./a.out buongiorno buonasera B. ./a.out buon buonasera 5 C. ./a.out ciao arrivederci D. ./a.out buongiorno buon #include <stdio.h> int main(int argc, char *argv[]) { i f (argc != 3) { printf("Errore\n"); return 0; } int i = 0; while (argv[1][i] == argv[2][i++]){ i f (argv[1][i] == ’\0’){ printf("%d\n", i); return 0; } i f (argv[2][i] == ’\0’){ printf("%d\n", -i); return 0; } } printf("0\n"); return 0; } 6 Risposte Usare lo spazio seguente per rispondere agli esercizi. Per ciascuna risposta, indicare il numero dell’esercizio al quale essa si riferisce. Svolgere gli esercizi giustificando ogni risposta. Alle risposte corrette ma non giustificate sar`a assegnato un punteggio di poco superiore allo zero. 7 Risposte 8 Risposte 9 Risposte 10 Risposte 11
© Copyright 2024 Paperzz