C语言分数运算的一点小错误

来源:百度知道 编辑:UC知道 时间:2024/07/08 04:39:39
#include<stdio.h>
#include<stdlib.h>
main()
{
int a,b,c,d,i,x,y;
char op;
scanf("%d/%d %c %d/%d",&b,&a,&op,&d,&c);
if(a==0||c==0) exit(0);
if(op=='+'){y=b*c+d*a;x=a*c;}
if(op=='-'){y=b*c-d*a,x=a*c;}
if(op=='*'){y=b*d;x=a*c;}
if(op=='/'){y=b*c;x=a*d;}
if(y==0&&x!=0) { printf("%d/%d %c %d/%d = 0\n",b,a,op,d,c); }
if(x==0) exit(0);
if(x>y) i=y;
while(i>1)
{
if(x%i==0&&y%i==0){x=x/i;y=y/i;continue;}
i--;
}
if(x/i==1) printf("%d/%d %c %d/%d = %d\n",b,a,op,d,c,y);
else printf("%d/%d %c %d/%d = %d/%d\n",b,a,op,d,c,y,x);
getch();
}

这是代码 但输入1/3 - 1/3的时候无结果输出 求正确的改动~~
输出是无结果 如果改floatd if(x%i==0&&y%i==0){x=x/i;y=y/i;continue;} 非法实用浮点数了

改好了,
错误1
if(y==0&&x!=0) { printf("%d/%d %c %d/%d = 0\n",b,a,op,d,c); }
y==0 之后应该推出程序

错误2
if(x>y) i=y;
应该是 if(x>y) i=y; else i=x;

错误3
{x=x/i;y=y/i;continue;}
找到 最大公约数 应该 break;

错误4
if(x/i==1)
应该是当 x==1 时

下面是正确程序

#include<stdio.h>
#include<stdlib.h>
void main()
{
int a,b,c,d,i,x,y;
char op;
scanf("%d/%d %c %d/%d",&b,&a,&op,&d,&c);
if(a==0||c==0) exit(0);
if(op=='+'){y=b*c+d*a;x=a*c;}
if(op=='-'){y=b*c-d*a,x=a*c;}
if(op=='*'){y=b*d;x=a*c;}
if(op=='/'){y=b*c;x=a*d;}
if(y==0&&x!=0)
{
printf("%d/%d %c %d/%d = 0\n",b,a,op,d,c);
exit(1);
}
if(x==0) exit(0);
if(x>y) i=y; else i=x;
while(i>1)
{
if(x%i==0&&y%i==0){x=x/i;y=y/i;break;}
i--;
}
if(x==