Home
Accesso / Registrazione
 di 

Programmare in C - Selezioni e cicli di loop

Guida C

Guida completa al C, per imparare a programmare di tutto in un linguaggio universale! Selezioni e cicli di loop.

Nella programmazione in C, sia gli statement if che i cicli while si basano sull'idea di espressioni booleane. Ecco un semplice programma C che illustra uno statement if

#include <stdio.h>

int main()
{
    int b;
    printf("Enter a value:");
    scanf("%d", &b);
    if (b < 0)
        printf("The value is negative\n");
    return 0;
}

Questo programma accetta un numero in input dall'utente. Il programma effettua un test sul numero usando uno statemente if per vedere se è minore di 0. Se è minore di zero, allora il programma stampa un messaggio. Altrimenti, il programma non fa nulla. La porzione di programma (b<0) è una espressione booleana. Il C valuta questa espressione per decidere se stampare o non stampare il messaggio. Se l'espressione Booleana viene valutata come Vera (True) allora il C esegue la linea immediatamente successiva allo statement if (o il blocco di codice fra parentesi che seguono immediatamente lo statement if). Se l'espressione booleana è falsa (False) allora il C salta la linea o il blocco di linee di codice immediatamente seguente lo statement if.

Ecco qui un esempio più complesso:

#include <stdio.h>

int main()
{
    int b;
    printf("Enter a value:");
    scanf("%d", &b);
    if (b < 0)
        printf("The value is negative\n");
    else if (b == 0)
        printf("The value is zero\n");
    else
        printf("The value is positive\n");
    return 0;
}

In questo esempio, le sezioni else if e else verificano che il numero inserito dall'utente sia zero oppure un numero positivo.

Ecco qui una espressione booleana ancora più complicata:

if ((x==y) && (j>k))
    z=1;
else
    q=10;

Questo blocco di codice dice: “se il valore nella variabile x è uguale al valore della variabile y, e se il valore della variabile j è maggiore di quello della variabile k, allora imposta la variabile z a 1, altrimenti imposta la variabile q a 10”.

Si usano gli statement if come questi esempi di cui sopra ogni qualvolta serve prendere decisioni. In generale, più decisioni si devono prendere, più lo statement if diventa complicato.

Da notare che in C si usa l'operatore == per testare l'uguaglianza fra due valori, mentre si usa l'operatore = per assegnare un valore ad una variabile. L'operatore && in C rappresenta l'operazione booleana AND.

Ecco qui un elenco di tutti gli opearatori in C:

uguaglianza ==
minore <
maggiore >
minore o uguale <=
maggiore o uguale >=
disuguaglianza !=
e &&
o ||
negazione !

Gli statement while sono semplici da comprendere poiché il meccanismo in gioco è analogo a quello degli statement if, ossia si devono valutare delle condizioni. Ad esempio:

while (a < b)
{
    printf("%d\n", a);
    a = a + 1;
}

Il codice sopra descritto può essere spiegato così: le due linee fra parentesi vengono eseguite ripetutamente finchè a diventa maggiore o uguale a b. Lo statement while funziona generalmente così

In C esiste anche una struttura do-while

do
{
    printf("%d\n", a);
    a = a + 1;
}
while (a < b);

In C il ciclo for è un modo più rapido per realizzare uno statement while. Per esempio, supponiamo di avere il seguente codice C:

x=1;
while (x<10)
{
    blah blah blah
    x++; /* x++ è lo stesso che fare x=x+1 */
}

Si può convertire il ciclo while in un ciclo for così come segue:

for(x=1; x<10; x++)
{
    blah blah blah
}

Da notare che il ciclo while prevede un passo in cui la variabile viene inizializzata (x=1) e un passo di confronto (x<10) e poi infine un passo in cui la variabile x viene incrementata (x++). Nel ciclo for si comprimono le tre parti in una sola linea. Supponiamo ora di avere questo ciclo while:

a=1;
b=6;
while (a < b)
{
    a++;
    printf("%d\n",a);
}

Si può tradurre in un ciclo for come segue: for (a=1,b=6; a < b; a++,printf("%d\n",a)); La notazione di cui sopra si presta a confusione, ma è possibile utilizzarla per ottenere lo stesso risultato del ciclo while.

L'operatore virgola (o comma) permette di separare diverse istruzioni nell'inizializzazione delle variabili e incrementare il loro valore. Non è possibile utilizzare l'operatore virgola nell'espressione booleana per il test. Molti programmatori C amano compattare il codice utilizzando notazioni come la porzione di codice di cui sopra, ma molti altri programmatori preferiscono mantenere il loro codice molto più leggibile.

Operatore = vs Operatore == nelle espressioni booleane.

Il simbolo == costituisce un “problema” in C perchè è facile dimenticarsi di inserire il secondo = dopo il primo = in un'espressione booleana. Questo errore può essere considerato un errore da nulla, ma per i compilatori fa una grossa differenza. Il linguaggio C permette che appaiano simbolo = oppure == nelle espressioni Booleane, ma il comportamento del programma può cambiare drasticamente sostituendo un operatore all'altro.

Le espressioni booleane vengono valutate come valori interi in C, e gli interi possono essere usati all'interno delle espressioni booleane. Il valore intero 0 è nel linguaggio C il valore intero del valore booleano Falso, mentre ogni altro intero viene valutato come Vero. La seguente porzione di codice è legale in C:

#include <stdio.h>

int main()
{
    int a;

    printf("Enter a number:");
    scanf("%d", &a);
    if (a)
    {
        printf("The value is True\n");
    }
    return 0;
}

Se a è qualsiasi cosa diversa da 0, l'istruzione di printf viene eseguita.

In C, un'istruzione if come if(a=b) significa: assegna alla variabile a il valore contenuto nella variabile b e quindi testa il valore di a come valore booleano. Se a vale 0, allora l'espressione booleana dell'if è falsa, altrimenti è vera. Il valore di a, essendo contenuto in una variabile, può cambiare durante l'esecuzione. Questo non è di certo il comportamento che si ottiene se si sostituisce l'operatore = con l'operatore ==. Pertanto, prestare attenzione al significato degli operatori = e ==.

 

 

Scrivi un commento all'articolo esprimendo la tua opinione sul tema, chiedendo eventuali spiegazioni e/o approfondimenti e contribuendo allo sviluppo dell'argomento proposto. Verranno accettati solo commenti a tema con l'argomento dell'articolo stesso. Commenti NON a tema dovranno essere necessariamente inseriti nel Forum creando un "nuovo argomento di discussione". Per commentare devi accedere al Blog
ritratto di Anonimo

avvertenza

Volevo solo aggiungere:

in C le variabili devono essere sempre dichiarate in maniera esplicita es: int a; e conviene sempre inizializzarle es a=1;

usare variabili non dichiarate e sopratutto non inizializzate (i risultati sono impredicibili) è una causa di tanti mal di testa quando si scrivono i cicli se le variabili sono da testare prima del ciclo:

while (a < b)
{
printf("%d\n", a);
a = a + 1;
}

chiedo scusa ai "bravi" per l'ovvieta'

Ciao a tutti

 

 

Login   
 Twitter Facebook LinkedIn Youtube Google RSS

Chi è online

Ultimi Commenti