代码如下 供参考
#include <stdio.h>struct Fraction
{
int a,b,s
}
struct Fraction Add(struct Fraction x,struct Fraction y)
struct Fraction Sub(struct Fraction x,struct Fraction y)
int gcd(int a, int b)
{
while (a != b)
{
if (a > b)
{
a -= b
}
else
{
b -= a
}
}
return a
}
void mini(struct Fraction * a)
{
int g
if(a->a == 0)
{
a->b = 1
return
}
g = gcd(a->a, a->b)
a->a/=g
a->b/=g
}
struct Fraction Add(struct Fraction x,struct Fraction y)
{
struct Fraction r
if(x.s!=y.s)
{
if(x.s == 1)
{
y.s = 1
return Sub(x, y)
}
else
{
x.s = 1
return Sub(y, x)
}
}
r.s = x.s
r.b = x.b*y.b
r.a = x.a*y.b + x.b*y.a
mini(&r)
return r
}
struct Fraction Sub(struct Fraction x,struct Fraction y)
{
struct Fraction r
if(x.s != y.s)
{
if(x.s == 1)
{
y.s = 1
return Add(x, y)
}
else
{
x.s = 1
r = Add(x, y)
r.s = -1
return r
}
}
r.s = x.s
r.b = x.b*y.b
r.a = x.a*y.b - x.b*y.a
if(r.a < 0)
{
r.s *= -1
r.a *= -1
}
mini(&r)
return r
}
void Display(struct Fraction a)
{
if(a.s == 1) printf("+")
else printf("-")
printf("%d/%d\n", a.a, a.b)
}
int main()
{
struct Fraction Add(struct Fraction x,struct Fraction y)
struct Fraction Sub(struct Fraction x,struct Fraction y)
struct Fraction f1={1,2,1},f2={3,4,1},f3
f3=Add(f1,f2)
printf("\n两个分数相加的结果为:")Display(f3)
f3=Sub(f1,f2)
printf("\n两个分数相减的结果为:")Display(f3)
return 0
}
#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*ax=a*c}
if(op=='-'){y=b*c-d*a,x=a*c}
if(op=='*'){y=b*dx=a*c}
if(op=='/'){y=b*cx=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/iy=y/icontinue}
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)
//不明白你后面这里为什么会多出两个花括号。
//由于百度上不能空行,我也不猜测错误原因。你自己理解下。
}
//程序运行无误