c语言三个数排列大小
#include<stdio.h>
int main()
{
int a,b,c,dy,de,ds;
printf("输入三个数: ");
scanf("%d%d%d",&a,&b,&c);
if (a>b&&a>c)
dy=a;
if (b>a&&b>c)
dy=b;
if (c>a&&c>b)
dy=c;
if (a>b&&a<c||a>c&&a<b)
de=a;
if (b>a&&b<c||b>c&&b<a)
de=b;
if (c>a && c<b || c>b && c<a)
de=b;
if (a<b && a<c)
ds=a;
if (b<a && b<c)
ds=b;
if (c<a && c<b)
ds=c;
if (dy==de || dy==ds || de==ds)
printf("您输入了两个或三个一样的数. ");
else
printf("%d %d %d ",dy,de,ds);
return 0;
}
为什么输入两个一样的数,或者三个一样的数,不执行倒数第二个printf语句.
这是因为当a=b=c时,dy、de、ds在前面均没有赋值,他们的初值又没赋零,故实际上不相等,所以不执行 printf("您输入了两个或三个一样的数. ");
况且 if (dy==de || dy==ds || de==ds) 这个判断在逻辑上不对,不是dy=de=ds的判断!
解决方法:
1 将dy、de、ds的初值赋零 - 不提倡!
2 把 if (dy==de || dy==ds || de==ds) 及 printf("您输入了两个或三个一样的数. ");
改成 if (a==b && a==c) 及 printf("您输入了两个或三个一样的数. ");
最好移到最前面作判断!!