找到几个整数之间的最小值和最大值

时间:2014-01-11 18:19:15

标签: c

在Stackoverflow https://stackoverflow.com/a/19200031/3185410上在线查看此解决方案我尝试通过将max设置为-infinity并将min设置为+无穷大来提出另一种解决方案。  @haccks的代码非常合适。

#include <stdio.h>

int main()
{
int num, max, min;

printf ("Enter four numbers: ");
scanf ("%d", &num);
max = min = num;

for (int i = 0; i < 3; i++)
{ 
    scanf ("%d", &num);
    if (max < num)
        max = num;
    else if (min > num)
        min = num;
}

printf ("\n%d %d", max, min);
return 0;
}

这是我提出的那个:

#include <stdio.h>
#include <limits.h>
void main()
{
int max,min,num,i;
min=INT_MAX;
max=INT_MIN;
for (i=0;i<=3;)
{
    i++;
    printf("Enter number %d : ",i);
    scanf("%d",&num);
    if (num>max) max=num;
    else if (num<min) min=num;
}
printf("max is %d and min is %d",max,min);
}

我做错了什么?

2 个答案:

答案 0 :(得分:3)

如果用户输入5然后输入6,则:

表示5: 5&gt; -inf =&gt; max = 5

代表6: 6> 5 =&gt;最大= 6 但是min已经变成了5,但它仍然是INT_MAX。

如果你放if而不是else if,你的表现会有所下降但我认为输出正确(我现在无法测试)。

答案 1 :(得分:0)

将第一个输入设置为最小值和最大值。然后添加你写的逻辑。这里有2行额外的代码,但你不必牺牲性能。

#include <stdio.h>
#include <limits.h>
void main()
{
int max,min,num,i=0;
min=INT_MAX;
max=INT_MIN;
printf("Enter number %d : ",i+1);
scanf("%d",&num);
min=num;
max=num;
for (i=1;i<=3;)
{
    i++;
    printf("Enter number %d : ",i);
    scanf("%d",&num);
    if (num>max) max=num;
    else if (num<min) min=num;
}
printf("max is %d and min is %d",max,min);
}