Istruzione condizionale

Ogni linguaggio di programmazione ha un'istruzione per poter scegliere di eseguire una tra due istruzioni in dipendenza di una condizione, che è semplicemente un'espressione di tipo booleano (di tipo intero in C).

La forma del condizionale in C è

if( COND ) STATEMENT else STATEMENT'

COND
dovrebbe essere un'espressione di tipo boolean, ma in C è semplicemente un'espressione di tipo intero
STATEMENT, STATEMENT'
sono due singole istruzioni
Se il valore di COND è diverso da 0 verrà eseguita STATEMENT, altrimenti STATEMENT'.

Esiste anche la variante senza parte else, in tal caso se il valore di COND è uguale a zero nessuna istruzione sarà eseguita.
Se le alternative sono costituite da più istruzioni, allora occorre racchiuderle tra parentesi graffe; dobbiamo quindi usare il costrutto blocco.


ESEMPIO
Programma per risolvere un'equazione di secondo grado, che controlla l'esistenza delle soluzioni.
#include <stdio.h>
#include <math.h>

/*risolve un'equazione di secondo grado di forma a x2 + b x + c = 0 
  controllando se esistono le soluzioni*/
  
main()
{
    float a, b, c, delta;
    
    printf("Dammi i coefficienti dell'equazione\n");
    scanf("%f", &a);
    scanf("%f", &b);
    scanf("%f", &c);
    /*calcolo il delta*/
    delta = b*b -(4*a*c);
    if (delta < 0 )
        printf("l'equazione non ammette soluzioni reali\n");
    else{
        printf("prima soluzione %f\n", (-b + sqrt(delta)) / (2*a));
        printf("seconda soluzione %f\n", (-b -  sqrt(delta)) / (2*a));
    }
}

Scelta condizionale per casi

Nel caso in cui la scelta di quale istruzione eseguire dipende da un dato che può assumere un numero finito di valori, i linguaggi di programmazione offrono l'istruzione scelta per casi.

In C tale istruzione è detta switch e la sua forma è come segue:

switch(  EXPRESSION )
{
     case  CONSTANT1: STATEMENTS1 break;
     ....
     case  CONSTANTn: STATEMENTSn break;
     default:  STATEMENTS  break;
}
è un'espressione
CONSTANTi
sono espressioni fatte solo da costanti aventi lo stesso tipo di EXPRESSION
STATEMENTSi
sono sequenze di istruzioni
la parte default è opzionale
Se il valore di EXPRESSION è uguale a quello di CONSTANTi, vengono eseguite le istruzioni STATEMENTSi;
nel caso che i valori di tutte le CONSTANTi sono differenti da quello di EXPRESSION, se vi è la parte default vengono eseguite STATEMENTS, altrimenti non si fa nulla.


ESEMPIO: programma C per trasformare una cifra esadecimale nel corrispondente numero
#include <stdio.h>

/*trasforma una cifra esadecimale nel corrispondente numero*/
  
main()
{
    char cifra;
    int num;
    
    printf("Dare la cifra esadecimale\n");
    scanf("%c", &cifra);
    switch(cifra){
    case '0': num = 0; break;
    case '1': num = 1; break;
    case '2': num = 2; break;
    case '3': num = 3; break;
    case '4': num = 4; break;
    case '5': num = 5; break;
    case '6': num = 6; break;
    case '7': num = 7; break;
    case '8': num = 8; break;
    case '9': num = 9; break;
    case 'A': num = 10; break;
    case 'B': num = 11; break;
    case 'C': num = 12; break;
    case 'D': num = 13; break;
    case 'E': num = 14; break;
    case 'F': num = 15; break;
    default: num = -1; break;
    };
    if(num >= 0) 
        printf("Il numero corrispondente alla cifra %c e\' %d.\n",cifra,num);
    else
        printf("Il carattere %c non e\' una cifra esadecimale.\n",cifra);

}