1. Abilità Informatiche
Ingegneria Chimica
Università di Roma “La Sapienza”
Esercitazione del 16 Maggio 2012
Nome: Cognome: Matricola:
Le risposte corrette valgono 1 punto, quelle errate -0,25 punti, quelle non date 0 punti
Nota: Tra le proposte per ciascuna domanda una sola è esatta
Domanda 1
Si consideri l’architettura di un Personal Computer.
A Il clock comunica l’ora corrente ai dispositivi che la richiedono.
B Durante un ciclo di esecuzione il registro PC contiene l’indirizzo dell’istruzione da eseguire nel
ciclo successivo.
C La memoria cache di primo livello non è volatile.
D L’accesso ai registri della CPU è più lento rispetto all’accesso alla cache di primo livello.
Domanda 2
Linguaggi di programmazione:
A Un programma espresso in linguaggio macchina è una sequenza di bit
B Un programma scritto in linguaggio assembler non necessita di traduzione.
C Il debugger serve per trovare pi`u facilmente errori sintattici nei programmi.
D Un programma che viene compilato
Domanda 3
Si consideri il seguente programma C:
#include <stdio.h>
main()
{ int A=2;
float B=A--;
char C=A;
if (--B)
if(--A)
C=’B’;
else
C=’A’;
else C=A;
/* punto 1 */
B=(A+=3, A--); /*istruzione 1*/
/* punto 2 */
{ float num;
num=(C>’B’? B--: B/A);
/* punto 3*/
}
/*punto 4*/
}
A Al punto 3 la variabile num ha valore 8.8.
B Al punto 4 la variabile num e‘ visibile.
C L’istruzione 1 effettua 2 assegnamenti.
D Al punto 1 la variabile A ha valore 0.
2. Domanda 4
Si consideri il seguente programma C:
#include <stdio.h>
main()
{int x; float y; char z, w;
x=4; y=-2; z=’B’; w=’C’;
x=( x%(int)y ?++x: w-z); /* istruzione 1 */
y=x++/y; /* istruzione 2 */
w=z+=1; w-=z; /* istruzione 3 */
}
A Immediatamente dopo l’esecuzione dell’istruzione 3, la variabile w ha valore ’0’.
B nell’istruzione1 non è necessario dichiarare la variabile x.
C Il programma può essere eseguito correttamente.
D Immediatamente dopo l’esecuzione dell’istruzione1, la variabile x ha il valore corrispondente
al codice ASCII del carattere ’A’.
Domanda 5
Si consideri il seguente programma C:
#include <stdio.h>
main()
{int x[4]={0, 3, 4, 8};
int j, A, B=0, C;
for(j=3; j>=0; j--) /*istruzione 1*/
switch(x[j]%3-1) /*istruzione 2*/
{case 0: x[j]--;
case 1: A=x[j]; break;
case 2: C=0; break;
default: B=--A;
}
C=x[0]+x[2] - B; /* istruzione 3*/
}
A Immediatamente dopo l’istruzione 3, la variabile C ha il valore 3.
B Al termine dell’esecuzione, il valore di due elementi di V risultano modificati rispetto ai loro
valori iniziali.
C Al termine dell’esecuzione, il valore di V[3] e‘ uguale a 7.
D Immediatamente dopo l’istruzione 3, la variabile A ha il valore 1.
3. Domanda 6
Si consideri il seguente programma C:
#include <stdio.h>
#define N 8
main()
{typedef float f[N];
typedef char c[N];
f A={0,0.5,1,1.5,2.0,2.5,3.0,3.5};
c B={’C’,’i’,’a’,’o’,0,1,2,3};
int i;
A[N-1]=0;
for (i=1; i<N; i+=i)
A[i]=B[N-i]/i;
/* punto 1 */
if (A[--i]?1:A[0])
printf("Ciao!n");
else
{i=A[0];
for (;i<5;) printf("%c", B[i++]);
}
/* punto 2*/
}
A Il programma contiene un errore di sintassi.
B Al punto 2: A[i-1] ha valore 4.0.
C Il programma stampa ”Ciao”.
D Al punto 2: il valore di A[2] e’ 2.0.
Domanda 7
Si considerino i vettori nel linguaggio C:
A Gli elementi di un vettore sono tutti dello stesso tipo.
B Un vettore di caratteri può essere considerato una stringa se non contiene il carattere ’0’.
C Nella definizione di un vettore, la dimensione può essere espressa mediante il nome di una
variabile.
D L’indice di un elemento può essere una variabile di tipo float.
Domanda 8
Si considerino i tipi di dato scalari primitivi nel linguaggio C:
A La sottrazione tra un float e un char produce un errore in compilazione.
B Nel linguaggio C il vettore è un tipo scalare primitivo.
C L’applicazione della regola di conversione implicita produce una espressione in cui tutti gli
operandi assumono uno stesso tipo.
D Il criterio di equivalenza strutturale può consentire l’assegnamento del valore di una variabile di
tipo non primitivo a una variabile di tipo scalare primitivo.
4. Domanda 9
Si consideri il seguente programma C:
#include <stdio.h>
#define N 9
int f(int *a, int b) {
if( *a < *(a+b) ) /* punto 1 */
return b;
else
return *a=f( a, b+1 )+b;
}
main() {
int i, V[N]={0,1,2,3,4,5,6,7,8};
for ( i=N-1; i>=0; i-=2 )
V[i]=(i+5)/2;
/*punto 2 */
printf("%dnn", f(V,0));
/* punto 3 */
for (i=0; i<N; i++) /* punto 4*/
printf("%dn", V[i]);
}
A L’istruzione prima del punto 2 (V[i]=(i+5)/2) viene eseguita 4 volte.
B La funzione f `e tail-ricorsiva.
C L’istruzione prima del punto 1 (if( *a<*(a+b) )) viene eseguita 3 volte.
D L’istruzione al punto 3 stampa il valore 6.
Domanda 10
Si considerino le funzioni nel linguaggio C:
A Un file sorgente C, per essere compilato correttamente, deve contenere tutte le definizioni di
tutte le funzioni che utilizza.
B Una funzione non può restituire un tipo struct.
C Le istanze di funzioni utilizzano dei record di attivazione che vengono deallocati ogni volta che
vengono generate ricorsivamente altre istanze della stessa funzione.
D I parametri formali di una istanza di una funzione vengono inizializzati al valore dei parametri
effettivi (attuali) all’atto della chiamata.