Programme moyen, max et min en C

Donc, je code en C, et je dois trouver un code qui prendra n nombres de l’utilisateur, et trouvera leur nombre minimal, maximum, moyen et sum de carrés pour leurs valeurs. Jusqu’ici, j’ai la partie moyenne et la sum des carrés, mais le minimum et le maximum me mordent.

Gardez à l’esprit que je suis à un niveau très rudimentaire et que je n’ai pas encore atteint les tableaux. Tout ce que je sais, ce sont des opérateurs logiques, des fonctions, des boucles et l’utilisation des bibliothèques stdlib.h, math.h et stdio.h.

C’est ce que j’ai jusqu’ici. La fonction moyenne m’a donné beaucoup de problèmes lorsque j’ai essayé de mettre float et double lors de la compilation, donc multipliez-le par un 1.0 corrigé. J’ai tout, juste le minimum et le maximum. Je continue à obtenir la dernière entrée au maximum et un 0 au minimum.

#include int main() { float average; int i, n, count=0, sum=0, squaresum=0, num, min, max; printf("Please enter the number of numbers you wish to evaluate\n"); scanf_s("%d",&n); printf("Please enter %d numbers\n",n); while(countmax) max=num; if(num<min) min=num; scanf_s("%d",&num); sum = sum+num; squaresum = squaresum + (num*num); count++; } average = 1.0*sum/n; printf("Your average is %.2f\n",average); printf("The sum of your squares is %d\n",squaresum); printf("Your maximum number is %d\n",max); printf("Your minimum number is %d\n",min); return(0); } 

Votre algorithme n’est pas tout à fait correct. Ci-dessous, la bonne implémentation:

 #include  #include  #include  int main(void) { float average; int n, num, count = 0, sum = 0, squaresum = 0; int min = INT_MAX, max = INT_MIN; bool gotAnswer = false; /* Don't Let User Enter Wrong Input */ while(!gotAnswer) { printf("Please enter the number of numbers you wish to evaluate: "); if(scanf_s("%d", &n) != 1) { /* User Entered Wrong Input; Clean Up stdin Stream*/ while(getchar() != '\n') { continue; } } else { /* User Input Was Good */ gotAnswer = true; } } /* Clear stdin Stream Just In Case */ while(getchar() != '\n') continue; while(count < n) { /* Don't Let User Enter Wrong Input */ gotAnswer = false; printf("Enter number %d: ", count + 1); if(scanf_s("%d", &num) != 1) { /* User Entered Wrong Input; Clean Up stdin Stream */ while(getchar() != '\n') continue; /* Let User Try Again */ continue; } else { /* User Input Was Correct */ gotAnswer = true; /* Clear stdin Stream Just In Case */ while(getchar() != '\n') continue; } if(num > max) max = num; if(num < min) min = num; sum += num; squaresum += num * num; count++; } average = 1.0 * sum / n; printf("Your average is %.2f\n", average); printf("The sum of your squares is %d\n", squaresum); printf("Your maximum number is %d\n", max); printf("Your minimum number is %d\n", min); system("pause"); return 0; } 

J'ai ajouté la vérification des erreurs et la récupération. S'il vous plaît demander si vous avez des questions sur la logique.

Dans l’écriture actuelle du code, min doit commencer à une valeur élevée (et non 0), sinon le code ne fonctionnera pas. La meilleure valeur à choisir est la valeur maximale possible pour un int .

Vous devez également déterminer si vous souhaitez ou non réinitialiser ces variables à chaque fois dans la boucle.

Entrez le premier num dehors de la boucle et atsortingbuez-le à max min

 scanf("%d",&num); max = min = num; 

Changez votre boucle while en boucle infinie

 while(1) {...} 

et maintenant vérifier si le count compteurs égal à n est égal ou non à la boucle infinie

 if(count == n) break; 

Code complet après modification:

 #include int main() { float average; int i, n, count=0, sum=0, squaresum=0, num, min, max; printf("Please enter the number of numbers you wish to evaluate\n"); scanf_s("%d",&n); printf("Please enter %d numbers\n",n); scanf_s("%d",&num); max = min = num; while(1) { if(num>max) max=num; if(num 

Supposons que votre premier numéro dans la liste soit le minimum et le maximum. Comparez chaque caractère suivant avec le minimum actuel et le maximum actuel et mettez à jour en conséquence.

votre boucle while devrait ressembler à

  min=3; max=0; while(countmax) max=num; if(num 

Et je suis d'accord avec Robert Harvey ♦ .. Vous devez définir min

Ajouter un booléen, déplacé en donnant les valeurs min, max 0 sont le début de la boucle

 #include int main() { float average; int i, n, count=0, sum=0, squaresum=0, num, min, max; bool first = true; printf("Please enter the number of numbers you wish to evaluate\n"); scanf_s("%d",&n); printf("Please enter %d numbers\n",n); min=0; max=0; while(countmax) max=num; if(num 

Devrait également envisager de vérifier la valeur de retour de scanf

Il y a quelques problèmes dans votre code:

  1. num est lu ? Vous devriez le faire avant min et max
  2. Lorsque la boucle s’exécute pour la première fois, vous devez simplement affecter num à max et min .

Quelque chose comme ca:

  int min = 0; int max = 0; // If your comstackr supports C99 standard you can put // bool first_time = true; int first_time = 1; while (count < n) { printf("Please, enter the next number\n"); scanf_s("%d", &num); // If your compiler supports C99 you can put it easier: // if (first_time) { if (first_time == 1) { first_time = 0; max = num; min = num; } else { if(num > max) max = num; if(num < min) min = num; } ...