1. Abilità Informatiche
Ingegneria Chimica
Università di Roma “La Sapienza”
Prof. Stelitano Antonino
13 Giugno 2012
compito B
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 considerino i tipi di dato scalari primitivi nel linguaggio C:
A L’overloading degli operatori permette di denotare operatori diversi con lo stesso simbolo.
B E’ possibile applicare l’operatore % (modulo, o resto) a una variabile float e una variabile int.
C Nel linguaggio C il vettore e’ un tipo scalare primitivo.
D L’applicazione della regola di conversione implicita produce una espressione in cui tutti gli
operandi assumono uno stesso tipo.
Domanda 2
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 è 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.
1
2. Domanda 3
Linguaggi di programmazione.
A Le istruzioni in linguaggio PASCAL sono espresse mediante una sequenza di bit.
B Un programma di alto livello deve essere necessariamente tradotto per poter essere eseguito.
C Un compilatore per un linguaggio è indipendente dall’architettura HW/SW del computer utilizzato.
D Il compilatore serve solo per rilevare gli errori sintattici in un programma.
Domanda 4
Si consideri l’architettura di un Personal Computer.
A Il bus può essere utilizzato per il trasferimento di dati e istruzioni tra memoria e CPU.
B Nella fase di fetch viene eseguita l’istruzione indirizzata dal Program Counter.
C Il registro Flag (o PSW) contiene informazioni riguardanti l’ultima operazione eseguita dalla
cash
D Ad ogni ciclo il registro IR contiene l’istruzione da eseguire nel ciclo successivo
Domanda 5
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 Il ciclo al punto 4 stampa i seguenti valori (in linee separate): 2,1,3,3,4,5,5,7,6.
B Al punto 1 la variabile V non `e visibile.
C Al punto 3 la variabile i ha valore 0.
D L’istruzione prima del punto 1 (if( *a<*(a+b) )) viene eseguita 2 volte.
2
3. Domanda 6
Si consideri il seguente programma C:
#include <stdio.h>
main()
{int V[4]={0, 3, 4, 8};
int i, x, y=0, z;
for(i=3; i>=0; i--)/*istruzione 1*/
switch(V[i]%3-1) /*istruzione 2*/
{case 0: V[i]--;
case 1: x=V[i]; break;
case 2: z=0; break;
default: y=--x;
}
z=V[0]+V[2] - y; /* istruzione 3*/
}
A Il blocco di istruzioni corrispondente al case 1: viene eseguito 5 volte.
B L’esecuzione del ciclo for provoca 3 iterazioni.
C Immediatamente dopo l’istruzione 3, la variabile z ha il valore 2.
D Immediatamente dopo l’istruzione 3, la variabile x ha il valore 7.
Domanda 7
Si consideri il seguente programma C:
#include <stdio.h>
main()
{int A; float B; char C, ch;
A=8; B=-2; C=’C’; ch=’D’;
A=( A%(int)B ?++A: ch-C); /* istruzione 1 */
B=A++/B; /* istruzione 2 */
ch=C+=1; ch-=C;/* istruzione 3 */
}
A Immediatamente dopo l’esecuzione dell’istruzione 1, la variabile A ha il valore corrispondente al
carattere ASCII ’F’.
B Immediatamente dopo l’esecuzione dell’istruzione 3, le variabili C e ch hanno lo stesso valore.
C Immediatamente dopo l’esecuzione dell’istruzione 2, la variabile A ha il valore 2.
D Immediatamente dopo l’esecuzione dell’istruzione 3, la variabile C ha valore ’C’.
Domanda 8
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.
3
4. Domanda 9
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.
Domanda 10
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={’M’,’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("Miao!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 ”Miao”.
D Al punto 2: il valore di A[2] è 2.0.
4
5. Domanda 11
Si scriva in MATLAB un codice che fornisca la seguente matrice: la prima riga sia composta dai
numeri da 1 a 10, la seconda riga composta dai numeri da 11 a 20 e la e la terza dai numeri da 21 a
30. Modificare la seconda riga in modo da annullarne gli elementi.
Uno dei possibili modi di creare la matrice è:
5