2014-06-12 7 views
-1

Eh bien, il est un problème de trouver le plus grand et le plus petit nombre dans un groupe de chiffres, mais nous ne savons pas combien de numéros l'utilisateur wants-Trouver le plus grand et le plus petit nombre en utilisant les entrées utilisateur

Jusqu'à présent, c'est ce que je l'ai fait:

#include <stdio.h> 
#include <conio.h> 
int main() 
{ 

int num; 
int i; 
int maxi=0; 
int minim=0; 
int cont = 0; 

printf ("\nQuantity of numbers?: "); 
scanf ("%d", &num); 
while (num>0) 
    { 
    printf ("\nEnter number:"); 
    scanf ("%d", &i); 
    if (num>i) 
     minim=i++; 

    else 
     if (i>num) 
      max=i++; 
      cont++; 
} 

printf ("\nBiggest number is es: %d", maxi); 
printf ("\nSmallest number is: %d", minim); 
getch(); 
return 0; 
} 

J'ai fait mon programme pour demander combien de numéros que l'utilisateur voudra mettre et je fait le programme pour les lire, mais quand il lit les plus grands ou/et plus petit nombre, il sera parfois des changements plus grand avec petit et il ne lira pas les nombres négatifs.

Comment faire pour améliorer mon programme?

+0

C'est un peu efficace, mais ça ne me donne pas le plus grand nombre et le plus petit nombre de fois, ça les gâche. J'ai du mal à trouver ma sortie, mais je ne sais pas exactement où. –

+1

Pourquoi comparer avec 'num' - le nombre d'entrées? Vous devriez comparer l'entrée avec 'mini' et' maxi' (et vous voudrez peut-être régler 'mini' sur une grande valeur). – usr2564301

+0

quelle valeur recommanderiez-vous pour 'mini'? –

Répondre

0

Vous comparez avec les valeurs erronées.

do 
{ 
    printf("Enter a number.\n"); 
    scanf("%i", &input); 
    if min > input 
    min = input 
    if max < input 
    max = input 
} while (input > 0); 
+0

Ne peut pas utiliser' do' mais fait quelque chose et cela fonctionne. Le seul problème est quand il lit les nombres négatifs, il imprime le plus petit négatif négatif, mais il imprime 2 comme le plus grand nombre même si je n'ai entré que des négatifs. –

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

int main(){ 
    int num; 
    int i; 
    int maxi=0; 
    int minim=INT_MAX; 
    int cont = 0; 

    printf ("\nQuantity of numbers?: "); 
    scanf("%d", &num); 
    if(num > 0){ 
     while (num>0){ 
      printf ("\nEnter number:"); 
      if(scanf("%d", &i) == 1 && !(i<0)){ 
       if(minim > i) 
        minim = i; 
       if (maxi < i) 
        maxi = i; 
       ++cont; 
       --num; 
      } else { 
       //fprintf(stderr, "redo input!\n") 
       ; 
      } 
      scanf("%*[^\n]%*c"); 
     } 

     printf ("\nBiggest number is : %d", maxi); 
     printf ("\nSmallest number is : %d\n", minim); 
    } 
    getch(); 
    return 0; 
} 
0

Vous devez initialiser mini le plus grand int possible, à savoir INT_MAX et maxi au plus petit int possible, à savoir INT_MIN. De cette façon, même si le premier nombre est négatif, il sera considéré pour maxi, et si le premier nombre est positif, il sera toujours considéré pour mini. Les constantes INT_MAX et INT_MIN sont incluses dans <climits> ou <limits.h>.

De plus, vous comparez le nombre entré actuellement avec num, qui est le compteur des nombres saisis par l'utilisateur, et non une des valeurs qu'il souhaite comparer. Un meilleur code modifié serait:

#include<limits.h> 
#include<stdio.h> 
int main() 
{ 

    int num; 
    int maxi=INT_MIN;  //initialize max value 
    int mini=INT_MAX;  //initialize min value 
    int temp; 
    scanf("%d", &num); //take in number of numbers 

    while(num--)   //loop "num" times, num decrements once each iteration of loop 
    { 

     scanf("%d", &temp); //Take in new number 
     if(temp>maxi)   //see if it is new maximum 
      maxi=temp;  //set to new maximum 
     if(temp<mini)   //see if new minimum 
      mini=temp;  //set to new minimum 
    } 
    printf("\nMaxi is:\t%d\nMini is:\t%d\n", maxi, mini); //print answer 
    return 0; 
} 
Questions connexes