7 novembre 2003


  1.  Dato il seguente codice, indicare a fianco di ogni printf ilrisultato stampato:
    #include <stdio.h>

    void main() {
      int a, b;
      int *p1, *p2;
      int **pp1, **pp2;

      a = 37;
      b= 27;

      p1 = &a;
      p2 = p1;

      printf("%d %d %d %d\n", a, b, *p1, *p2);
      p1 = &b;
      *p1 = *p1 + * p2;

      printf("%d %d %d %d\n", a, b, *p1, *p2);
      pp1 = &p1;
      pp2 = &p2;
      *pp2 = *pp1;

      printf("%d %d %d %d\n", a, b, *p1, *p2);

    }


  2. Dato il seguente codice, indicare a fianco di ogni printf il risultato stampato, usando eventualmente un punto di domanda per i valori indefiniti:
    #include <stdio.h>

    void main() {
      int a, b;
      int *aPtr;

      a=7;
      aPtr = &a;
      printf("%d %d %d\n", a, aPtr, *aPtr); 
      *aPtr = 2;
      aPtr = &b;
      printf("%d %d %d\n", a, aPtr, *aPtr); 

    }


  3. Dato il seguente codice, indicare a fianco di ogni printf il risultato stampato:
    #include <stdio.h>

    void main() {
      char s[10] = "abcdef"; /* Inizializzo s coi caratteri abcdef */
      int a, b;
      char *p, *q, *r;

      a = 3;
      b = 4;
      p = &s[0];
      q = &s[a];
      a = a + 1;
      r = &s[a];
      printf("%s\n", s);  
      s[b] = *r;
      printf("%s\n", s);  

      b = b + 1;
      *p = *q;
      printf("%s\n", s);  
      s[b] = *p;
      printf("%s\n", s); 

    }

  4. Si scriva un programma che legga una sequenza di interi positivi (la sequenza termina quando viene inserito il valore 0) e stampa a video solamenti i numeri che sono multipli di 5, 7 e 11. Si utilizzi la struttura dati VETTORE

  5. Il programma dovrebbere chiedere il numero di studenti iscritti e poi memorizzare i relativi voti di un esame e stampare il numero di voti compresi tra 18 e 23, tra 24 e 26 e tra 27 e 30. Trovare gli errori nel seguente codice:
    #include <stdio.h>

    #define MAX_NUM 5

    main() {

        int voti[MAX_NUM];
        int contA, contB, contC;
        int dim, i;
     
        MAX_NUM = 6;

        while(dim < 0 && dim > MAX_NUM) {                         
            printf("\nQuanto è grande l'array ? ");
        scanf("%d", &dim);               
        }

     
        for(i=0; i < MAX_NUM; i+1) {
            scanf("%d", &voti[i]);
      if(voti[i] > 27)
         contA = contA + 1;
      if(voti[i] > 24)
         contA = contB + 1;
      if(voti[i] > 18)
         contA = contA + 1;

         }

         printf("I voti maggiori di 27 sono %d, quelli tra 24 e 26 sono %d e quelli tra 18 e 23 sono %d",contA, contB, contC);

    }


  6. Scrivere un programma per eseguire la conversione decimale-binario. Si ricordi che per convertire un numero decimale in base binaria, bisogna eseguire una serie di divisioni intere per 2. I resti delle divisioni (a partire dall'ultimo) rappresentano la codifica binaria del numero.

  7.  Sviluppare un programma che decodifica una parola chiave cifrata sulla base di una parola chiave. L'idea è che la parola cifrata (una sequenza di cifre comprese tra 0 e 9) rappresenta un  "messaggio" in codice, il cui significato deve essere ricostruito a partire da una parola chiave che definisce la regola di traduzione da cifre a lettere. La regola è la seguente: la lettera decodificata corrispondente alla cifra N (0 < N < 9) nella parola cifrata è quella che si trova in posizione N nella parola chiave, assumendo di iniziare a contare le posizioni da zero.

    Ad esempio: se la parola chiave è BARONE, la parola cifrata 2141 viene decodificata nella parola RANA, e la parola cifrata 5421 in NERA.

  8. Il programma legge una sequenza di intere e li inserisce in un struttura dati VETTORE. L'inserimento termina o quando viene raggiunta la dimensione massima del VETTORE o quando l'utente immette un numero minore o uguale all'ultimo numero inserito. Quindi il programma stampa la lista completa dei numeri letti.