完整的C程序:
#include?"stdio.h"
/*?分數結構?*/
typedef?struct
{
int?numerator; /*?分子?*/
int?denominator; /*?分母?*/
}?Fraction;
int?GCD(int?a,int?b);
int?LCM(int?a,int?b);
Fraction?Add(Fraction?f1,?Fraction?f2);
void?main()
{
Fraction?f1,?f2,?f3;
f1.numerator?=?1;
f1.denominator?=?3;
f2.numerator?=?1;
f2.denominator?=?6;
f3?=?Add(f1,?f2);
printf("%d/%d?+?%d/%d?=?%d/%d\n",?f1.numerator,?f1.denominator,?f2.numerator,?f2.denominator,?f3.numerator,?f3.denominator);
}
/*?返回兩個分數相加的結果?*/
Fraction?Add(Fraction?f1,?Fraction?f2)
{
Fraction?retValue;
int?lcm?=?LCM(f1.denominator,?f2.denominator); /*?計算最小公倍數?*/
int?gcd;
retValue.denominator?=?lcm;
retValue.numerator?=?f1.numerator?*?lcm?/?f1.denominator?+?f2.numerator?*?lcm?/?f2.denominator;
gcd?=?GCD(retValue.numerator,?retValue.denominator);
retValue.numerator?/=?gcd;
retValue.denominator?/=?gcd;
return?retValue;
}
/*?返回兩個整數的最大公約數?*/
int?GCD(int?a,int?b)
{
int?i,temp_gcd;
for(i=a;i>=1;i--)
{
if(a%i==0)
{
if(b%i==0)
{
temp_gcd=i;
return?temp_gcd;
}
}
}
}
/*?返回兩個整數的最小公倍數?*/
int?LCM(int?a,int?b)
{
int?temp_lcm;
temp_lcm?=?a?*?b?/?GCD(a,b);
return?temp_lcm;
}
運行測試: