实现一个用分子分母的格式来表示有理数的结构体rational
以及相关的函数,rational
结构体之间可以做加减乘除运算,运算的结果仍然是rational
。测试代码如下:
#include <stdio.h>
unsigned int gcd(unsigned int a, unsigned int b);
struct Rational {
int ele;
unsigned int den;
};
struct Rational make_rational(int ele, unsigned int den)
{
struct Rational z;
z.ele = ele;
z.den = den;
return z;
}
void print_rational(struct Rational a)
{
if (0 == a.ele)
{
printf("0\n");
} else {
printf("%d/%d\n", a.ele, a.den);
}
}
struct Rational add_rational(struct Rational a, struct Rational b)
{
int gcdnumber;
struct Rational z;
gcdnumber = gcd(a.den, b.den);
z.ele = a.ele * b.den + b.ele * a.den;
z.den = b.den * a.den;
return z;
}
struct Rational sub_rational(struct Rational a, struct Rational b)
{
int gcdnumber;
struct Rational z;
gcdnumber = gcd(a.den, b.den);
z.ele = a.ele * b.den - b.ele * a.den;
z.den = b.den * a.den;
return z;
}
struct Rational mul_rational(struct Rational a, struct Rational b)
{
int gcdnumber;
struct Rational z;
gcdnumber = gcd(a.den, b.den);
z.ele = a.ele * b.ele;
z.den = a.den * b.den;
return z;
}
struct Rational div_rational(struct Rational a, struct Rational b)
{
int gcdnumber;
struct Rational z;
gcdnumber = gcd(a.den, b.den);
z.ele = a.ele * b.den;
return z;
}
unsigned int gcd(unsigned int a, unsigned int b)
{
int r;
while (b > 0)
{
r = a%b;
a = b;
b = r;
}
return a;
}
int main(void)
{
struct Rational a = make_rational(1, 7);
struct Rational b = make_rational(-1, 16);
print_rational(add_rational(a, b));
print_rational(sub_rational(a, b));
print_rational(mul_rational(a, b));
print_rational(div_rational(a, b));
return 0;
}