OBIETTIVO DELLA LEZIONE
Capire come controllare il flusso di un programma mediante la sequenza, la scelta e l'iterazione in C
Scrivere i primi semplici programmi in C
int a, b; .... { int temp; temp = a; a = b; b = temp; } /*qui la variabile temp cessa di esistere*/Gli unici blocchi che usiamo sono quelli che vedremo negli if, for e while
... temp = a; a = b; b = temp; // banale sequenza di inversione del valore di due variabili // se inverti la sequenza potresti perdere il valore di una delle due variabili ...
if (espressione) istruzione1oppure
if (espressione) istruzione1 else istruzione2oppure
if (expr1) istr1 else if (expr2) istr2 else if (expr3) istr3 else if (expr4) istr4ricordando che le istruzioni terminano con il ;
// conteggio dei tipi di caratteri char c; int n_cifre, n_separatori, n_altri; ... c = ....; // sia c il carattere da esaminare switch (c) { case '0': n_cifre = n_cifre + 1; break; case '1': n_cifre = n_cifre + 1; break; ..... case '9': n_cifre = n_cifre + 1; break; case ' ': n_separatori = n_separatori + 1; break; case '\n': n_separatori = n_separatori + 1; break; case '\t': n_separatori = n_separatori + 1; break; default: n_altri++; } ... altre
while (espressione) istruzioneoppure
while (espressione) { istruzione1 istruzione2 .... istruzionen }
for ( expr1 ; expr2 ; expr3 ) istruzioneoppure
for ( expr1 ; expr2 ; expr3 ) { istruzione1 istruzione2 .... istruzionen }
expr1; while (expr2) { istruzione1 istruzione2 .... istruzionen expr3; }Di solito expr1 inizializza un contatore (i = 1 ;)
for ( i=1 ; i<=10 ; i=i+1 ) { istruzione1 istruzione2 .... printf(" Indice = %d" , i); }
Esercizio Iterazioni
Sincerarsi che i due blocchi di codice SONO EQUIVALENTI simulando l'output del programma su carta
... for ( i=1 ; i<=10 ; i=i+1 ) { printf(" Indice = %d" , i); } ... i=1; while (i<=10) { printf(" Indice = %d" , i); i=i+1; }
Rileggi velocemente il riassunto della lezione di stamattina che trovi in questa pagina (sezione Note). I costrutti presentati saranno molto utili per risolvere gli esercizi di oggi.
Esercizio 1: impiego del ciclo FOR
Edita un programma ciclofor.c che stampi a video le seguenti 10 righe utilizzando un ciclo for:
1 2 3 4 5 6 7 8 9 10soluzione.
Esercizio 2 (Uso del costrutto if-elseif-else)
Usando NOTEPAD, creare il file reddito1.c copiando il programma sotto riportato, editalo e compilalo con DEV-C
Il programma, dato in ingresso un reddito, calcola le tasse secondo il seguente schema di aliquote:Usa il costrutto if then else come struttura condizionale.
- fino a 7000 euro: esenzione;
- da 7000 a 13000 euro: aliquota al 13%;
- da 13000 a 35000 euro: aliquota al 23%;
- oltre 35000 euro: aliquota al 33%.
Esempio:
Per calcolare l'importo delle tasse su 20000 euro di reddito bisogna impostare il seguente calcolo: 0 + 13% (13000-7000) + 23% (20000-13000)
// reddito1.c #include <stdio.h> int main() { float reddito; float tasse; printf("Inserire il reddito in euro (es: 13402.32):\n"); scanf("%f", &reddito); // completare usando la struttura if .... elseif ...elseif ..... else printf("\n\nPremi un tasto per uscire"); fflush(stdin); getchar(); // trucco per far rimanere aperta la finestra di testo return 0; }soluzione.
Esercizio 3 (Ripasso teoria blocchi di codice)
Prova a rispondere alle seguenti domande.
Se non trovi le risposte o non sei sicuro, rivedi la lezione.
-------------------------------------------------------------------------------- 1. Quali delle seguenti espressioni sono vere (anche più di una)? - Un blocco (o istruzione composta) è una sequenza di istruzioni racchiusa fra { } - Può contenere delle dichiarazioni di variabili, ma sono visibili solo all'interno del blocco - Il main è un bloccosoluzione.
Esercizio 4 (Ripasso teoria equivalenza cicli)
Prova a rispondere alle seguenti domande.
Se non trovi le risposte o non sei sicuro, rivedi la lezione.
-------------------------------------------------------------------------------- Verifica che i due blocchi di codice sotto riportati siano EQUIVALENTI simulando l'output del programma su carta. ... for ( i=1 ; i<=10 ; i=i+1 ) { printf(" Indice = %d\n" , i); } ... i=1; while (i<=10) { printf(" Indice = %d\n" , i); i=i+1; }soluzione.
Esercizio 5:
Edita un programma natale.c che stampi a video le seguenti righe utilizzando due cicli for annidati:
* ** *** **** ***** ****** *******soluzione.
Esercizio 6 (Ripasso teoria costrutti iterazione)
Prova a rispondere alle seguenti domande.
Se non trovi le risposte o non sei sicuro, rivedi la lezione.
-------------------------------------------------------------- 1. Trova quale costrutto è più utile per scandire un array: - while - for - altri costrutti -------------------------------------------------------------- 2. Trova quale costrutto è più utile per gestire l'immissione di dati dall'utente ma il cui numero viene deciso durante l'esecuzione del programma: - while - for - altri costrutti
Esercizio 7 (Ripasso teoria operatori)
Prova a rispondere alle seguenti domande senza programmare.
-------------------------------------------------------------- 1. L'espressione 'a[x = n *2, y = n++] = (b = 27) + (c = (f = e - 3));' è corretta? - Sì - No -------------------------------------------------------------------------------- 2. Se la variabile p vale 5 e x vale 5, cosa vale p dopo l'esecuzione di p *= x++ ? -------------------------------------------------------------------------------- 3. Se la variabile p vale 5 e x vale 5, cosa vale x dopo l'esecuzione di p *= x++ ? -------------------------------------------------------------------------------- 4. Se la variabile r vale 5 e x vale 5, cosa vale r dopo l'esecuzione di r = ++x + x ?ORA scrivi dei semplici programmi di prova che ti permettano di controllare i risultati.
Esercizio 8: Programmazione di base
Edita un programma radiceintera.c che soddisfi i seguenti requisiti:
La radice quadrata intera calcolata per difetto è il numero intero più grande il cui quadrato risulta minore o uguale di N.
- chiede all'utente un numero intero;
- ne calcola la radice quadrata intera approssimata per difetto;
- ne stampi il suo valore a terminale.
Suggerimento: Per verificare la correttezza del programma simularne il funzionamento utilizzando in input i numeri interi 35, 4, 3 ed ottenendo come output, rispettivamente 5, 2, 1.
soluzione.