Università dell’Insubria
Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese
Corso di Laurea in Informatica
Anno Accademico 2004/05
Laboratorio di Linguaggi
PRIMO
COMPITINO
con risposte
Marco Tarini
Domanda 1
(1.5 punti)
Nella maggior parte delle architetture,
quanti bytes occupano in memoria le variabili di tipo:
A)
char
B)
unsigned int
C)
short int
D)
float
E)
double
Marco Tarini ‧ Laboratorio di Linguaggi ‧
2004/05 ‧ Università dell’Insubria
Domanda 1
(1.5 punti)
Nella maggior parte delle architetture,
quanti bytes occupano in memoria le variabili di tipo:
A)
1
B)
4
C)
2
D)
4
E)
8
Marco Tarini ‧ Laboratorio di Linguaggi ‧
2004/05 ‧ Università dell’Insubria
Domanda 2
(2 punti)
A) Scrivere una funzione " meta_di "
che, dato un numero intero,
restituisce la sua metà.
B) In questo codice, usarla al posto dei puntini
per dimezzare la variabile x
(sugg: usare un assegnamento: x = ... )
int main(){
int x=100;
...
}
Marco Tarini ‧ Laboratorio di Linguaggi ‧
2004/05 ‧ Università dell’Insubria
Domanda 2
A) -
(2 punti)
int meta_di(int x){
return x / 2;
}
(e' una "divisione intera")
B) -
int main(){
int x=100;
x = meta_di(x);
}
Marco Tarini ‧ Laboratorio di Linguaggi ‧
2004/05 ‧ Università dell’Insubria
Domanda 3
(2 punti)
A) Scrivere una procedura " dimezza "
che, data un variabile intera,
la dimezza.
B) In questo codice, usarla al posto dei puntini
per dimezzare la variabile x
int main(){
int x=100;
...
}
Marco Tarini ‧ Laboratorio di Linguaggi ‧
2004/05 ‧ Università dell’Insubria
Domanda 3
A) -
(2 punti)
int dimezza(int *x){
*x = *x / 2;
}
(e' una "divisione intera")
B) -
int main(){
int x=100;
dimezza(&x);
}
Marco Tarini ‧ Laboratorio di Linguaggi ‧
2004/05 ‧ Università dell’Insubria
Domanda 4
(1 punto)
Riscrivere i seguente comandi
trovando una maniera più concisa di
esprimere il literal a destra di ' = '
double x = 0.0000000000000001;
(sono 15 zeri dopo la virgola)
double y = 0.000000000000333;
(sono 12 zeri dopo la virgola)
Marco Tarini ‧ Laboratorio di Linguaggi ‧
2004/05 ‧ Università dell’Insubria
Domanda 4
(1 punto)
Riscrivere i seguente comandi
trovando una maniera più concisa di
esprimere il literal a destra di ' = '
double x = 1e-16;
double y = 0.333e-12;
Marco Tarini ‧ Laboratorio di Linguaggi ‧
2004/05 ‧ Università dell’Insubria
Domanda 5
(1.5 punti)
Nel seguente array:
double x[50];
se la locazione di memoria di base dell'array e'
la locazione 12.000, quale sarà la locazione di:
A)
x[2]
B)
Marco Tarini ‧ Laboratorio di Linguaggi ‧
x[12]
2004/05 ‧ Università dell’Insubria
Domanda 5
(1.5 punti)
Nel seguente array:
double x[50];
se la locazione di memoria di base dell'array e'
la locazione 12.000, quale sarà la locazione di:
A)
x[2]
B)
12.000+sizeof(double)x2
= 12.016
Marco Tarini ‧ Laboratorio di Linguaggi ‧
x[12]
12.000+sizeof(double)x12
= 12.096
2004/05 ‧ Università dell’Insubria
Domanda 6
(2.5 punti)
A) Scrivere la definizione di un nuovo
tipo record (struct) che si chiama Nave
per ogni "nave" si vorrà memorizzare:
• il nome di varo (che e' lungo al max 19 lettere)
• il peso in tonnellate (non necessariamente intero)
• il numero massimo di persone trasportabili
B) Quale sarà l'offset dell'ultimo campo?
cioè la distanza della sua locazione di memoria
dalla locazione di memoria dell'inizio del record
Marco Tarini ‧ Laboratorio di Linguaggi ‧
2004/05 ‧ Università dell’Insubria
Domanda 6
(2.5 punti)
A) Scrivere la definizione di un nuovo
tipo record (struct) che si chiama Nave
oppure double
typedef struct {
char nomeVaro[20];
float peso;
int maxPersone;
} Nave
(uno spazio in piu'
per il terminatore
di stringa '\0')
B) Quale sarà l'offset dell'ultimo campo?
sizeof(char)x20 + sizeof(float) = 24
Marco Tarini ‧ Laboratorio di Linguaggi ‧
2004/05 ‧ Università dell’Insubria
Domanda 7
(1 punto)
Dopo la seguente inizializzazione
char s[]="pippo";
di che tipo sono e quanto valgono le
seguenti espressioni?
s[0]
s[2]
Marco Tarini ‧ Laboratorio di Linguaggi ‧
s[5]
2004/05 ‧ Università dell’Insubria
Domanda 7
(1 punto)
Dopo la seguente inizializzazione
char s[]="pippo";
di che tipo sono e quanto valgono le
oppure '\0'
seguenti espressioni?
'p'
'p'
0
char
char
char
Marco Tarini ‧ Laboratorio di Linguaggi ‧
2004/05 ‧ Università dell’Insubria
Domanda 8
(1 punto)
Dato il seguente array
float x[50];
scrivere due assegnamenti
per azzerare rispettivamente
il primo e l'ultimo elemento
Marco Tarini ‧ Laboratorio di Linguaggi ‧
2004/05 ‧ Università dell’Insubria
Domanda 8
(1 punto)
Dato il seguente array
float x[50];
scrivere due assegnamenti
per azzerare rispettivamente
il primo e l'ultimo elemento
x[0]=0f;
Marco Tarini ‧ Laboratorio di Linguaggi ‧
x[49]=0f;
2004/05 ‧ Università dell’Insubria
Domanda 9
(1 punto)
Scrivere la dichiarazione
(con inizializzazione)
di un array "pippo"
di tre numeri
che contiene, nell'ordine,
i numeri 10, 20 e 40
Marco Tarini ‧ Laboratorio di Linguaggi ‧
2004/05 ‧ Università dell’Insubria
Domanda 9
(1 punto)
int pippo[]={10,20,40};
oppure:
int pippo[3]={10,20,40};
Marco Tarini ‧ Laboratorio di Linguaggi ‧
2004/05 ‧ Università dell’Insubria
Domanda 10
(2 punti)
al posto dei puntini, scrivere
tre righe in cui:
1. si definisce la variabile "x" come puntatore ad intero
2. la si alloca dinamicamente
(servendosi anche del costrutto sizeof )
3. si assegna il valore 10 alla variabile puntata
int main(){
...
}
Marco Tarini ‧ Laboratorio di Linguaggi ‧
2004/05 ‧ Università dell’Insubria
Domanda 10
(2 punti)
al posto dei puntini, scrivere
tre righe in cui:
int main(){
int* x;
x = (int*)malloc(sizeof(int));
*x=10;
...
free(x);
}
opzionale perche' non espicitamente richiesto dal testo
Marco Tarini ‧ Laboratorio di Linguaggi ‧
2004/05 ‧ Università dell’Insubria
Domanda 11
(3 punti)
Data il seguente stato della memoria
e tabella degli identificatori :
indirizzo
valore
tabella degli identificatori
0x612A0214 00 00 00 I02 ide. tipo locazione
0x612A0218 00 00 00 09
0x612A021C 00 00 00 07
xx int 612A0224
0x612A0220 00 00 00 05
0x612A0224 00 00 00 08
pp int* 612A022C
0x612A0228 00 00 00 05
0x612A022C 61 2A 02 1C
0x612A0230 12 33 A3 D0
quanto valgono le seguenti espressioni?
A) xx
C) pp
E) pp[1]
B)
&xx
D) *pp
Marco Tarini ‧ Laboratorio di Linguaggi ‧
F) *(pp+1)
2004/05 ‧ Università dell’Insubria
Domanda 11
(3 punti)
Data il seguente stato della memoria pp[1] e
e tabella degli identificatori : *pp
*(pp+1)
indirizzo
valore
xx
tabella degli identificatori
0x612A0214 00 00 00 I02 ide. tipo locazione
0x612A0218 00 00 00 09
0x612A021C 00 00 00 07
xx int 612A0224
0x612A0220 00 00 00 05
&xx
0x612A0224 00 00 00 08
pp int* 612A022C
0x612A0228 00 00 00 05
0x612A022C 61 2A 02 1C
pp
0x612A0230 12 33 A3 D0
quanto valgono le seguenti espressioni?
A) xx
C) pp
E) pp[1]
B)
&xx
D) *pp
Marco Tarini ‧ Laboratorio di Linguaggi ‧
F) *(pp+1)
2004/05 ‧ Università dell’Insubria
Domanda 12
(2.5 punti)
La dichiarazione: float s[100];
costruisce un array
di dimensione FISSA
A) Scrivere due righe di codice che, invece,
definiscono e allocano
un array s di float di dimensione x,
dove x è una variabile di tipo intero
– sugg: usare i puntatori
B) Come si accede al quinto elemento?
– se nei due casi è diverso,
specificare le due sintassi
Marco Tarini ‧ Laboratorio di Linguaggi ‧
2004/05 ‧ Università dell’Insubria
Domanda 12
(2.5 punti)
La dichiarazione: float s[100];
costruisce un array
di dimensione FISSA.
A) float* s;
s = (float*)calloc(x,sizeof(float));
B) NON FA DIFFERENZA. In entrambi i casi:
s[4]
oppure
*(s+4)
Marco Tarini ‧ Laboratorio di Linguaggi ‧
2004/05 ‧ Università dell’Insubria
Domanda 13
(1 punto)
Dopo le seguenti dichiarazioni:
float arr[100];
float *p = arr;
scrivere una espressione
che non usi l'identificatore arr
e che sia equivalente all'espressione:
arr[2]
Marco Tarini ‧ Laboratorio di Linguaggi ‧
2004/05 ‧ Università dell’Insubria
Domanda 13
(1 punto)
Dopo le seguenti dichiarazioni:
float arr[100];
float *p = arr;
scrivere una espressione
che non usi l'identificatore arr
e che sia equivalente all'espressione:
*(p+2)
oppure
Marco Tarini ‧ Laboratorio di Linguaggi ‧
p[2]
2004/05 ‧ Università dell’Insubria
Domanda 14
(2.5 punti)
Quanti accessi alla memoria in lettura,
e quanti in scrittura,
saranno necessari per eseguire i seguenti
assegnamenti ?
(assumere che gli identificatori
rappresentino variabili del tipo corretto)
A) x = 10;
C) *p = 11;
E) *p = x + y;
B) x = y;
D) *p = x;
F) *(*z) =
Marco Tarini ‧ Laboratorio di Linguaggi ‧
2004/05 ‧ Università dell’Insubria
6;
Domanda 14
(2.5 punti)
Quanti accessi alla memoria in lettura,
e quanti in scrittura,
saranno necessari per eseguire i seguenti
assegnamenti ?
(assumere che gli identificatori
rappresentino variabili del tipo corretto)
A) x = 10;
w
B) x = y;
rw
C) *p = 11;
rw
D) *p = x;
rrw
Marco Tarini ‧ Laboratorio di Linguaggi ‧
E) *p = x + y;
rrrw
F) *(*z) =
rrw
2004/05 ‧ Università dell’Insubria
6;
Domanda 15
(2 punti)
Riempire i puntini nella seguente def di funzione,
che prende in input un parametro di tipo "Pippo",
int funz( ... )
nel caso che:
A) il parametro NON debba essere cambiato dalla funzione,
e occupi poca memoria
B) il parametro NON debba essere cambiato dalla funzione,
ma occupi molta memoria
C) il parametro debba essere cambiato dalla funzione
Marco Tarini ‧ Laboratorio di Linguaggi ‧
2004/05 ‧ Università dell’Insubria
Domanda 15
(2 punti)
Riempire i puntini nella seguente def di funzione,
che prende in input un parametro di tipo "Pippo",
int funz( ... )
nel caso che:
A) il parametro NON debba essere cambiato dalla funzione,
int
funz(
Pippo p )
e occupi
poca memoria
B) il parametro NON debba essere cambiato dalla funzione,
int
funz( const Pippo *p )
ma occupi molta memoria
C) il parametro debba essere cambiato dalla funzione
int funz(Pippo *p )
Marco Tarini ‧ Laboratorio di Linguaggi ‧
2004/05 ‧ Università dell’Insubria
Domanda 16
(1 punto)
Se x e' di tipo double,
di che tipo sono le espressioni:
A)
x + 10.0
B) (int) x
C)
&x
Marco Tarini ‧ Laboratorio di Linguaggi ‧
2004/05 ‧ Università dell’Insubria
Domanda 16
(1 punto)
Se x e' di tipo double,
di che tipo sono le espressioni:
A)
x + 10.0
double
B) (int) x
int
C)
double*
&x
Marco Tarini ‧ Laboratorio di Linguaggi ‧
2004/05 ‧ Università dell’Insubria
Domanda 17
(0.5 punti)
Scrivere cosa produce il precompilatore
a partire dal seguente programma:
#define TEST
x+y
int p(int x, int y)
{
return TEST * 2;
}
Marco Tarini ‧ Laboratorio di Linguaggi ‧
2004/05 ‧ Università dell’Insubria
Domanda 17
(0.5 punti)
Scrivere cosa produce il precompilatore
a partire dal seguente programma:
#define TEST
x+y
int p(int x, int y)
{
return TEST * 2;
}
Marco Tarini ‧ Laboratorio di Linguaggi ‧
int p(int x, int y)
{
return x+y * 2;
}
2004/05 ‧ Università dell’Insubria
Domanda 18
(1 punto)
Scrivere cosa produce il precompilatore
a partire dal file "prova.c":
file "prova.c"
file "settings.h"
#include "settings.h"
#define DEBUG 0
void B()
{
#if DEBUG
if (x < 0) printf("x");
#endif
printf(".");
}
int _debug;
Marco Tarini ‧ Laboratorio di Linguaggi ‧
2004/05 ‧ Università dell’Insubria
Domanda 18
(0.5 punti)
Scrivere cosa produce il precompilatore
a partire dal file "prova.c":
file "prova.c"
#include "settings.h"
file "settings.h"
#define DEBUG 0
int _debug;
void B()
int _debug;
{
void B()
#if DEBUG
if (x < 0) {printf("x");
printf(".");
#endif
}
printf(".");
}
Marco Tarini ‧ Laboratorio di Linguaggi ‧
2004/05 ‧ Università dell’Insubria
Domanda 19
(1 punto)
Cosa scrive il seguente programma?
#include <stdio.h>
int main()
{
int x=17;
printf("uno: %d\n",x);
printf("due: %04d\n",x);
printf("tre: %x\n",x);
}
Marco Tarini ‧ Laboratorio di Linguaggi ‧
2004/05 ‧ Università dell’Insubria
Domanda 19
(1 punto)
Cosa scrive il seguente programma?
#include <stdio.h>
int main()
{
int x=17;
printf("uno: %d\n",x);
printf("due: %04d\n",x);
printf("tre: %x\n",x);
}
uno: 17
due: 0017
tre: 11
Marco Tarini ‧ Laboratorio di Linguaggi ‧
2004/05 ‧ Università dell’Insubria
Scarica

testo con risposte