Le strutture di controllo

Elemento comune di tutti i linguaggi di programmazione, le istruzioni condizionali consentono di eseguire un blocco di codice al determinarsi di una determinata condizione. Sono tipicamente composte dalla presenza di keyword specifiche seguite da una coppia di parentesi tonde, nelle quali é posta la condizione da verificare. Qualora questa sia verificata, il blocco condizionale viene eseguito.

L’istruzione condizionale If

La istruzione condizionale if esegue un determinato blocco di codice solo se la condizione contenuta tra parentesi é verificata (true).

Sintassi:

if (espression) {statement};

Istruzione condizionale if/else

Funzionalmente molto simile ad if, alterna alla condizione true un codice da eseguire in caso che la condizione sia false.

Sintassi:

if (expression) {
    statement_true; //Eseguito se la condizione tra parentesi é true
}
else {
    statement_false; //Eseguito se la condizione tra parentesi é false
};

E’ altresì possibile utilizzare più istruzioni if annidate, e, nel tal caso é bene utilizzare le parentesi graffe { } senza parsimonia in quanto il compilatore associa l’istruzione else all’istruzione if più vicina, producendo potenziali effetti indesiderati. Esempio:

#include <stdio.h>
#include <stdlib.h>
int main (void) {
int a = 3;
if (a >= 10) {
    printf(“a >= 10/n”);
}
else {
    if (a >=5 ) {
        printf(“a >= 5 e a < 10\n”);
    }
    else {
        if (a>=0) {
           printf(“a>= 0 e a<5\n”);
        }
    }
}
return (EXIT_SUCCESS);
}

Istruzione di selezione multipla switch

Similmente a if/else, il costrutto switch esegue le istruzioni di un blocco di codice se la condizione espressa fra parentesi tonde é verificata. Sebbene possa sembrare simile a If/else, switch si utilizza per corrispondenze esatte. Gli operandi della condizione da verificare devono essere di tipo intero. (no float e double)

Sintassi:

switch (espressione intera) {
    case costante_intera_1:
        statement_1;
    break;
    case costante_intera_2:
        statement_2;
    break;
    case costante_intera_3:
        statement_3;
    break;
    default:
        statement_default;
    break;
}

Per scrivere un’istruzione di selezione multipla si procede come segue:

  1. Si scrive la keyword switch seguita da parentesi tonde con la condizione da valutare.
  2. Si scrivono le keyword case che indicano le costanti, seguite eventualmente dalla keyword break, che esce dal costrutto condizionale.
  3. Se opportuno si scrive la keyword default che indica le operazioni da eseguire qualora le condizioni precedenti non siano verificate.

I cicli iterativi

Il ciclo for

Il costrutto iterativo for consente di ripetere un blocco di istruzioni fintanto che la condizione posta tra parentesi é verificata. Sono largamente utilizzati nelle array, allo scopo di operare in modo iterativo sui dati contenuti:

Sintassi:

for (dichiarazione_variabile; espressione_1; espressione_2) {
    statement;
}

Per l’utilizzo di una struttura di tipo for, si inserisce la relativa keyword seguita da una coppia di parentesi tonde, all’interno delle quali generalmente viene posto un contatore, che ad ogni incremento del conteggio, esegue lo statement.

  1. Si dichiara ed inizializza una o più variabili, che viene verificata prima dell’espressione di controllo;
  2. Nell’espressione_1 viene effettuato il controllo della variabile inizializzata
  3. L’espressione_3 indica l’espressione da valutare dopo l’esecuzione dello statement.

Si parla di ciclo infinito quando la condizione espressa tra parentesi non raggiunge mai lo stato di false.

Il ciclo while

Il costrutto di iterazione while esegue lo stesso blocco di codice fintanto che una determinata espressione é vera.

while (condizione) {
    statement
}

Il ciclo do/while

Analogamente a quanto avviene con while, il ciclo do/while esegue un blocco di codice fintanto che l’espressione di di controllo risulta vera, ma, a differenza di while, questa verifica viene fatta successivamente all’esecuzione del blocco di codice, indi per cui il suddetto codice sarà eseguito almeno una volta.

Istruzioni di salto

L’istruzione break

L’istruzione break consente di interrompere l’esecuzione di un codice contenuto in un ciclo while, do/while o for uscendo dal ciclo. Può anche essere usato in un costrutto switch, all’interno di un case.

for (int a = 0; a < 10; a++){
    if (a == 5){
        break;
    }
    printf(“%d”, a);
}

a = 1 2 3 4;

L’istruzione continue

L’istruzione continue permette di saltare tutte le istruzioni poste dopo di esso, fino alla fine del ciclo, senza tuttavia determinare l’uscita dal ciclo stesso. Può essere utilizzata in qualunque ciclo iterativo (for, while, do/while). Nel caso di un ciclo while o do/while, la keyword continue salta alla valutazione dell’espressione di controllo, mentre nel caso di un ciclo for, salta alla terza espressione di controllo.

for (int a = 0; a < 10; a++){
    if (a == 5){
        continue;
    }
    printf(“%d”, a);
}

a = 1 2 3 4 6 7 8 9

L’istruzione goto

L’istruzione goto permette di saltare l’esecuzione verso un punto di codice contrassegnato da una label contenuta nella stessa funzione.

int a = 1;
goto label;

label:
    a = 10;
printf(“a = %d”, a);
a = 10;

In linea generale il suo utilizzo é sconsigliato poiché produce il fenomeno dello “spaghetti coding” ossi un codice disordinato e difficilmente gestibile. Può tuttavia essere utile nel caso di voglia uscire da una serie di cicli molto annidati o da un istruzione switch.

L’istruzione return

L’istruzione return permette di terminare l’esecuzione di una funzione trasferendo il processo alla funzione chiamante. Può anche ritornare un valore dello stesso tipo definito in sede di dichiarazione.

Luca Scandroglio

Sono un consulente tecnico informatico, un web designer e uno sviluppatore italiano. Aiuto le aziende a dotarsi degli strumenti tecnologici e digitali per superare le sfide del mercato di oggi.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.