home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.disi.unige.it
/
2015-02-11.ftp.disi.unige.it.tar
/
ftp.disi.unige.it
/
pub
/
.person
/
CataniaB
/
teach-act
/
esercizi
/
risp-quiz
< prev
Wrap
Text File
|
1997-05-07
|
2KB
|
122 lines
Risposte al quiz su programmazione C:
1)
Il ramo else viene associato all'istruzione "if" piu' interna.
Usando l'indentazione che segue il flusso di controllo del programma:
int a,b;
....
if (a>0)
if (b>0) printf("ok");
else printf("ok");
Stampa "ok" solo se a>0.
2) Cicli annidati.
Siano i,j,r tre variabili int, N una costante, e cond(i,j) una
condizione booleana su i e j.
Modificate il ciclo:
i)
for(i=0;i<N;i++)
for(j=0;j<N;j++)
if (r=cond(i,j)) break;
ii)
for(i=0;i<N;i++)
{
r=0;
for(j=0;j<N;j++)
if (r=cond(i,j)) break;
if (r) break;
}
3) Siano "a" e "b" due stringhe (i.e., char a[N],b[N];)
considerate il seguente frammento di programma:
for(i=0;a[i];i++) b[i]=a[i];
b[i]='\0';
i) Copia a in b.
ii)
i=0;
while(b[i]=a[i]) i++;
iii)
i=0;
do b[i]=a[i];
while(a[i++]);
4) L'indentazione corretta e':
int i=0;
while(i<50)
if (i%2) printf("%d",i);
i++;
Cioe' NON termina!
5) L'indentazione giusta e':
int i;
for(i=0;i<50;i++);
if (i%2) printf("%d",i);
Cioe' non stampa niente (50%2-->0).
6)
int a[N];
int i;
for (i=0;i<N;i++)
if (a[i]) if (a[i]!=4) printf("%d",a[i]);
7)
i) x=(y=0,z=0);
Inizializza x,y,z a 0;
ii) x=(y=0,z=y+1,z+1);
Inizializza y a 0, z a 1 e x a 2.
8)
i) Sposta il primo carattere alla fine di "a".
ii) Ad esempio:
temp=a[0];
for (i=0,j=1 ; a[i] && a[j] ; i++,j++ ) a[i]=a[j];
a[i]=temp;
9) Stampa da 1 a n.
10-11) Solo verifiche.
12)
i) Se a>0 NON termina. Se a<=0 non fa nulla, infatti
nel valutare A && B se A e' falso si valuta tutto in false
senza valutare B.
ii) NON termina mai.
13) C'era un'errore nel testo in realta' doveva essere:
int i;
char a[]="ab";
char b[10]="doremi";
for(i=0;b[i];i++) a[i]=b[i];
In questo caso il ciclo non tiene conto della lunghezza max delle
stringhe.
14) Stampa 1.
15) Stampa 1. La funzione f non ha side effect sul puntatore all'array x.
16) Un'altro errore manca l'assegnazione di x a p.
int x[10]={1,2,3,4,5,6,7,8,9,10};
void main()
{
int *p=x;
printf("%d",*p++);
}
In tal caso, stampa sempre 1.