Sei sulla pagina 1di 25

Unità D7

Le strutture di controllo
nei linguaggi C e C++
Le istruzioni di selezione
Il costrutto di selezione è uno dei principali costrutti della programmazione
imperativa.

Esso permette di scegliere tra istruzioni (o gruppi di istruzioni) diverse a seconda


del valore di verità di certe variabili, così come spesso regoliamo il nostro
comportamento sulla base del verificarsi o meno di determinate condizioni.

Un esempio è il seguente: “Se piove prendo l’autobus, altrimenti vado in


bicicletta”.

Unità D7 – Le strutture di controllo nei linguaggi C e C++


L’istruzione if … else
Il costrutto di selezione viene implementato in C/C++ attraverso
l’istruzione if ... else.

Si tratta di un’istruzione intuitiva,


soprattutto se si considera il
significato delle particelle inglesi if,
in italiano “se”, ed else, “altrimenti”.

Questo costrutto, detto anche


“struttura alternativa”, secondo i
canoni della programmazione
strutturata può presentarsi con o
senza il ramo “altrimenti”.

Unità D7 – Le strutture di controllo nei linguaggi C e C++


L’istruzione if … else:
la sintassi in C/C++
In C/C++, la sintassi dell’istruzione if … else è la seguente:

Le istruzioni da eseguire, sia che la condizione risulti vera, sia che risulti falsa,
possono essere una o più di una.

Un esempio con più condizioni è:


“Se piove prendo l’ombrello ed esco in autobus, altrimenti metto la tuta e vado in
bicicletta”.

Unità D7 – Le strutture di controllo nei linguaggi C e C++


L’istruzione if … else:
un esempio
Esempio. Dato in input un numero N, stabilire se è divisibile per 3.

La condizione all’interno dell’istruzione if verifica se il resto (operatore %) della divisione fra il numero inserito da tastiera e il valore 3 fornisce un valore uguale a 0.
Se la condizione è vera, di fatto il numero risulta divisibile per 3, altrimenti no.

Unità D7 – Le strutture di controllo nei linguaggi C e C++


L’istruzione if … else:
if annidata
All’interno di un’istruzione if è possibile inserire qualsiasi tipo di istruzione, anche una nuova istruzione if.
Si parla di if annidate o nidificate.

Quando si utilizzano istruzioni if annidate, occorre sempre controllare con grande accuratezza quale azione else sarà associata a ciascuna if.

Esempio

Unità D7 – Le strutture di controllo nei linguaggi C e C++


L’istruzione di selezione multipla:
lo switch
Esistono problemi la cui soluzione richiede una serie di scelte successive.

Usare numerosi if in cascata può essere problematico: una soluzione semplice ed efficiente è servirsi del costrutto selezione
multipla.

La selezione multipla è implementata


in C/C++ con l’istruzione switch.

Qui a lato è mostrata la relativa sintassi.

Unità D7 – Le strutture di controllo nei linguaggi C e C++


L’istruzione di selezione multipla:
esempio con switch (1)
Esempio. Dato in input un numero, visualizzare il giorno della
settimana corrispondente.

Unità D7 – Le strutture di controllo nei linguaggi C e C++


L’istruzione di selezione multipla:
esempio di switch (2)
Acquisito il valore intero della variabile giorno, il controllo passa al case corrispondente.

Per esempio, se inseriamo il valore 4, è eseguita l’istruzione case 4, ma anche quella dei case
successivi.

Come si può vedere nella finestra di output, sono state eseguite tutte le istruzioni relative anche
ai case 5, 6 e 7.

Unità D7 – Le strutture di controllo nei linguaggi C e C++


L’istruzione di selezione multipla:
l’istruzione break
Si dice che il linguaggio C/C++ prevede il fall-through automatico tra le clausole dello switch.

Ciò significa che, anche quando una clausola


è eseguita, il controllo passa alle clausole case
successive (default compreso) e non si esce
dallo switch.

Nella maggior parte dei casi capita di dover


eseguire le istruzioni corrispondenti a uno solo
dei casi presenti: diventa perciò necessario
interrompere l’esecuzione sequenziale
del programma e saltare alla fine dello switch.
Per farlo, si utilizza l’istruzione break.

Unità D7 – Le strutture di controllo nei linguaggi C e C++


L’istruzione di selezione multipla:
esempio con break (1)
Esempio. Fornito in input un numero corrispondente a un mese,
visualizzare il suo nome.

Unità D7 – Le strutture di controllo nei linguaggi C e C++


L’istruzione di selezione multipla:
primo esempio con break (2)
Nell’esempio, per semplicità abbiamo
omesso i case da 2 a 10.

L’esecuzione del codice dell’esempio,


nell’ipotesi che l’utente digiti il numero 10,
fornisce in output la stringa “Ottobre”.

Incontrando l’istruzione break, esce


dal costrutto switch: il controllo è trasferito
all’esterno del blocco, cioè alla prima istruzione
che segue lo switch.

Se l’utente digita un valore non compreso nell’intervallo da 1 a 12, viene


eseguita l’istruzione default, che visualizza il messaggio: “Numero non valido”.

Unità D7 – Le strutture di controllo nei linguaggi C e C++


L’istruzione di selezione multipla:
secondo esempio con break (1)
Esempio. Dato in input un numero corrispondente a un mese dell’anno,
stabilire quanti giorni rimangono sino alla fine dell’anno.

Unità D7 – Le strutture di controllo nei linguaggi C e C++


L’istruzione di selezione multipla:
secondo esempio con break (2)
Nel programma dell’esempio viene valutato il valore
della variabile mese passata come parametro a switch.

A seconda del valore che tale variabile assume,


viene poi eseguito il relativo blocco di istruzioni.

Se il valore di mese è 10, viene


eseguito il blocco corrispondente.

Poiché manca l’istruzione break


alla fine di tale blocco, il programma continua
a eseguire anche le istruzioni del blocco
successivo (quello per il quale
la costante intera associata a case è 11)
e quello ancora successivo (12) memorizzando
nella variabile giorni il valore 92, ossia il numero
di giorni rimasti sino alla fine dell’anno.

Unità D7 – Le strutture di controllo nei linguaggi C e C++


Le istruzioni di iterazione
Nella risoluzione di problemi capita spesso di dover ripetere una stessa serie di istruzioni per un numero molto grande (ma
finito) di volte.

Il linguaggio C/C++ dispone di tre


tipi diversi di istruzioni iterative:
•while;
•do ... while;
•for.

Unità D7 – Le strutture di controllo nei linguaggi C e C++


L’istruzione while
L’istruzione while prevede che il controllo della ripetizione delle istruzioni sia
precedente alla loro esecuzione.

Si tratta di un costrutto pre-condizionale.

Questa è la sintassi:

Unità D7 – Le strutture di controllo nei linguaggi C e C++


L’istruzione while: esempio
Esempio. Dato in input un numero, calcolare la somma di tutti i suoi predecessori e del
numero stesso.

Il ciclo è eseguito termina mentre la condizione espressa nelle parentesi risulta vera e
appena il valore di k supera quello di num e quindi la condizione k <= num diviene false.

Unità D7 – Le strutture di controllo nei linguaggi C e C++


L’istruzione while: annidata
Anche i costrutti iterativi possono essere annidati.

Esempio. Calcolare il fattoriale dei numeri compresi tra 1 e 10 (il fattoriale di un numero
intero n è il prodotto di quel numero per tutti i suoi predecessori).

Il primo ciclo scandisce i numeri da 1 a 10. Il secondo (interno al primo) calcola il fattoriale
per ognuno di essi.
Unità D7 – Le strutture di controllo nei linguaggi C e C++
L’istruzione do … while
L’istruzione do ... while valuta la condizione alla fine del ciclo iterativo.
È un costrutto post-condizionale.

Per questo motivo, il corpo del ciclo do ... while viene sempre eseguito almeno una volta.

La sintassi è la seguente:

Unità D7 – Le strutture di controllo nei linguaggi C e C++


L’istruzione do … while: esempio
Esempio. Scrivere un programma per cui qualsiasi numero minore di 10 o maggiore di 20
non sia consentito come valore di input e che iteri la richiesta fino a quando il dato non
soddisfa la tale condizione (cioè sia compreso tra 10 e 20).

Si tratta di un tipico esempio di validazione dell’input dell’utente.


Unità D7 – Le strutture di controllo nei linguaggi C e C++
L’istruzione for
L’istruzione for è usata per codificare la ripetizione enumerativa o ripetizione con contatore:
cioè istruzioni cicliche che devono essere ripetute per un numero prestabilito di volte.

La sintassi è: Schematicamente:

Unità D7 – Le strutture di controllo nei linguaggi C e C++


L’istruzione for: primo esempio
Esempio. Ottenere la somma di cinque numeri interi immessi
dall’utente.

Unità D7 – Le strutture di controllo nei linguaggi C e C++


L’istruzione for: secondo esempio
L’istruzione for è usata soprattutto quando, già all’avvio dell’iterazione, è noto il numero di
volte in cui dovrà essere ripetuto il blocco delle istruzioni in essa contenuto.

Esempio. Dati in input una sequenza di numeri chiusa dallo zero, ottenere la loro somma.

Il ciclo esegue l’azzeramento della variabile somma e, subito dopo, controlla se il valore di
numero è diverso da zero: se ciò è vero, sono eseguite le istruzioni del ciclo.
Terminate le istruzioni, poiché manca la terza espressione del for, è ripetuto il controllo su
numero.
Unità D7 – Le strutture di controllo nei linguaggi C e C++
Le istruzioni break e continue
Le istruzioni break e continue consentono un maggiore controllo sui cicli.
Nessuna delle due accetta argomenti.

L’istruzione break può essere usata anche


all’interno di un ciclo, causandone la terminazione.
Quando l’elaboratore la incontra,
salta tutte le istruzioni del ciclo rimanenti
e prosegue con la prima istruzione
successiva al ciclo stesso.

L’istruzione continue può essere usata


solo all’interno di un ciclo.
Impedisce l’esecuzione delle istruzioni
restanti del ciclo, ma, diversamente
da break, riporta il controllo all’inizio di questo,
per eseguire una nuova iterazione.
Unità D7 – Le strutture di controllo nei linguaggi C e C++
Le istruzioni break e continue:
esempio
Esempio. Scrivere un piccolo programma che contenga l’istruzione
continue, il cui scopo sia stampare il quadrato di tutti i numeri pari
minori di 50.

Unità D7 – Le strutture di controllo nei linguaggi C e C++

Potrebbero piacerti anche