Laboratorio di Informatica I: Programmazione. AA 2002/03.
Esercitazione n. 2

Scopo di questa esercitazione è di familiarizzarsi con i costrutti di controllo del C, con l' utilizzo di alcune funzioni standard del linguaggio nonché con i convertitori di formato della printf e con l' utilizzo e le caratteristiche dei tipi dati primitivi del linguaggio.

Al solito, si suggerisce di creare una directory apposita per i files relativi a questa esercitazione.


     
  1. Quanto vale x alla fine di ciascuno dei seguenti tre costrutti ?
    1)
       if ( x >= 10 )
        x = x + 6;
       if ( x >= 16 )
        x = x % 16;
    
    2)
       if ( x <= 10 )
        x = x - 5;
       if ( x <= 5 )
        x = x - 5;
    
    3)
       if ( x >= 10 )
        x = 10 + x % 10;
       if ( x > 20 )
        x = x / 16;
    
    Verificare le previsioni compilando ed eseguendo un programma che implementi i 3 costrutti e scriva il valore di x (variabile intera). Verificare poi se non sia possibile semplificare il confronto usando un unica condizione per ciascuno dei tre.

  2. Cosa scrive il seguente frammento di programma se x=10 e y=25 ? (verificare)
    if (x > 12)
        if(y > 20)
            printf(" Hello \n");
    else
        printf(" Hi! \n");
    
  3. Scrivere un programma C che determini con un unico if se il valore di x letto da tastiera gode della proprieta' 10.0 < x < 20.0

  4.  
  5. Trasformare il frammento di codice seguente in modo da sostituire gli if-else con un costrutto switch-case
  6. if ((x ==1) || (x==2))
          printf(" Caso 1 \n");
    else if ((x == 3) || (x == 4) || (x == 5))
          printf(" Caso 2 \n");
    else if ((x == 6) || (x ==7))
          printf(" Caso 3 \n");
    else if (x == 8)
          printf(" Caso 4 \n");
    

     
  7. Il seguente programma calcola la somma dei primi 50 interi ? Verificare.
    #include <stdio.h>
    #define MAX 50
    int main()
    {
        int i=1;
        int total = 0;
        while (i < MAX){
    	total = total + i++;
    	}
        printf("%d \n",total);
        return 0;
        
    }
    

  8.  
  9. Scrivere un programma che legga 10 interi positivi non nulli e ne stampi la somma ed il prodotto. Il programma deve essere in grado di controllare se un numero immesso è negativo o nulllo e chiedere un altro input (in modo che in totale ci siano sempre dieci addendi e fattori).

  10.  
  11. Se si è riusciti a definire un algoritmo per il calcolo della radice quadrata di un numero implementarlo e verificarne la correttezza.

  12.  
  13. Scrivere un programma che dia le due soluzioni dell' equazione generica di secondo grado a coefficienti reali a x2 + b x + c = 0.
     Se si include, oltre a stdio.h anche il file math.h e si compila con l' 
    opzione -lm di gcc  ( gcc -ansi -pedantic -lm -o nomefile.x nomefile.c)
    si può utilizzare la funzione di libreria sqrt(x) per calcolare la 
    radice quadrata di x.a
    

  14.  
  15. Scrivere un programma che stampi le tabelline da quella dell' 1 a quella del 10 in rappresentazione decimale, ottale ed esadecimale sotto forma di matrice 10x10 con una riga vuota tra una riga e l' altra e con i campi allineati a sinistra come nell' esempio seguente:
                   1    2    3    4    5    6    7    8    9    10
    
                   2    4    6    8    10   12   14   16   18   20
    
                   3    6    9    12   15   18 ....
    
                   .
    
                   .
    
                   .
    
                   10   20   30   40   50   60   70 ...
    
    Per questo esercizio puo' essere utile consultare la descrizione delle conversioni di formato della printf

  16.  
  17. Scrivere un programma che permetta di passare da coordinate cartesiane a polari e viceversa. Le formule sono

    x = r cos(phi)

    y = r sin(phi)

    e

    r = sqrt( x2 + y2 )

    phi = arc tg (y/x)

    L' inclusione della libreria matematica mette a disposizione, oltre alla radice quadrata anche le funzioni trigonometriche dirette e inverse (sin(x),cos(x), atan2(y,x)=arc tg (y/x)). Per maggiori informazioni su ciascuna function man nome_function.