2017-06-05 1 views
0

J'ai une variable total qui stocke le total des miles et gallons chaque fois que l'utilisateur entre.obtenir la moyenne de tout en boucle C en utilisant la même variable

Lorsque l'utilisateur tape -1, le programme est supposé ajouter tous les totaux ensemble et prendre la moyenne. Je ne peux pas obtenir la variable pour ajouter la valeur totale précédente à elle-même pour la prochaine itération de la boucle.

J'ai essayé totals += totals; mais cela retourne la dernière valeur totale de la boucle?

qu'est-ce que je fais mal?

#define _CRT_SECURE_NO_WARNINGS 

#include <stdio.h> 
#include <conio.h> 

const float EXIT_VALUE = -1.0f; 

int main(void) 
{ 
    float gallons; // number of gallons used 
    float miles; // number of miles driven 
    float totals; // total = miles * gallons 
    int numOfEntries = 0; // number of entries 
    float avgConsumption = 0; // avg of all entries made by user 

    // get number of gallons from user 
    printf("%s%.1f%s", "Enter the gallons used (", EXIT_VALUE, " to end): "); 
    scanf("%f", &gallons); 

    // loops until user enter -1 
    while (gallons != EXIT_VALUE) { 
     //miles driven by user 
     printf("%s", "Enter the miles driven: "); 
     scanf("%f", &miles); 

     // calculate total miles per gallon 
     totals = miles/gallons; 
     printf("The miles/gallons for this tank was %.6f\n\n", totals); 

     // get number of gallons from user 
     printf("%s%.2f%s", "Enter the gallons used (", EXIT_VALUE, " to end): "); 
     scanf("%f", &gallons); 

     totals += totals; 
     numOfEntries++; 
     avgConsumption = totals/numOfEntries; 

    } // end while 
    printf("\nThe overall average miles/gallon was %.6f: ", avgConsumption); 

    _getch(); 
    return 0; 

} // end main 
+5

'totaux + = totals' est le même que la multiplication' totals' par 2. Je suis assez sûr moyen est calculé différemment –

+0

ce que je voulais dire, la moyenne est calculée ici à « avgConsumption = totaux/numOfEntries ", où totals est le nombre total de totaux de toutes les itérations de la boucle et numOfEntries est le nombre de fois que l'utilisateur a été invité à entrer les totaux – Rgoat

+0

Et comme je l'ai dit,' totals' ne sont pas calculés correctement –

Répondre

0

Je ne pense pas que vous obtenez le droit « total » du tout

Il devient plus écrit chaque fois que vous réitérez à travers la boucle while.

Faire une autre variable pour tenir le "total" et une variable que vous pouvez stocker "miles/gallons" par - comme 'MPG'

Puis à la fin vous pouvez faire Total = Total + MPG.

2

Ce que vous devez faire est d'avoir une variable qui additionne tous les totaux, et puis quand la boucle est terminée, divise le nombre par votre variable avgConsumption.

Voici une légère modification de votre programme:

#include <stdio.h> 

const float EXIT_VALUE = -1.0f; 

int main(void) 
{ 
    float gallons; // number of gallons used 
    float miles; // number of miles driven 
    float totals = 0; // total = miles * gallons 
    int numOfEntries = 0; // number of entries 
    float avgConsumption = 0; // avg of all entries made by user 

    // get number of gallons from user 
    printf("%s%.1f%s", "Enter the gallons used (", EXIT_VALUE, " to end): "); 
    scanf("%f", &gallons); 

    // loops until user enter -1 
    while (gallons != EXIT_VALUE) { 
     //miles driven by user 
     printf("%s", "Enter the miles driven: "); 
     scanf("%f", &miles); 

     // calculate total miles per gallon 
     float curTotal = miles/gallons; 
     printf("The miles/gallons for this tank was %.6f\n\n", curTotal); 

     // get number of gallons from user 
     printf("%s%.2f%s", "Enter the gallons used (", EXIT_VALUE, " to end): "); 
     scanf("%f", &gallons); 

     totals += curTotal; 
     numOfEntries++; 

    } // end while 
    avgConsumption = totals/numOfEntries; 
    printf("\nThe overall average miles/gallon was %.6f: ", avgConsumption); 


    return 0; 

} // end main 

Ce que je faisais était d'utiliser les totaux pour additionner tous les miles/gallon que vous avez reçu dans votre boucle. J'ai utilisé une variable locale curTotal pour stocker le calcul des miles/gallons réels. Cette variable est réinitialisée pour chaque itération de la boucle. Après la conclusion de la boucle, j'ai calculé avgConsumption, au lieu de le calculer dans la boucle qui produit des résultats différents. Cela vous donne le nombre moyen de miles par gallon rapporté par les utilisateurs.

+0

merci pour l'explication et l'aide! – Rgoat

0

Qu'est-ce que je fais mal?

Le code est un mauvais calcul des totaux.

Pour calculer la moyenne de plusieurs quotients, comme miles_per_gallon (MPG), l'approche consiste généralement à diviser total_miles/total_gallons. Ce n'est pas la seule définition de la moyenne MPG pourtant je suis certain que le meilleur à utiliser ici. @Yunnosch

// Pseudo code 
total_miles = 0.0 
total_gallons = 0.0 
while (still_getting_input) 
    miles = get_input(); 
    gallons = get_input(); 
    print miles, gallons, miles/gallon 

    total_miles += miles 
    total_gallons += gallons 

print total_miles, total_gallons, total_miles/total_gallon