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   
Text File  |  1997-05-07  |  2KB  |  122 lines

  1. Risposte al quiz su programmazione C:
  2.  
  3. 1) 
  4. Il ramo else viene associato all'istruzione "if" piu' interna.
  5. Usando l'indentazione che segue il flusso di controllo del programma: 
  6.  
  7.  int a,b;
  8.  ....
  9.  if (a>0) 
  10.    if (b>0) printf("ok"); 
  11.    else printf("ok");
  12.  
  13. Stampa "ok" solo se a>0.
  14.  
  15. 2) Cicli annidati.
  16.  
  17. Siano i,j,r tre variabili int, N una costante, e cond(i,j) una
  18. condizione booleana su i e j.
  19. Modificate il ciclo:    
  20. i)
  21.    for(i=0;i<N;i++)
  22.     for(j=0;j<N;j++) 
  23.      if (r=cond(i,j)) break;
  24.  
  25. ii)
  26.     for(i=0;i<N;i++)
  27.      {
  28.        r=0;  
  29.        for(j=0;j<N;j++) 
  30.          if (r=cond(i,j)) break;
  31.        if (r) break;
  32.      } 
  33.  
  34. 3) Siano "a" e "b" due stringhe (i.e., char a[N],b[N];)
  35.   considerate il seguente frammento di programma:
  36.  
  37.   for(i=0;a[i];i++) b[i]=a[i];
  38.   b[i]='\0';   
  39.  
  40.   i)   Copia a in b.
  41.   ii) 
  42.        i=0;
  43.        while(b[i]=a[i]) i++;   
  44.   iii) 
  45.         i=0;
  46.         do b[i]=a[i];  
  47.         while(a[i++]);
  48.  
  49. 4) L'indentazione corretta e':
  50.    
  51.     int i=0;
  52.     while(i<50)
  53.       if (i%2) printf("%d",i);
  54.     i++; 
  55.  
  56.   Cioe' NON termina!
  57.  
  58. 5) L'indentazione giusta e':
  59.     
  60.     int i;
  61.     for(i=0;i<50;i++);
  62.     if (i%2) printf("%d",i);
  63.      
  64.   Cioe' non stampa niente (50%2-->0).
  65.  
  66. 6) 
  67.    int a[N];
  68.    int i;
  69.  
  70.     for (i=0;i<N;i++)
  71.       if (a[i]) if (a[i]!=4) printf("%d",a[i]);
  72.        
  73. 7) 
  74.   i)  x=(y=0,z=0); 
  75.        Inizializza x,y,z a 0;
  76.   ii) x=(y=0,z=y+1,z+1);
  77.        Inizializza y a 0, z a 1 e x a 2.    
  78.  
  79. 8) 
  80.   i)   Sposta il primo carattere alla fine di "a".
  81.   ii)  Ad esempio:
  82.  
  83.   temp=a[0];
  84.   for (i=0,j=1 ;  a[i] && a[j] ; i++,j++ ) a[i]=a[j];
  85.   a[i]=temp;  
  86.  
  87. 9)  Stampa da 1 a n.
  88.  
  89. 10-11) Solo verifiche.
  90.  
  91. 12) 
  92.    i) Se a>0 NON termina. Se a<=0 non fa nulla, infatti 
  93.       nel valutare A && B se A e' falso si valuta tutto in false 
  94.       senza valutare B.
  95.  
  96.    ii) NON termina mai.
  97.    
  98.  
  99. 13) C'era un'errore nel testo in realta' doveva essere: 
  100.    
  101.    int i;
  102.    char a[]="ab";
  103.    char b[10]="doremi";
  104.    
  105.    for(i=0;b[i];i++) a[i]=b[i];
  106.  
  107.    In questo caso il ciclo non tiene conto della lunghezza max delle  
  108.    stringhe.
  109.  
  110. 14)  Stampa 1. 
  111. 15)  Stampa 1. La funzione f non ha side effect sul puntatore all'array x. 
  112. 16)  Un'altro errore manca l'assegnazione di x a p.
  113.  
  114.    int x[10]={1,2,3,4,5,6,7,8,9,10};
  115.    void main()
  116.     { 
  117.       int *p=x;
  118.       printf("%d",*p++);  
  119.     }
  120.  
  121.  In tal caso, stampa sempre 1.
  122.