C语言初学者-----懂的进来帮我一把

来源:百度知道 编辑:UC知道 时间:2024/05/30 10:34:40
以下是我要求键盘输入三个数,然后按从大到小的顺序输出的程序,但不知道错在哪,请各位高手大哥大姐帮帮忙!谢了

#include<stdio.h>
void main()
{
int a,b,c;da,zhong,xiao;
scanf("%d,%d,%d",&a,&b,&c);
if(a>b)
{zhong=a;
xiao=b;}
else
{zhong=b;
xiao=a;}
if(c>zhong)
da=c;
else
{if(xiao>c)
zhong=xiao;
xiao=c;}
printf("%d%d%d",da,zhong,xiao);
}

{if(xiao>c)
zhong=xiao;
xiao=c;}
这里不对,假定a=6 b=8 c=2
运行到if处时,xiao=6 zhong=8,
运行完后,zhong=6 xiao=2,但da还是初始值,即da可能是0或任意值

可改为
#include<stdio.h>
void main()
{
int a,b,c,temp;
scanf("%d,%d,%d",&a,&b,&c);
if(a>=b)
{temp=a;
a=b;
b=temp;}

if(c<=a)
printf("%d%d%d",c,a,b);
else
{if (c<=b)
printf("%d%d%d",a,c,b);
else
printf("%d%d%d",a,b,c);}
}

int a,b,c;da,zhong,xiao;
c和da之间应该是逗号。
else
{if(xiao>c)
zhong=xiao;
xiao=c;}
走到这个分支的时候没有给da赋值。
应该是
else
{if(xiao>c)
da=zhong;
zhong=xiao;
xiao=c;}
而且还差c在a,b之间的情况。

你的逻辑思路还需要理清楚些
判断3个数并从大到小排列,应该先拿一个数与其他2个数比较,如果不是最大,则比较另外2个数,那2个数大的则是最大,如果是最大,那当然第一个数就是最大.这样的逻辑思路比较清晰,也更容易懂
最简单的是用一个条件表达式,一次搞定:
max = ((x>y)&&(x>z))?x:(y>z?y:z)
当然这是3个数的,