Controllo del flusso del programma

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
.:. LUCIDI DELLA LEZIONE .:.
.:. NOTE DELLA LEZIONE..:.

Note

Come implementare i blocchi

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;
	}

MORTE!! ..... GOTO NON ESISTE MORTE!!

Lab

Prima di iniziare

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
10
soluzione.
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:
  1. fino a 7000 euro: esenzione;
  2. da 7000 a 13000 euro: aliquota al 13%;
  3. da 13000 a 35000 euro: aliquota al 23%;
  4. oltre 35000 euro: aliquota al 33%.
Usa il costrutto if then else come struttura condizionale.

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 blocco


soluzione.
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:
  1. chiede all'utente un numero intero;
  2. ne calcola la radice quadrata intera approssimata per difetto;
  3. ne stampi il suo valore a terminale.
La radice quadrata intera calcolata per difetto è il numero intero più grande il cui quadrato risulta minore o uguale di N.


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.




Informazioni sul sito