Laboratorio di  Programmazione.
AA 2007/08.

Esercitazione n. 4
  1. Creare una directory di nome Labo4  e ridefinirla come directory di default  (comando cd, v. esercitazione n.1).



  2. Il seguente frammento di codice (da inserire all'interno di un programma completo) dovrebbe calcolare la somma dei primi 10 interi ma contiene un errore di programmazione. Inserirlo in un programma C, compilarlo, eseguirlo e trovare l' errore. Modificare il programma in modo che calcoli e stampi la somma dei primi 15 quadrati di interi.
    int somma=0, i;
    for(i=0;i<=10;i=i+1);
    somma = somma + i;

  3. Le istruzioni del tipo i=i+1, somma=somma+i,   in cui cioe'  il valore di una variabile viene ridefinito come il valore precedente combinato ad un altro dato attraverso un operatore  aritmetico, sono cosi' frequenti che in C c'e' un modo compatto per scriverle:
    i += 1  (al posto di i = i + 1)
    somma += i (al posto di somma = somma + i)
    la stessa sintassi puo' essere usata con tutti gli altri operatori aritmetici. Inoltre, per il caso particolare di incrementi o decrementi unitari ci sono due operatori unari (++ e --) utilizzabili prima (forma prefissa) o dopo (forma suffissa) del nome della variabile:
    i += 1   equivale a    ++i o i++ 

    La differenza tra forma suffissa (i++, i--) e prefissa (++i, i--) e' che se gli operatori sono in forma prefissa la variabile viene prima incrementata o decrementata e poi viene usata nell' espressione; se sono in forma suffissa, prima viene utilizzato il valore nell' espressione e poi viene eseguita l' operazione di incremento o decremento. Cosa  verra' scritto dal seguente programma ?
    #include <stdio.h>

    int main(void)
    {
    int i=0,j=0;
    printf(" %d %d \n", i++, ++j );
    return 0;
    }

    E se l' istruzione fosse: printf(" %d %d %d, %d, \n", i++, ++j , i++, j++); ?


  4. Supponiamo che x sia un intero. A seconda del valore iniziale, quanto vale x alla fine di ciascuno del seguente costrutto ?

    1) if ( x >= 10 )
    x = x + 6;
    if ( x >= 16 )
    x = x % 16;

    Verificare la previsione compilando ed eseguendo un programma che implementi il costrutto e scriva il valore di x (variabile intera) per un numero adeguato di valori di x da leggere da tastiera. Verificare poi se non sia possibile semplificare il confronto usando un' unica condizione .
      

  5. Il seguente programma calcola la somma dei primi 50 interi ? Verificare. (Il risultato esatto dovrebbe essere  1275).
    #include <stdio.h>

    int main(void)
    {
    int i=1;
    int total = 0;
    for (i=1; i < 50; i++)
    total += i;
    printf("%d \n",total);
    return 0;

    }
    Un semplice modo per comprendere quello che succede nel ciclo for è di inserire nel corpo del for un' istruzione printf per farsi scrivere i valori delle variabili rilevanti ad ogni iterazione. Attenzione a mettere le parentesi graffe per raggruppare le istruzioni che vanno iterate.

  6. Scrivere un programma che legga 10 interi  e ne stampi la somma ed il prodotto. 

  7. Cosa scriverà  il seguente frammento di programma ?  Usare la ridirezione dell' output  per scrivere i risultati su un file.
    #include <stdio.h>
    int ip,iq;
    char s=0;

    for (ip=0;ip<=300;ip++)
    {
    s=ip;
    iq=s;
    printf(" %d \n",iq);
    }
  8. Cosa scrive il seguente frammento di programma se x=10 ? (verificare)

    if (x > 12)
    printf(" x e' maggiore di 12 \n");
    else
    printf(" x non e' maggiore di 12 \n");

  9. Cosa scrive il seguente frammento di programma se x=10 e y=25 ? (verificare)

    if (x > 12)
    if(y > 20)
    printf(" A \n");
    else
    printf(" B \n");