[C] Programma semplice di iterazione while

di il
4 risposte

[C] Programma semplice di iterazione while

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è?

4 Risposte

Devi accedere o registrarti per scrivere nel forum
4 risposte