Composizione sequenziale di istruzioni

Ogni linguaggio di programmazione offre la possibilità di elencare una sequenza di istruzioni da eseguire una dopo l'altra; in genere esse sono separate da un ;. Nel caso del C la sequenza è fatta mettendo semplicemente un'istruzione dopo l'altra; ma notare che ogni istruzione elementare del C è terminata da un ;.

ESEMPIO
Programma che scrive "hello!"

#include <stdio.h>

main()
{
    printf("Hello!\n");
}
o equivalentemente
#include <stdio.h>

main()
{
    putchar('H');
    putchar('e');
    putchar('l');
    putchar('l');
    putchar('o');
    putchar('!');
    putchar('\n');
}

Notare che esistono moltissimi, anzi infiniti, programmi che risolvono lo stesso problema.

ESERCIZIO
Scrivere altri tre programmi diversi dai precedenti e tra loro che producano lo stesso output.


ESEMPIO
Programma per risolvere un'equazione di secondo grado.
#include <stdio.h>
#include <math.h>

/*risolve un'equazione di secondo grado di forma a x2 + b x + c = 0 */
/*controllare preventivamente se le soluzioni esistono*/
  
main()
{
    float a, b, c;
    
    printf("Dammi i coefficienti dell'equazione\n");
    scanf("%f", &a);
    scanf("%f", &b);
    scanf("%f", &c);
    printf("prima soluzione %f\n", (-b + sqrt(b*b -(4*a*c))) / (2*a));
    printf("seconda soluzione %f\n", (-b - sqrt(b*b -(4*a*c))) / (2*a));
}
In questo programma il delta dell'equazione è calcolato due volte; è possibile scrivere una versione più efficiente in cui tale calcolo è fatto una volta solo.
#include <stdio.h>
#include <math.h>

/*risolve un'equazione di secondo grado di forma a x2 + b x + c = 0 */
  
main()
{
    float a, b, c, rdelta;
    
    printf("Dammi i coefficienti dell'equazione\n");
    scanf("%f", &a);
    scanf("%f", &b);
    scanf("%f", &c);
    /*calcolo la radice del delta*/
    rdelta = sqrt(b*b -(4*a*c));
    printf("prima soluzione %f\n", (-b + rdelta) / (2*a));
    printf("seconda soluzione %f\n", (-b - rdelta) / (2*a));
}