【问题标题】:Finding biggest and smallest numbers using user input使用用户输入查找最大和最小数字
【发布时间】:2014-08-03 09:58:48
【问题描述】:

嗯,在一组数字中找到最大和最小的数字是个问题,但我们不知道用户想要多少个数字-

到目前为止,这是我所做的:

#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;
}

我做了我的程序来询问用户想要输入多少数字,我让程序读取它们,但是当它读取最大或/和最小的数字时,它有时会随着小而变大,它不会读取负数。

如何让我的程序变得更好?

【问题讨论】:

  • 它有点工作,但大多数时候它并没有给我最大和最小的数字,它把它们弄乱了。所以我很难找到我的输出,但我不知道具体在哪里。
  • 为什么要和num比较——输入的数量?您应该将输入与minimaxi 进行比较(并且您可能希望将mini 设置为较大的值)。
  • 你会为mini推荐什么值?
  • 建议int maxi=INT_MIN; int minim=INT_MAX;

标签: c loops if-statement for-loop


【解决方案1】:

您正在与错误的值进行比较。

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

【讨论】:

  • Cant use do` 但是做了一些事情并且它有效。唯一的问题是当它读取负数时,它会打印最小的负数,但即使我只输入负数,它也会打印 2 作为最大数。
【解决方案2】:
#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;
}

【讨论】:

    【解决方案3】:

    您应该将mini 初始化为可能的最大整数,即INT_MAX,并将maxi 初始化为可能的最小整数,即INT_MIN。这样,即使第一个数字是负数,它也会被视为maxi,如果第一个数字是正数,它仍然会被视为mini。常量INT_MAXINT_MIN 包含在&lt;climits&gt;&lt;limits.h&gt; 中。

    此外,您正在将当前输入的数字与num 进行比较,num 是用户输入数字的计数器,而不是他想要比较的值之一。更好的修改代码是:

    #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;
    }
    

    【讨论】:

      猜你喜欢
      • 2016-03-08
      • 1970-01-01
      • 1970-01-01
      • 2016-07-24
      • 2020-03-07
      • 1970-01-01
      • 2016-03-03
      • 2017-06-05
      • 2016-06-13
      相关资源
      最近更新 更多