C语言输入三个数字比大小

我刚开始学编成,写了个好像不太正常的程序,谁能帮我指出下问题出在哪里啊?。。。谢谢哈。。。。
#include<stdio.h>
int main()
{
printf("input three number:\n");
int a,b,c,min,max,mid;
ps:我这个程序看不懂,谁能帮我解释下哈,谢谢啦。
#include<stdio.h>
int main()
{
int a,b,c,min,max,mid;
scanf("%d%d%d",&a,&b,&c);
min=a<b&&a<c?a:(b<c?b:c);
max=a>b&&a>c?a:(b>c?b:c);
mid=a+b+c-min-max;
printf("min to max: %d %d %d\n",min,mid,max);
return 0;
}

scanf("%d%d%d",&a,&b,&c);
if(a<b && a<c);
min=a;
if(b<a && b<c);
min=b;
if(c<a && c<b);
min=c;
if(a>b && a>c);
max=a;
if(b>a && b<c);
max=b;
if(c>a && c>b);
max=c;
mid=a+b+c-min-max;
printf("min to max: %d %d %d\n",min,mid,max);
return 0;
}

min=a<b&&a<c?a:(b<c?b:c);
三目运算是自右向左的,所以先判断b<c,为真返回b(b比c小),否则就返回c(c比b小).再判断a<b和a<c,如果都为真返回a(此时a是最小值,因为a比b,c都小),否则返回b<c?b:c的值,该值是最小值,因为a不是最小值,所以b和c中较小的值即为最小值

而你的程序中有两种错误
if(b>a && b<c);
max=b;

判断语句后面加了";",则max=b是一定运行的(其他的都一样),也就是说最后结果是min和max都是c,而mid则为a,b,c总和减去两个c的值.

还有一个错误是b>a&&b<c表示的是b为中间值,而非最大值.应该改为b>a && b>c

正确格式应该是:
if(b>a && b>c)
max=b;
注意其他的判断语句后面的";"也都要去除

PS:
qxf19871029的回答举例中有个错误:

if(max<c) max=c,mid=max;
//因为分号前的那个max值已经变为c了
else if(min>c) min=c,mid=min;
//同上

应该改为:
if(max<c) mid=max,max=c;
else if(min>c) mid=min,min=c;
温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-01-15

#include <stdio.h>

void swep(int *a,int *b,int *c)

{

int tmp;

    if(*a>*b)

{

tmp=*a;

*a=*b;

*b=tmp;

}

if(*a>*c)

{

tmp=*a;

*a=*c;

*c=tmp;

}

if(*b>*c)

{

tmp=*b;

    *b=*c;

*c=tmp;

}

}

void main()

{

int a,b,c;

scanf("%d%d%d",&a,&b,&c);

swep(&a,&b,&c);

printf("%4d%4d%4d",a,b,c);

}

第2个回答  2019-11-27
好久都没碰过c语言了。。。除非你输入的最后一个数是最小的,否则一直你的max会一直都输出的是最后一个数字
if(z>x,z>y)只要满足一个条件,就会执行
a=z
你是要同时满足两个条件,所以必须要加上and
也就是要写成if(z>x&&z>y)
上面的也要这么改
第3个回答  2020-01-21
请看错误旁边注释:
#include
int
main()
{
printf("input
a,b,c\n");
int
a,b,c,max;
//scanf默认是以回国换行来分隔输入的,以下三行直接改成scanf("%d
%d
%d",
&a,
&b,
&c);,输入时数字与数字间用空格或者tab分隔
scanf(“%d\n",&a);
scanf("%d\n",&b);
scanf("%d\n",&c);
if(a
>=
b){
max
=
a;
if(c
>=a){
max
=
c;
}else{
max
=
a;
}
}else{
if(c
>
b){//引处改为c>=b
max
=
c;
}else{
max
=
b;
}
}
printf("the
max
is
%d",max);
}
第4个回答  2008-03-25
自己写的代码,然后说看不懂....

min=a<b&&a<c?a:(b<c?b:c);
//a<b&&a<c 表示a是否最小,如果是返回a,如果不是返回(b<c?b:c),此时b<c的话,返回b,否则就返回c
//所以最终返回的是最小值

max=a>b&&a>c?a:(b>c?b:c);
//理解同上!!返回的是最大值

mid=a+b+c-min-max;
//三值的和减去最大最小值,剩下的就是居中的值,所以....