Title: Laboratorio di Linguaggi lezione VI: istruzioni di controllo di flusso
1Laboratorio di Linguaggilezione VI istruzioni
di controllo di flusso
Università dellInsubria Facoltà di Scienze
Matematiche, Fisiche e Naturali di Varese Corso
di Laurea in Informatica Anno Accademico 2006/07
2Ripasso costrutti base
Istruzioni di Controllo del Flusso nozioni di
sintassi e semantica (intuitivamente, non
formalmente)
3if then else
if (ltexpressiongt) ltstatement1gtelse
ltstatement2gt
Come gia detto, esegue statement1 (il ramo
then) sse lespressione risulta diversa da zero
4ltstatementgt
y x 10
y x 10 z 4
5if then else
if (ltexpressiongt) ltstatement1gtelse
ltstatement2gt
if (x) y x 10 else y 20
if (x2) y x 10 ... else y 20
6Lo sapevate che...
- In C, quasi tutti gli statement sono anche
espressioni? - Ad esempio, lassegnamento
- e anche unespressione, che vale il valore
assegnato (e ha anche il suo tipo) - Cio consente di scrivere, per esempio(non
solo e coinciso, ma e anche efficiente,come da
filosofia C)
x y
int x,y,z x y z 10
7if then else trappole
- errore di sintassi (non compila, innocuo)
- errore nella guardia (compila errore cattivo.
Cosa fa?) - punto-e-virgola di troppo (compila errore
cattivo. Cosa fa?)
if (x2) y x 10 ... else y 20
if (x2) y x 10 ...
if (x2) y x 10 ...
8for
for (ltexpr0gtltexpr1gtltexpr2gt) ltstatgt
for (i0,j10(jgt20) (ilt5) i, j--)
vecti10 printf(d, vecti)
9while
while (ltexpr0gt) ltstatgt
while (iltN ailt 1000) i i 1
10do while
do ltstatgt while (ltexpr0gt)
do printf("Immettere un valore intero
pari\n") scanf("d",a) / leggi il numero a
da tastiera / while(a2)
11switch
- costrutto condizionale a più vie
switch (ltexpr0gt) case ltconst1gt ltstat1gt
break ... case ltconst2gt ltstat2gt
break
switch (ch) case 'a'
cont_a break case 'e' cont_e
break case 'i' cont_i break
case 'o' cont_o break
case 'u' cont_u break default
cont_car
12switch
switch (oggi) case LUN ... / gestisci il
caso LUN / break case MAR ...
/ gestisci il caso MAR / break
case SAB ... / operazioni solo per il SAB /
/ FALL TROUGHT / case DOM ... /
gestisci per il SAB e la DOM /
break default ... / gestisci gli altri
casi /
13labels e goto
- salti non strutturati
- di solito, simbolo di cattiva programmazione
- (programmi spaghetti)
- perlomeno, non eleganti
ltlabelgt
goto ltlabelgt
14labels e goto
i0 while (i lt NUM) printf("d
\n",i) ...
i0 INIZIO if (igtNUM) goto
FINE printf("d \n",i)
goto INIZIO FINE ...
15break e continue
- utilizzabili in tutti i cicli
- for, while, do-while
- break esci dal ciclo
- (vai alla prima iterazione dopo il ciclo)
- continue interrompi literazone corrente
- vai allinizio della prossima iterazione
- (dove, per prima cosa, la guardia di uscita dal
ciclo viene testata)