La ripetizione

In C la struttura di ripetizione si rappresenta con l’istruzione do … while:

do
{

istruzioni;
}
while (condizione);

Le istruzioni comprese tra do e while vengono ripetute tante volte, mentre la condizione scritta dopo while si mantiene vera: in altre parole la ripetizione termina quando la condizione scritta dopo while diventa falsa.


Per esempio, si consideri il seguente frammento di programma:

do
{

printf("il mese:");
scanf("%d",&mese);
}
while (mese < 1 || mese > 12);

Solo quando il mese digitato dall’utente è compreso tra 1 e 12, l’esecuzione del programma procede con l’istruzione successiva a while.
Si noti che le istruzioni da ripetere sono raggruppate da una coppia di parentesi graffe e che la condizione scritta dopo while è racchiusa tra le parentesi tonde. La condizione è composta e utilizza l’operatore || (Or).

ESEMPIO: Calcolo del prodotto tra interi utilizzando la sola operazione di somma

Presi in considerazione due numeri interi positivi, si tratta di sommare il primo numero con se stesso un numero di volte pari al secondo numero. Per sapere quante volte deve essere eseguita l’operazione di somma e per sapere quando fermarsi, ogni volta che viene fatta la somma si decrementa di 1 il valore del secondo numero e si interrompe la ripetizione della somma quando questo diventa 0.

Programma C

/* Prodotto.c : prodotto di due numeri */
#include <stdio.h>
main()
{
/* input */
int a, b;
/* output */
int prod = 0;
printf("Due numeri positivi: ");
scanf("%d %d",&a, &b);
do
{
prod += a;
b--;
}
while (b > 0);
printf("prodotto = %d \n",prod);
}

ESEMPIO: Dato un elenco di persone, con l’indicazione per ciascuna di esse del nome e dell’età, contare i maggiorenni

Si deve organizzare un programma che, per ogni persona dell’elenco, ripeta la richiesta dei dati (nome ed età), controlli se l’età è maggiore o uguale a 18 anni e, in questo caso, incrementi il contatore dei maggiorenni. Alla fine della ripetizione viene scritto il numero dei maggiorenni registrato nel contatore. Dopo la richiesta dei dati di una persona e il controllo sull’età, viene posta all’utente la domanda se l’elenco è finito. Si ripetono le operazioni finché la risposta è uguale a 1 per ‘sì’; la ripetizione continua se la risposta è 0 per ‘no’.

Programma C


/* Elenco1.c : elenco di persone */
#include <stdio.h>
main() {
/* input */
char nome[20];
int eta;
int risp;
/* output */
int conta = 0;
do
{
printf("Nome: ");
scanf("%s", nome);
printf("Eta': ");
scanf("%d", &eta);
if (eta >= 18)
conta++;
printf("elenco finito: 0=no, 1=si ? ");
scanf("%d", &risp);
}
while (risp == 0);
printf("I maggiorenni sono = %d \n",conta);
}