2、实现一个用分子分母的格式来表示有理数的结构体rational以及相关的函数,rational结构体之间可以做加减乘除运算,运算的结果仍然是rational。测试代码如下:
int main(void)
{
struct rational a = make_rational(1, 8); /* a=1/8 */
struct rational b = make_rational(-1, 8); /* b=-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;
}
注意要约分为最简分数,例如1/8和-1/8相减的打印结果应该是1/4而不是2/8,可以利用第 3 节 “递归”练习题中的Euclid算法来约分。在动手编程之前先思考一下这个问题实现了什么样的数据抽象,抽象层应该由哪些函数组成。
转载请注明源地址:http://blog.youkuaiyun.com/whorus1/article/list/2,谢谢!
#include <stdio.h>
#include <math.h>
struct rational { int x,y; } z,z1,z2;
/*********求分子分母的最大公约数用来化简分数****************/
int gcd ( int a,int b )
{
int c=a%b;
while ( c!=0 )
{
a=b;
b=c;
c=a%b;
}
return b;
}
/***************打印该分数*******************************/
int rational_P ( struct rational z )
{
int a,b;
a=z.x/gcd(z.x,z.y);
b=z.y/gcd(z.x,z.y);
if ( a==0 )
printf ( "0\n" );
else if ( b==0 )
printf ( "error!!!\n" );
else if ( a==b )
printf ( "1\n" );
else
printf ("%d/%d\n",a,b);
return 0;
}
/********************加********************************/
struct rational add_rational ( struct rational z1,struct rational z2 )
{
z.x=z1.x*z2.y+z2.x*z1.y;
z.y=z1.y*z2.y;
return z;
}
/********************减********************************/
struct rational sub_rational ( struct rational z1,struct rational z2 )
{
z.x=z1.x*z2.y-z2.x*z1.y;
z.y=z1.y*z2.y;
return z;
}
/********************乘********************************/
struct rational mul_rational ( struct rational z1,struct rational z2 )
{
z.x=z1.x*z2.x;
z.y=z1.y*z2.y;
return z;
}
/********************除********************************/
struct rational div_rational ( struct rational z1,struct rational z2 )
{
z.x=z1.x*z1.y;
z.y=z1.y*z2.x;
return z;
}
int main ()
{
int a,b,c,d;
scanf ( "%d%d%d%d",&a,&b,&c,&d );
z1.x=a;
z1.y=b;
z2.x=c;
z2.y=d;
printf ( "z1=" );
rational_P (z1);
printf ( "z2=" );
rational_P (z2);
printf ( "z1+z2=" );
rational_P ( add_rational( z1,z2 ) );
printf ( "z1-z2=" );
rational_P ( sub_rational( z1,z2 ) );
printf ( "z1*z2=" );
rational_P ( mul_rational( z1,z2 ) );
printf ( "z1/z2=" );
rational_P ( div_rational( z1,z2 ) );
return 0;
}
本文介绍了一个使用结构体表示有理数的程序,并实现了基本的数学运算,包括加、减、乘、除。通过定义rational结构体并提供相应的操作函数,实现了有理数的简化与运算。此外,还提供了测试代码示例。
1687

被折叠的 条评论
为什么被折叠?



