Esempi domande di esame
1
Dato il seguente programma
#include <stdio.h>
int main(){
int *p,j=9,i=5;
p=&j;
*p=i;
printf("%d %d %d\n", i,j,*p);
scanf("%d",p);/* da tastiera:88\n*/
printf("%d %d %d\n", i,j,*p);
return 0;}
2
Quali affermazioni sono vere?
•
•
•
•
•
•
•
•
1) Durante la compilazione vengono segnalati dei warning
2) la prima printf stampa 5 5 5
3) la prima printf stampa 5 9 5
4) p contiene l'indirizzo di j
5) p contiene l'indirizzo di i
6) l'indirizzo di p coincide con l'indirizzo di j
7) la seconda printf stampa 5 88 88
8) la seconda printf stampa 5 9 88
3
Esercizi da svolgere 1
• Scrivere una funzione C che riceve il
nome di un file contenente parole lunghe
al massimo 30 caratteri e restituisce una
NUOVA stringa contenente la parola più
lunga trovata. Se due o più parole
condividono la stessa lunghezza massima
la funzione restituisce la prima parola
• soluzione: ex31_stringa.c / ex31.txt
4
Esercizi da svolgere 2
• Scrivere una funzione che riceve in
ingresso due stringhe e le scambia tra di
loro.
• soluzione ex32_scambia.c
5
Esercizi da svolgere 3
• Scrivere una funzione che riceve in
ingresso una stringa e la modifica nella
stringa permutata (casa diventa asac)
• soluzione: ex34_inverti.c
6
Esercizi da svolgere 4
• Scrivere una funzione c che riceve un
vettore di interi in ingresso con la sua
lunghezza e restituisce un nuovo vettore
che contiene gli stessi interi aumentati di
uno (1 7 9 diventa 2 8 10).
• soluzione ex37_add1.c
7
Esercizi da svolgere 5
• Scrivere una funzione c che riceve il nome
di un file contenente interi
separati/terminati da uno spazio bianco o
da un ritorno a capo e restituisce un
vettore che contiene tutti gli interi del file
maggiori di 10. NON è noto il numero di
interi nel file.
• soluzione ex35_creavettore.c
8
Dato il seguente programma
#include <stdio.h>
int main(){
int i,*p, v[]={1,2,3,4,5};
p=&v[3];
printf("%d\n",*p);
scanf("%d",p);/* da tastiera:88\n*/
for(i=0;i<5;i++)
printf("%d ", v[i]);
return 0;}
9
Quali affermazioni sono vere?
•
•
•
•
•
•
•
•
1) Durante la compilazione vengono segnalati dei warning
2) la prima printf stampa un valore casuale
3) la prima printf stampa 3
4) la prima printf stampa 4
5) p contiene l'indirizzo di v
6) la scanf non legge correttamente
7) la seconda printf stampa 1 2 3 4 5
8) la seconda printf stampa 1 2 3 88 5
10
Dato il seguente programma
#include <stdio.h>
int main(){
char c, s[10];
int i;
scanf("%c",&c);/*da tastiera:88casa pippo\n*/
scanf("%d",&i);
scanf("%s",s);
printf("%s %d %c\n",s,i,c);
return 0;}
11
Quali affermazioni sono vere?
•
•
•
•
•
•
•
•
1) Durante la compilazione vengono segnalati dei warning
2) i contiene 88
3) i contiene 8
4) alla fine del programma la stringa puntata da s contiene
casa
5) alla fine del programma la stringa puntata s contiene
casa pippo
6) la prima scanf non legge correttamente
7) la seconda scanf non legge correttamente
8) l'ingresso viene tutto consumato
12
Dato il seguente programma
#include <stdio.h>
#include <string.h>
void cambia(char *s, int k, int *l){
k=*l=strlen(s);
strcpy(s, "due");}
int main(){
int i,j; i=j=3;
char *v="casale";
cambia(v,i,&j);
printf("%s %d %d\n",v,i,j);
return 0;}
13
Quali affermazioni sono vere?
•
•
•
•
•
•
•
•
1) la seconda istruzione della funzione è sbagliata
2) l è un intero
3) alla fine del programma i e j hanno lo stesso valore
4) prima di chiamare la funzione v punta all'inizio di una
zona di memoria di 7 byte contigui a disposizione del
programma
5) dopo la chiamata della funzione v punta all'inizio di una
zona di memoria di 4 byte contigui a disposizione del
programma
6) v contiene un indirizzo
7) v[6] non viene modificato dalla funzione
8) dopo la chiamata della funzione v[2] è uguale a v[5] 14
Dato il seguente programma
#include <stdio.h>
#include <string.h>
#include <malloc.h>
char *cambia(char *s){
int i=strlen(s);
s=(char *)malloc(i+1);
strcpy(s, "due");
return s;}
int main(){
char *v="tre";
cambia(v);
printf("%s\n",v);
return 0;}
15
Quali affermazioni sono vere?
• 1) il contenuto della stringa puntata da v viene cambiato
dalla funzione
• 3) la memoria allocata dalla funzione (malloc) viene persa
• 4) per evitare perdite di memoria la funzione doveva
essere chiamata così: v=cambia(v);
• 5) alla fine del programma la stringa puntata da v non è
più raggiungibile
• 6) v contiene un indirizzo
16
Prototipi di funzione
#include <stdio.h>
int somma (int,int );
int main (){
int a,b;
a=5;
b=7;
c=somma(a,b);
printf("c vale: %d\n",c);
}
int somma (int i, int j){
return i+j;}
17
Un ultimo programma C
main(t,_,a)
char *a;
{ return!0<t?t<3?main(-79,-13,a+main(-87,1-_,main(86,0,a+1)+a)):1,t<_?main(t+1,_, a):3,main(-94,27+t,a)&&t==2?_<13?main(2,_+1,"%s %d %d\n"):9:16:t<0?t<72?main(_,t,"@n'+,#'/*{}w+/w#cdnr/+,{}r/*de}+,/*{*+,/w{%+,/w#q#n+,/
#{l+,/n{n+,/+#n+,/#\;# q#n+,/+k#;*+,/'r :'d*'3,}{w+K w'K:'+}e#';dq#'l
\q#'+d'K#!/+k#;q#'r}eKK#}w'r}eKK{nl]'/#;#q#n'){)#}w'){){nl]'/+#n';d}rw'i
;# \){nl]!/n{n#'; r{#w'r nc{nl]'/#{l,+'K {rw' iK{;[{nl]'/w#q#n'wk nw'
\iwk{KK{nl]!/w{%'l##w#' i; :{nl]'/*{q#'ld;r'}{nlwb! /*de}'c \;;{nl'{}rw]'/+,}##'*}#nc,',#nw]'/+kd'+e}+;#'rdq#w! nr'/ ') }+}{rl#'{n' ')#
\}'+}##(!!/"):t<50?_==*a?putchar(31[a]):main(65,_,a+1):main((*a=='/')
+t,_, a+1):0<t?main(2,2,"%s"):*a=='/'||main(0,main(-61,*a,"!ek;dc
i@bK'(q)-[w]*%n+r3#l ,{}:\nuwloca-O;m .vpbks,fxntdCeghiry"),a+1); }
18
...
On the fourth day of Christmas my true love gave to me
four calling birds, three french hens, two turtle doves
and a partridge in pear tree.
On the fifth day of Christmas my true love gave to me
five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in pear tree.
On the sixth day of Christmas my true love gave to me
six geese a-laying, five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in pear tree.
On the seventh day of Christmas my true love gave to me
....
19
Scarica

domande_esame_v02