合理的有理数实现 代码
星海
posted @ 2010年10月21日 03:57
in C代码
, 1699 阅读
/*
* ==========================================================================
*
* Filename: prac.c
*
* Description:
*
* Version: 1.0
* Created: 2010年10月20日 16时50分14秒
* Revision: none
* Compiler: gcc
*
==========================================================================
*/
#include <stdio.h>
#include <math.h>
int euclid(int a, int b)
{
if (a % b == 0)
return abs(b);
else
return euclid(b, a % b);
}
struct rational {
int x,y
} ;
struct rational add_rational (struct rational z1,struct rational z2)
{
struct rational z;
z.x = z1.x + z2.x;
z.y = z1.y + z2.y;
return z;
}
struct rational sub_rational (struct rational z1,struct rational z2)
{
struct rational z;
z.x = z1.x - z2.x;
z.y = z1.y - z2.y;
return z;
}
struct rational mul_rational (struct rational z1, struct rational z2)
{
struct rational z;
z.x = z1.x * z2.x;
z.y = z1.y * z2.y;
return z;
}
struct rational div_rational (struct rational z1, struct rational z2)
{
struct rational z;
z.x = z1.x / z2.x ;
z.y = z1.y / z2.y ;
return z;
}
struct rational make_rational (int a,int b)
{
struct rational z;
z.x = a;
z.y = b;
return z;
}
int print_rational (struct rational z)
{
if (z.y < 0) {
z.x = -z.x;
z.y = -z.y;
}
if (z.y == 0)
printf ("0 不能做除数\n");
else if (z.x % z.y == 0) //如果能被整除,则变为最简分数
printf ("%d\n", z.x/z.y);
else
{
int gcd= euclid( z.x,z.y);
z.x = z.x/gcd;
z.y = z.y/gcd;
printf ("%d/%d\n", z.x, z.y);
}
return 0;
}
int main(void)
{
struct rational a = make_rational(1, 8);
struct rational b = make_rational(-1, 8);
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;
}
2010年11月14日 04:21
写的不错……不过应该叫合理的坐标实现吧