C语言中的分数四则运算

题目:在小学时我们就学习了分数的四则运算,即对两个分数进行加、减、乘、除等运算,现在我们尝试下用C语言来实现。
输入: 分数1 操作符 分数2
输出: 计算结果
要求:计算结果使用分数表示,并且为最简化。例如结果为2/6,则被简化为1/3。
拜托帮忙看看我编的程序哪儿有错误?急急急!!!谢谢了!
#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); }
else {if(x==0) exit(0);
else { 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);}}
}

#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); }
else if(x==0) exit(0);
//你的这里怎么可以再用一个ELSE呢,条件已经变化了。后面跟前面没有联系啊
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);
//不明白你后面这里为什么会多出两个花括号。
//由于百度上不能空行,我也不猜测错误原因。你自己理解下。
}
//程序运行无误
温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-07-08
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
void operation()
{
int a,b,c,d;
int x,y;
int i,j,t;
char ch; 
printf("-------欢迎进入分数四则运算的操作界面-------\n\n");
printf("请输入第一个分数的分子:"); 
scanf("%d",&b);
printf("请输入第一个分数的分母: ");
scanf("%d",&a);
if(!a)
{
printf("Error,分母不能为0!\n");
exit(0);
}
printf("请输入第二个分数的分子:");
scanf("%d",&d);
printf("请输入第二个分数的分母:");
scanf("%d",&c);
if(!c)
{
printf("Error,分母不能为0!\n");
exit(0);
}

getchar();
printf("请输入运算符号[ + - * / ]: ");
scanf("%c",&ch);
switch(ch)
{
case'+': x=a*c; y=b*c+a*d; break;
case'-': x=a*c; y=b*c-a*d; break;
case'*': x=a*c; y=b*d; break;
case'/': x=a*d; y=b*c; break;
default: printf("Error,不存在该运算符号!\n"); exit(0);
}
printf("通分后的分母是%d,分子是%d\n",x,y);

x>=y?(i=x,j=y):(i=y,j=x);
/*辗转相除法(欧几里德算法)*/
    t=i%j;
    while(t)  
{
i=j;
j=t;
t=i%j;
}
/*更相减损术 */
    /*t=i-j;
while(t)
{
i=j;
j=t;
t=abs(i-j);
if(t==j)
break;
}*/

       if(y/x>=0)
{
x/=j;
     y/=j;
}
else
{
x=abs(x/j);
y=-abs(y/j);
}
        printf("运算结果如下:\n");
if(y%x==0)
printf("%d/%d %c %d/%d = %d\n",b,a,ch,d,c,y/x);
else
printf("%d/%d %c %d/%d =%d/%d\n",b,a,ch,d,c,y,x);
}

void main()
{
operation();
 } 
//转载于微信公众号:会说话的青鸟,这上面有详细的讲解,没看懂可以去那参考一下哦
第2个回答  2009-03-16
if(x/i==1) printf("%d/%d%c%d/%d=%d\n",b,a,op,d,c,y);
x/i不都是1么

if(y==1) printf("%d/%d%c%d/%d=%d\n",b,a,op,d,c,y);
第3个回答  2009-03-16
i 有可能未初始化

if(x>y) i=y;
else i=x;