代碼如下 供參考
#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;
}