Sei sulla pagina 1di 20

Laboratorio di Programmazione 1

Docente: dr. Damiano Macedonio Lezione 8 14/11/2013

Original work Copyright Sara Migliorini, University of Verona Modifications Copyright Damiano Macedonio, University of Verona
2

Costr tti Decisionali

!l ling aggio C o"re diversi costr tti per prendere decisioni#


$%istr

&ione if' $%istr &ione switch' $%operatore condi&ionale'

!str &ione !f (e !f)*lse+

$%istr &ione if (o if-else+ , tili&&ata per determinare l%esec &ione di na o piistr &ioni in .ase a particolari condi&ioni#
if (espressione) { istruzione_1; istruzione_n; } else { istruzione_1; istruzione_m; }

*sempio con gli operatori di !ncremento/Decremento


int a = 0; if (a++ == 0) { printf(Il valore di a e' zero n!); } else { printf(Il valore di a e' positivo n!"); } if (++a == 0) { printf(Il valore di a e' zero n!"); } else { printf(Il valore di a e' positivo n!"); }

*spressioni $ogiche

$a condi&ione specificata nell%istr &ione if p 0 essere na 1 alsiasi espressione logica (valori vero o falso+' $%espressione logica p 0 essere formata anche da pi- condi&ioni nite attraverso n operatore logico binario'
###

and logico' $$ # or logico'

!l valore di n%espressione logica p 0 essere negato attraverso operatore logico unario#


%#

not logico'

!str &ioni !f 2nnidate


$e istr &ioni if possono essere annidate'
if (n & ' == 0) if (n ( 0) printf(Il n)*ero else printf(Il n)*ero else if (n ( 0) printf(Il n)*ero else printf(Il n)*ero

&i + pari e ne,ativo! n"- n); &i + pari e positivo! n"- n);

&i + dispari e ne,ativo! n"- n); &i + dispari e positivo! n"- n);
7

Costr tto *lse)!f

3 ando il n mero di casi da disting ere , maggiore di 4, , possi.ile sare na o piistr &ioni else-if'
if (espressione_1) { istruzione_1; } else if (espressione_2) { istruzione_2; } } else { istruzione_3; }

Operatore Condi&ionale

$%operatore condi&ionale , n operatore ternario caratteri&&ato dalla seg ente forma#


condizione

. istruzione_1 / istruzione_2 condizione , n%espressione .ooleana 5er prima cosa viene val tata condizione' Se condizione , vera, allora viene eseg ita istr)zione01, altrimenti viene eseg ita istr)zione0''

6 na forma compatta solitamente tili&&ata per assegnare n valore ad na varia.ile in .ase ad na determinata condi&ione'
d

= (2 %= 0 ) . 342 / 0;

!str &ione Switch


Una

serie di istr &ioni if-else p 0 essere sostit ita dall% so dell%istr &ione switch 1 ando i valori di confronto sono costanti semplici o espressioni costanti'
switch (espressione) { case valore_1/ istruzione_1; 5rea6; case valore_2/ istruzione_2; 5rea6; defa)lt / istruzione_d; 5rea6; }

10

!str &ione Switch


$e istr &ioni all%interno di ciasc n case non devono essere racchi se tra parentesi gra"e7 Ciasc n .locco case deve essere concl so con l%istr &ione break, che determina la fine dell%istr &ione switch, altrimenti l%esec &ione proseg e con il prossimo .locco case' !l .locco default , facoltativo ed , eseg ito 1 ando l%espressione non ass me ness no dei valori specificati nei case' 8on possono esistere d e .locchi case con valori g ali, per0 , possi.ile associare lo stesso .locco di istr &ioni a pi- valori#

case value_1/ case value_2/ istruzioni; 5rea69

11

!str &ione :reak all;interno di n ciclo


L'istruzione break pu essere usata anche all'interno di un ciclo. Listruzione break permette di uscire immediatamente dal ciclo che si sta eseguendo.
Utilizzata

per terminare un ciclo perch si verificata una certa condizione.

Le successive istruzioni allinterno del ciclo vengono ignorate e lesecuzione riprende dalla prima istruzione dopo il ciclo. Se listruzione break viene eseguita allinterno di un gruppo di cicli annidati termina soltanto il ciclo pi! interno che la contiene.

12

!str &ione Contin e all;interno di n ciclo


$%istr &ione contin e p 0 essere sata solo all;interno di n ciclo' $;istr &ione contin)e determina l% scita dall%itera&ione corrente e si proseg e con l%esec &ione di na n ova itera&ione'
$e

istr &ioni che restano dal p nto di contin)e alla fine del corpo del ciclo sono saltate' Utili&&ata per saltare n .locco di istr &ione del corpo del ciclo 1 ando si verifica na certa condi&ione'
13

*serci&io <

Scrivere n programma C che chiede all% tente di inserire n n mero intero, calcola se il valore inserito , positivo o negativo, e stampa a video il ris ltato' !l confronto tra numeri si eseg e con gli operatori#
a a a a a a

( 5# a minore di 5, (= 5# a minore o g ale a 5, 7 5# a maggiore di 5, 7= 5# a maggiore o g ale a 5, == 5# a g ale a 5' %= 5# a diverso da 5'

14

*serci&io 4

Scrivere n programma C che richiede all% tente di inserire n n mero intero, calcola se il n mero , positivo, negativo opp re n llo, e stampa il ris ltato otten to'

15

*serci&io =

Scrivere n programma C che richiede all% tente di inserire n n mero intero e restit isce il valore > se il n mero , pari opp re < se il n mero , dispari' Usare na varia.ile a siliaria per memori&&are il valore da ritornare e l%operatore condi&ionale per assegnarle il valore'
16

*serci&io ?

Scrivere n programma C che richiede all% tente tre n meri interi che rappresentano na data#
@iorno,

mese, anno

e verifica se la data inserita , valida'


2nno#

? cifre' Mese# valore compreso tra < e <4 @iorno# compreso tra < e '''

4A o 4B se il mese , Ce..raio e l%anno ,/non , .isestile Un anno , .isestile se#


6 divisi.ile per ? e non , divisi.ile per <>> opp re , divisi.ile per ?>>'

=< se il mese , @ennaio, Mar&o, Maggio, $ glio, 2gosto, Otto.re, Dicem.re => se il mese , 2prile, @i gno, Settem.re, 8ovem.re'

17

*serci&io D

Scrivere n programma C che richiede all% tente d e date (spe&&are la richiesta di giorno/mese/anno come nell%esempio precedente+ e stampa a video la pi- recente'
5er

1 esto esempio ass mere che le date inserite siano valide'

18

*serci&io E

Scrivere n programma C che calcola la media dei voti inseriti dall% tente#
Ciclo

while che itera la richiesta di n n ovo voto finchF l% tente sceglie di contin are'
$ett ra dei caratteri s/n'

varia.ili intere aggiornate ad ogni ciclo per tener traccia del n mero di voti inseriti e della somma totale dei voti' !l ris ltato deve essere stampato con 4 cifre decimali'

*serci&io G

Scrivere n programma C che richiede all% tente n n mero intero n e stampa le s e cifre in lettere'

Suggerimento: sate d e cicli'

5rimo ciclo# determina il n mero di cifre che compongono n' x Se 10 , la poten&a di 10 immediatamente s periore a n,
allora x H < corrisponde al n mero di cifre di n'

Secondo ciclo# divide ripet tamente n per na poten&a di <>, partendo da 1 ella immediatamente pi- piccola di n fino a <, per rec perare le cifre da sinistra a destra'

20