04. Controllo condizionale if

In C il controllo condizionale è fatto tramite l'istruzione if. L'istruzione valuta un'espressione logica (normalmente un confronto) per determinare se eseguire o meno il blocco di istruzioni successivo. Infatti solo nel caso in cui l'espressione logica assuma valore VERO il blocco di istruzioni viene eseguito.

Il blocco di istruzioni deve essere racchiuso tra una coppia di parentesi graffe, a meno che non si tratti di una singola istruzione nel qual caso è possibile (ma non obbligatorio) omettere la coppia di parentesi graffe.

L'istruzione if prevede la possibilità di aggiungere la clausola else per specificare un ulteriore blocco di istruzioni da eseguire nel caso in cui l'espressione logica valutata assuma valore FALSO.

Anche in questo caso il blocco di istruzioni deve essere delimitato da una coppia di parentesi graffe, a meno che non sia costituito da una singola istruzione, nel qual caso la coppia di parentesi può essere omessa.

#include <stdio.h>

int main()

{

int x, y;


printf("Insrire due numeri x e y: ");

scanf("%d", &x);

scanf("%d", &y);

if (x>y)

printf("%d e' maggiore di %d\n", x, y);

if (x<y)

printf("%d e' minore di %d\n", x, y);

if (x==y)

printf("%d e' uguale a %d\n", x, y);

if (x-y >= 0) {

x = x-y;

printf("x-y = %d\n", x);

}

else {

y = y-x;

printf("y-x = %d\n", y);

}

if (1){

printf("Questo e' un test sempre vero\n");

}

if (0){

printf("Questo e' un test sempre falso\n");

}

else {

printf("Ramo else\n");

}

return 0;

}


scanf("%d", &x);

scanf("%d", &y);

Da tastiera è possibile inserire i due numeri richiesti, ad esempio 3 e 4, nei seguenti due modi:

    • su un'unica riga: 3 4 <INVIO>

    • su due righe separate: 3<INVIO> 4<INVIO>

if (x>y)

L'istruzione if è un'istruzione di controllo che consente di modificare il flusso di un programma.

In questo esempio se la condizione in parentesi (x>y) è verificata, cioè se il numero contenuto nella variabile x è maggiore del numero contenuto in y, viene eseguita la printf() al rigo sottostante, diversamente è eseguita l'istruzione successiva.

if (x==y)

In questa istruzione si verifica se le variabili x e y contengono lo stesso valore (con il simbolo == si testa l'uguaglianza).

Come nell'esempio precedente, se l'uguaglianza è verificata è eseguita la printf() al rigo successivo, diversamente si salta all'istruzione successiva.


if (x-y >= 0) {

...

}

else {

...

}

Questo blocco di istruzioni è più articolato di quelli fin qui analizzati.

L'istruzione di controllo in questo caso prevede due distinti rami:

  • il ramo if è eseguito quando il test (x-y) è maggiore o uguale di zero (di seguito riportato in blu)

  • il ramo else è eseguito quando il precedente test non è verificato (riportato in rosso)

I rami if e else sono delimitati tramite parentesi graffe.

Da notare che negli esempi precedenti le parentesi graffe non sono state utilizzate per delimitare il ramo if perché quest'ultimo era composto da una singola istrizione (la printf()).

if (x-y >= 0) {

x = x-y;

printf("x-y = %d\n", x);

}

else {

y = y-x;

printf("y-x = %d\n", y);

}

if (1)

La condizione di controllo in questa istruzione è sempre verificata perché il valore riportato è diverso da zero.

if (0)

La condizione di controllo in questa istruzione non è mai verificata perché il valore riportato è zero.