Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Nicola Maugeri
Algoritmi
La soluzione di qualsiasi problema di calcolo implica l’esecuzione di una serie di azioni
in un ordine specifico.
Esempio (Continua...)
Queste azioni di routine gli consentono di arrivare al lavoro ben preparato per prendere
decisioni cruciali.
Supponiamo che gli stessi passi siano compiuti con un ordine leggermente diverso:
1 alzarsi dal letto,
2 togliersi il pigiama,
3 vestirsi,
4 farsi una doccia,
5 fare colazione,
6 andare al lavoro.
In questo caso il nostro giovane dirigente d’azienda si presenterebbe al lavoro bagnato
fradicio!!
Introduzione al linguaggio C Istruzioni di selezione Istruzioni di iterazione
Strutture di controllo
E’ stato dimostrato che tutti i programmi potrebbero essere scritti in termini di sole tre
strutture di controllo, ossia la struttura sequenziale, la struttura di selezione e la
struttura di iterazione.
Istruzioni di selezione in C
Istruzioni di iterazione in C
Il C fornisce tre tipi di strutture di iterazione nella forma di istruzioni: cioè while,
do. . .while e for (che saranno esaminate in seguito).
L’istruzione if
if (condizione) {
istruzione;
} // fine di if
Esempio di utilizzo di if
#include<stdio.h>
int main ()
{
int voto;
printf ("Inserire il voto riportato dallo studente: ");
scanf ("%d", &voto);
if (voto >= 60)
{
printf ("Esame superato");
}
}
Introduzione al linguaggio C Istruzioni di selezione Istruzioni di iterazione
If . . . else
if (condizione) {
istruzione1;
} // fine di if
else {
istruzione2;
} // fine di else
#include<stdio.h>
int main ()
{
int voto;
printf ("Inserire il voto riportato dallo studente: ");
scanf ("%d", &voto);
else{
printf("Esame non superato con %d/100 punti", voto);
}
}
Introduzione al linguaggio C Istruzioni di selezione Istruzioni di iterazione
If annidati 1/3
If annidati 2/3
if ( voto >= 90 ) {
printf( "A" );
} // fine di if
else {
if ( voto >= 80 ) {
printf( "B" );
} // fine di if
else {
if ( voto >= 70 ) {
printf( "C" );
} // fine di if
else {
if ( voto >= 60 ) {
printf( "D" );
} // fine di if
else {
printf( "F" );
} // fine di else
} // fine di else
} // fine di else
} // fine di else
Introduzione al linguaggio C Istruzioni di selezione Istruzioni di iterazione
If annidati 3/3
if ( voto >= 90 ) {
printf( "A" );
} // fine di if
else if ( voto >= 80 ) {
printf( "B" );
} // fine di else if
else if ( voto >= 70 ) {
printf( "C" );
} // fine di else if
else if ( voto >= 60 ) {
printf( "D" );
} // fine di else if
else {
printf( "F" );
} // fine di else
Per quanto riguarda il compilatore C, le due forme sono equivalenti. L’ultima forma è la più comune,
dal momento che evita la profonda indentazione a destra del codice. Tale indentazione lascia
spesso poco spazio su una riga, facendo sì che le righe siano spezzate con conseguente riduzione
della leggibilità del programma.
Introduzione al linguaggio C Istruzioni di selezione Istruzioni di iterazione
switch case
La parola switch è seguita da una espressione, racchiusa tra parentesi tonde, il cui
risultato deve essere di tipo int o char. Il resto del costrutto è formato da un’istruzione
composta, costituita da un numero qualsiasi di sottoparti, ciascuna delle quali inizia
con la parola chiave case, seguita da un’espressione costante intera o carattere.
Questa è separata, tramite un simbolo di due punti, da una o più istruzioni. In fase di
esecuzione, viene valutata espressione e il risultato viene confrontato con costante1:
se i due valori sono uguali il controllo passa alla prima istruzione che segue i due punti
corrispondenti, altrimenti si prosegue confrontando il risultato dell’espressione con
costante2, e così di seguito. Spesso, nell’utilizzo di questo costrutto, il programmatore
desidera che vengano eseguite solamente le istruzioni associate a un singolo case. A
questo scopo si inserisce, al termine di ogni case, l’istruzione break, che causa l’uscita
immediata dallo switch. Se l’espressione non corrisponde a nessuna delle costanti, il
controllo del programma è trasferito alla prima istruzione che segue la parola riservata
default (se presente).
Introduzione al linguaggio C Istruzioni di selezione Istruzioni di iterazione
Esempio
Scrivere un programma che visualizzi il seguente menu:
MENU DI PROVA
a) Per immettere dati
b) Per determinare il maggiore
c) Per determinare il minore
d) Per ordinare
e) Per visualizzare
Scelta:
quindi attenda l’immissione di un carattere da parte dell’utente e visualizzi una scritta
corrispondente alla scelta effettuata, del tipo: “In esecuzione l’opzione a”. Se la scelta
non è tra quelle proposte (a, b, c, d, e) deve essere visualizzata la scritta: “Opzione
inesistente”.
Introduzione al linguaggio C Istruzioni di selezione Istruzioni di iterazione
switch(choice){
case ’a’: printf("In esecuzione l’opzione a");
break;
case ’b’: printf("In esecuzione l’opzione b");
break;
case ’c’: printf("In esecuzione l’opzione c");
break;
case ’d’: printf("In esecuzione l’opzione d");
break;
case ’e’: printf("In esecuzione l’opzione e");
break;
default:
printf("Opzione inesistente");
break;
} }
Introduzione al linguaggio C Istruzioni di selezione Istruzioni di iterazione
istruzione for
Il ciclo inizia con l’esecuzione di inizializzazione, la quale non verrà mai più eseguita.
Quindi viene esaminata condizione. Se condizione risulta vera, viene eseguita
istruzione, altrimenti il ciclo non viene percorso neppure una volta. Successivamente
viene eseguita variazione e di nuovo valutata condizione che se risulta essere vera dà
luogo a una nuova esecuzione di istruzione. Il processo si ripete finché condizione non
risulta essere falsa.
Introduzione al linguaggio C Istruzioni di selezione Istruzioni di iterazione
Gli operatori di incremento e decremento possono sia precedere sia seguire una
variabile:
++i;
i++;
Le due istruzioni precedenti hanno lo stesso effetto, ma se gli operatori vengono
utilizzati all’interno di espressioni che coinvolgono più elementi valgono le seguenti
regole:
se l’operatore ++ (–) precede la variabile, prima il valore della variabile viene
incrementato (decrementato) epoi viene valutata l’intera espressione;
se l’operatore ++ (–) segue la variabile, prima viene valutata l’intera espressione e
poi il valore della variabile viene incrementato (decrementato).
Introduzione al linguaggio C Istruzioni di selezione Istruzioni di iterazione
Esempio
j=0;
for(i=1; ++i<=3;)
printf("Ciclo: %d\n", ++j);
printf("Cicli:%d i:%d\n", j, i);
j=0;
for(i=1; i++<=3;)
printf("Ciclo: %d\n", ++j);
printf("Cicli:%d i:%d\n", j, i);
++ –
* / %
+ -
> >= < <=
== !=
&&
||
= += -= *= /=
Introduzione al linguaggio C Istruzioni di selezione Istruzioni di iterazione
Anche l’istruzione while, come l’istruzione for, permette di ottenere la ripetizione ciclica
di una istruzione:
while(condizione){
istruzione;
}
Viene verificato che condizione sia vera, nel qual caso viene eseguita istruzione. Il ciclo
si ripete fintantoché condizione risulta essere vera. Naturalmente, ancora una volta,
istruzione può essere un blocco. Riprendiamo il programma che calcola la somma dei
valori immessi dall’utente e modifichiamolo in modo da controllare il ciclo con while.
Introduzione al linguaggio C Istruzioni di selezione Istruzioni di iterazione
L’inizializzazione della variabile che controlla il ciclo deve precedere l’inizio del while e
l’incremento della stessa variabile deve essere inserito come ultima istruzione del
blocco. In generale, quando il numero d’iterazioni è noto a priori, per passare da un for
a un while vale la seguente equivalenza:
inizializzazione;
while(condizione){ for(inizializzazione; condizione; variazione){
corpo_del_ciclo corpo_del_ciclo
variazione} }
Introduzione al linguaggio C Istruzioni di selezione Istruzioni di iterazione
Conviene utilizzare il costrutto while quando la condizione di chiusura del ciclo non è
nota a priori.
/* Calcola la somma dei valori interi passati dall’utente. Termina quando viene
#include <stdio.h>
main()
{
int somma, numero;
printf("SOMMA NUMERI\n");
printf("zero per terminare\n");
numero = 1;
somma = 0;
while(numero!=0) {
printf("Inser. intero: ");
scanf("%d", &numero);
somma = somma+numero;
}
printf("Somma: %d\n",somma);
} }