Partage

calcul d'une moyenne

Sujet résolu
Le 2 février 2012 à 12:04:04

Bonjour à tous,

Voici un programme qui me paraissait simple je dois simplement entrer le nombre de nombre composant ma moyenne, ensuite entrer c'est fameux nombre et pour finir en calculer la moyenne, seulement je ne comprend pas pourquoi mon programme ne me prend jamais en compte dans le calcul de la moyenne le dernier nombre entrer. Pour être clair si je lui dis que je vais entrer 4 nombre, il va me calculer la moyenne à partir des 3 nombres entrer et non des 4...

voici le programme


#include <stdio.h>



int main()
{
    double moy,resultat;
    int nb,nb1,i;
    scanf("%d\n",&nb);
    for (i=1;i<nb;i++)
    {
        scanf("%d\n",&nb1);
        resultat+=nb1;
    }
    moy=resultat/nb;
    printf("%lf",moy);
    return 0;
}


merci à tous
Publicité
Le 2 février 2012 à 12:04:04
Le 2 février 2012 à 12:34:22

for (i=1;i<nb;i++) devrait être :
for (i=0;i<nb;i++) ou bien :
for (i=1;i<=nb;i++)
Le 2 février 2012 à 12:43:54

Comme dit plus haut, c'est parce que tu ne fais pas assez de tours.
Petit moyen de savoir combien tu dois faire de tours : imagine les extrêmes. Ici, l'extrême est de prendre 1 note. Tu entres donc nb = 1.
i = 1.
i < nb ? i = 1 ; nb = 1 donc i < nb est faux.
Tu fais 0 tour de boucle.
Il te manque donc au moins un tour de boucle.
Le 2 février 2012 à 12:56:06

Ben je ne comprends pas ça ne fonctionne pas avec les réponses données plus haut, enfaite j'avais déjà essayé c'est solution, mais pour le coup si je lui dis que je vais entrer 3 nombre par exemple et bien il m'en demande 4...le calcul de la moyenne ce fait bien sur 3 nombre par contre je dois en entrer 4...

JE ne comprends pas ce qu'il ce passe sur ce code...

Merci
Le 2 février 2012 à 13:12:12

Le problème vient de tes "\n" dans tes scanf , retire les et ça marche (et bien sur ta boucle for qui doit être initialisée à i=0 et non i=1) ;) Je t'ai mis des printf en plus pour que ce soit plus compréhensible à l'utilisateur.

int main()
{
    double moy,resultat=0,nb1=0;
    int nb=0,i;
    printf("Combien de nombre pour la moyenne ? ");
    scanf("%d",&nb);
    
    for (i=0;i<nb;i++)
    {
        printf("Nombre %d : ", (i+1));
        scanf("%lf",&nb1);
        resultat+=nb1;
    }
    
    moy=resultat/nb;
    printf("%f",moy);
    
    return 0;
}
Le 2 février 2012 à 13:57:54

Le truc de fou!!!! pourrais je avoir une explication sur ce point là? pourquoi les\n faisait bugger mon prog? (ou pas)

Merci pour l'info.

Arnd
Le 2 février 2012 à 14:03:10

Je n'ai pas vraiment d'explication, même si ça parait plutôt logique, tu enregistres un entier dans la variable "nb" mais tu lui donnes une valeur qui n'est pas un entier "%d\n" puisqu'il y a un retour à la ligne...
Le 2 février 2012 à 14:40:01

Yep enfin ça marche donc merci ;-)
Le 2 février 2012 à 16:08:12

scanf doit tenter de lire un caractère après le dernier à lire puis le remet dans la chaine. Comme il doit lire un '\n', il attend un autre caractère et se met à attendre. Quand tu appuies à nouveau sur '\n', ça débloque scanf, ce qui te permet de mettre le suivant.

calcul d'une moyenne

× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
  • Editeur
  • Markdown