prof. Nunzio Brugaletta | Programmazione e linguaggio C |
Quando si desidera eseguire un'istruzione al presentarsi di una certa condizione, si utilizza l'istruzione if.
Per esempio, se si vuole visualizzare il messaggio "il valore attuale di i è minore di 100" solamente nel caso in cui il valore della variabile intera i è minore di 100, si scrive:
if(i<100) printf("\n il valore attuale di i è minore di 100");
La sintassi dell'istruzione if è:
if(espressione) istruzione
dove la valutazione di espressione controlla l'esecuzione di istruzione: se espressione è vera viene eseguita istruzione.
Nell'esempio seguente il programma richiede un numero all'utente e, se tale numero è minore di 100, visualizza un messaggio.
#include <stdio.h> /* Esempio utilizzo if */ main(){ int i; scanf("%d",&i); if (i<100) printf("\n minore di 100"); }
L' espressione i<100 è la condizione logica che controlla l'istruzione di stampa e pertanto la sua valutazione potrà restituire soltanto uno dei due valori booleani vero o falso che in C corrispondono rispettivamente ai valori interi uno e zero. È appunto per tale ragione che l'assegnamento a=i<100, è del tutto lecito. Viene infatti valutata l'espressione logica i<100, che restituisce 1 (vero) se i è minore di 100 e 0 (falso) se i è maggiore uguale a 100: il risultato è dunque un numero intero che viene assegnato alla variabile a.
L'operatore != corrisponde a diverso da, per cui l'espressione a!=0 significa: il valore di a è diverso da zero.
Chiedersi se il valore di a è diverso da zero è lo stesso che chiedersi se il valore di a è vero, il che, in C, corrisponde al controllo eseguito per default (effettuato in mancanza di differenti indicazioni), per cui si sarebbe anche potuto scrivere
scanf("%d",&i); a = i<100; if (a) printf("\n minore di 100");
La sintassi completa dell'istruzione if è la seguente:
if(espressione) istruzione1 [else istruzione2]
dove la valutazione di espressione controlla l'esecuzione di istruzione1 e istruzione2: se espressione è vera viene eseguita istruzione1, se è falsa viene eseguita istruzione2.
Nell'esempio anteriore è stato omesso il ramo else: il fatto è del tutto legittimo in quanto esso è opzionale, come evidenziato dalle parentesi quadre presenti nella forma sintattica completa.
La tabella seguente mostra gli operatori utilizzabili nell'istruzione if :
Operatore |
Esempio |
Risultato |
---|---|---|
! |
!a |
(NOT logico) 1 se a è 0, altrimenti 0 |
< |
a<b |
1 se a<b, altrimenti 0 |
<= |
a<=b |
1 se a<=b, altrimenti 0 |
> |
a>b |
1 se a>b, altrimenti 0 |
>= |
a>=b |
1 se a>=b, altrimenti 0 |
== |
a==b |
1 se a è uguale a b, altrimenti 0 |
!= |
a!=b |
1 se a non è uguale a b, altrimenti 0 |
&& |
a&&b |
(AND logico) 1 se a e b sono veri, altrimenti 0 |
|| |
a||b |
(OR logico) 1 se a è vero, (b non è valutato), 1 se b è vero, altrimenti 0 |
È opportuno notare che, nel linguaggio C, il confronto dell’eguaglianza fra i valori di due variabili viene effettuato utilizzando il doppio segno ==. Si confrontino i seguenti due frammenti:
Programma A |
Programma B |
---|---|
if (a==b) printf("Sono uguali\n"); |
if (a=b) printf("Valore non zero\n"); |
Il programma A confronta il contenuto della variabile a ed il contenuto della variabile b: se sono uguali stampa la frase specificata.
Il programma B assegna ad a il valore attualmente contenuto in b e verifica se è diverso da zero: in tal caso stampa la frase specificata.
Una ulteriore osservazione va fatta a proposito degli operatori logici ! (NOT logico), && (AND logico) e || (OR logico) che vengono usati per mettere assieme più condizioni. Es:
if (a>5 && a<10) printf("a compreso fra 5 e 10"); |
if (a<2 || a>10) printf("a può essere <2 oppure >10"); |
http://ennebi.solira.org | ennebi@solira.org |