Devo scrivere un programma utilizzando l'iterazione while che mi prenda in iterazione come input kilometri percorsi e litri di benzina fatti e mi dia in output il loro rapporto, calcoli la somma totale dei kilometri percorsi e dei litri di benzina fatti fino a quando non inserisco il il valore sentinella -1 e mi dà i totali. Ecco il codice:
#include <stdio.h>
int main ()
{ int km, tot_km = 0;
float litri, tot_litri = 0, km_l;
while ( km != -1 ) /*inizio dell'iterazione*/
{
printf ( "Quanti kilometri hai percorso dall'ultimo pieno? (-1 per terminare)\n" );
scanf ( "%d", &km ); /*prende in input i kilometri parziali*/
if ( km != -1 )
{
printf( "Quanti litri hai fatto all'ultimo pieno di benzina?\n" );
scanf( "%f", &litri ); /*prende in input i litri parziali*/
km_l = (float) km / litri; /*calcola il rapporto parziale tra litri e kilometri*/
printf( "Il rapporto km/l dall'ultimo pieno è: %.1f\n", km_l ); /*visualizza il rapporto tra litri e kilometri*/
tot_km += km; /*calcola la somma parziale dei kilometri totali*/
tot_litri += litri; /*calcola la somma parziale dei litri totali*/
}
} /*fine dell'iterazione*/
printf ( "Somma totale km percorsi: %d\n", tot_km );
printf ( "Somma totale litri di benzina: %f\n", tot_litri );
printf ( "Media totale kilometri su litro %.1f", (float) tot_km / tot_litri ); /*calcola i totali*/
return 0;
}
1) E' giusto mettere l'if nidificato all'interno dell'iterazione per questo scopo? Se non lo mettevo il valore sentinella non funzionava bene, infatti anche se digitavo -1 mi chiedeva un'ultima volta i litri, che non avrebbero dovuto esserci.
2) Se inserisco il valore sentinella come primo valore mi dà come media dei km/l totali -1.$ (i km totali me li da a 0). Perchè?