Strutture di controllo nel C Sequenza, if, switch, while, do while, for
... } Istruzione1; Istruzione2; } ... Sequenza Istruzione2 Istruzione1 ... } Istruzione1; Istruzione2; } ...
... if (condizione) { IstruzioniA; } else { IstruzioniB; } ... Selezione: if Condizione IstruzioniB V F IstruzioniA ... if (condizione) { IstruzioniA; } else { IstruzioniB; } ...
Selezione: switch variabile == val1 V F IstruzioniA variabile == val2 IstruzioniB IstruzioniC ... switch (variabile) { case val1: IstruzioniA; break; case val2: IstruzioniB; break; default: IstruzioniC; } ...
... while (condizione) { Istruzioni; } ... Iterazione: while Condizione Istruzioni V F ... while (condizione) { Istruzioni; } ...
... do { Istruzioni; } while (condizione); ... Iterazione: do while Condizione Istruzioni V F ... do { Istruzioni; } while (condizione); ...
Inizializzazione contatore Iterazione: for Condizione Istruzioni V F Inizializzazione contatore Incremento contatore ... for (iniz cont; condizione; inc cont) { Istruzioni; } ... Il contatore puo: Essere incrementato o decrementato Avere un passo diverso da 1
Esempi in C sulle strutture di controllo Metodi classici per l’inserimento dei dati, divisibilità e molteplicità
Anno bisestile L’utente inserisce un anno ed il calcolatore verifica se è bisestile Se l’utente inserisce un numero minore di zero il programma termina (senza ovviamente fare alcuna verifica) altrimenti, al termine della verifica, si ricomincia daccapo Ricordiamo che un anno è bisestile se: è divisibile per 4 ma non per 100, oppure se è divisibile per 400.
Anno bisestile . #include <stdio.h> void main () { unsigned int restoDiv4, restoDiv100, restoDiv400; int anno; printf ("Inserire un anno: "); scanf ("%d", &anno); while (anno >= 0) restoDiv4 = anno % 4; restoDiv100 = anno % 100; restoDiv400 = anno % 400; .
Anno bisestile if (restoDiv4 == 0 && restoDiv100 != 0 || restoDiv400 == 0) { printf ("L’anno è bisestile\n"); } else printf ("L’anno non è bisestile\n"); printf ("Inserire un altro anno: "); scanf ("%d", &anno); printf ("Fine.\n"); .
Anno bisestile Nota sul ciclo (“terminatore escluso”): lettura dato inizio ciclo e controllo dato (terminatore?) elaborazione dato lettura dato successivo fine ciclo.
Da minuscolo a maiuscolo L’utente inserisce una sequenza di caratteri, terminata dal carattere ‘#’ Il programma visualizza i caratteri, trasformando tutte le lettere minuscole in maiuscole Eventuali caratteri diversi dalle lettere minuscole e dal ‘#’ devono essere visualizzati come ‘_’ Il carattere ‘#’ deve essere anch’esso visualizzato
Da minuscolo a maiuscolo #include <stdio.h> void main() { char carattere; printf ("Caratteri (termina con #): "); do scanf (" %c", &carattere); if (carattere >= 97 && carattere <= 122) printf ("%c", carattere - 32); } .
Da minuscolo a maiuscolo else if (carattere != '#') { printf ("_"); } else printf ("#"); } while (carattere != '#');
Da minuscolo a maiuscolo Nota sul ciclo (“terminatore incluso”): inizio ciclo Lettura dato elaborazione dato fine ciclo e controllo dato (terminatore?).
Fattoriale L’utente inserisce alcuni numeri naturali e l’elaboratore ne calcola il fattoriale Ricordiamo che i fattoriale è definito come: n! = 1 sse n = 0 n! = n·(n – 1)! sse n > 0 Usiamo un procedimento iterativo: il fattoriale può essere calcolato: n! = 1 sse n = 0 n! = 123…n sse n > 0 .
Fattoriale #include <stdio.h> void main() { unsigned int n, i, max, j; unsigned long int fat; printf ("Quanti numeri?: "); scanf ("%u", &max); .
Fattoriale for (j = 1; j <= max; j++) { printf ("Introduci numero naturale: "); scanf ("%u", &n); fat = 1; for (i = 1; i <= n; i++) { fat = fat * i; } printf ("Il fattoriale è: %lu\n", fat); }
Fattoriale Nota sul ciclo (“nessun terminatore, inserisci numero elementi”): Lettura numero elementi da inserire inizio ciclo for per il numero di elementi Lettura dato elaborazione dato fine ciclo.
Calcolatrice L’utente inserisce un carattere (‘+’, ‘-’, ‘*’, ‘/’) che rappresenta l’operazione da eseguire e due operandi (numeri float) L’operazione viene eseguita, se possibile.
Calcolatrice #include <stdio.h> void main() { float op1, op2, tot; char operazione; unsigned int errore = 0; printf ("Operazione (+,-,*,/): "); scanf ("%c", &operazione); printf ("Primo operando: "); scanf ("%f", &op1); printf ("Secondo operando: "); scanf ("%f", &op2); .
Calcolatrice switch (operazione) { case '+': tot = op1 + op2; break; case '/': if (op2 != 0) tot = op1 / op2; else errore = 1; default: printf ("Operazione?\n"); } .
Calcolatrice if (errore == 0) { printf ("Risultato: %f\n", tot); } else printf ("Errore!\n"); } .