因为把比较分数的所有情况都考虑到,类似于穷举法,所以程序并不简短,但能够正确地比较出两个分数的大小。
两个分式输出分别为a/b和c/d,x和y是对应分子通分后的值。先判断分式是否有意义,若分母有存在为0的情况,就输出对应分式无意义并终止程序,不进行大小比较。
#include#include main() { int a,b,c,d,x,y; scanf("%d%dn%d%d",&a,&b,&c,&d); if(b==0&&d==0) {printf("%d/%d和%d/%d无意义",a,b,c,d); exit(0);} if(b==0) {printf("%d/%d无意义",a,b); exit(0);} if(d==0) {printf("%d/%d无意义",c,d); exit(0);}
分式存在无意义的情况已排除,在a/b为正数的情况下开始讨论:c/d同为正数,通分后判断两个新分子的大小。因为分式为正数有分子分母同号或分子分母异号的两种情况,所以可能会出现通分后新分子为负数的情况,将为负的情况转正数在进行大小比较,再留意输出的大于小于号即可。其他情况也适用
if(a>0&&b>0||a<0&&b<0)//在a/b为正数的情况下讨论
{
if(c>0&&d>0||c<0&&d<0)//*****************************
{x=a*d;y=b*c;
if(x<0)
x=-x;
if(y<0)
y=-y;
if(x>y)
printf("%d/%d>%d/%d",a,b,c,d);
if(x0&&d<0||c<0&&d>0)
printf("%d/%d>%d/%d",a,b,c,d);
if(c==0)
printf("%d/%d>%d/%d",a,b,c,d);
}
在a/b为负数的情况下讨论:思路同上。
if(a>0&&b<0||a<0&&b>0)//在a/b为负数的情况下讨论
{
if(c>0&&d>0||c<0&&d<0)
printf("%d/%d<%d/%d",a,b,c,d);
if(c>0&&d<0||c<0&&d>0)//*****************************
{x=a*d;y=b*c;
if(x<0)
x=-x;
if(y<0)
y=-y;
if(x>y)
printf("%d/%d<%d/%d",a,b,c,d);
if(x%d/%d",a,b,c,d);
if(x==y)
printf("%d/%d=%d/%d",a,b,c,d);}
if(c==0)
printf("%d/%d<%d/%d",a,b,c,d);
}
在a/b=0即a=0的情况下讨论:
if(a==0)
{
if(c>0&&d>0||c<0&&d<0)
printf("%d/%d<%d/%d",a,b,c,d);
if(c>0&&d<0||c<0&&d>0)
printf("%d/%d>%d/%d",a,b,c,d);
if(c==0)
printf("%d/%d=%d/%d",a,b,c,d);
}
return 0;
}



