博客作业01-抽象数据类型
1.作业内容
ADT Rational{
数据对象:D={a1,a2,b1,b2| a1,a2,b1,b2属于ElemType类型}
数据关系:R={<a1,a2>,<b1,b2>|a1是第一个有理数的分子,a2是第一个有理数的分母,b1是第二个有理数的分子,b2是第二个有理数的分母}
基本操作:
InitRational(&r,nume,deno);初始化有理数
DestroyRational(&r);销毁有理数
gcd(m,n);求最大公因数
Add(n1,n2,&n3);有理数相加
Sub(n1,n2,&n3);有理数相减
Mul(n1,n2,&n3);有理数的乘法
Div(n1,n2,&n3);有理数的除法
}ADT Rational
2.数据结构、函数说明
3.代码实现说明
构造有理数
做法:动态申请内存,把分子分母分别存入数组r中
销毁有理数
做法:释放空间
求最大公因数
做法:辗转相除法,先保证m和n为正数,然后用r做中间值,r为m和n的余数,m换为n,n换为r,直到r等于0,此时n为最大公因数
相加
做法:申请动态内存给n3,n1的分子乘以n2的分母加上n1的分母乘以n2的分子赋值给n3的分子,n1的分母乘以n2的分母赋值给n3的分母,最后除以最大公因数
相减
做法:申请动态内存给n3,n1的分子乘以n2的分母减去n1的分母乘以n2的分子赋值给n3的分子,n1的分母乘以n2的分母赋值给n3的分母,最后除以最大公因数
相乘
做法:申请动态内存给n3,n1的分子乘以n2的分子赋值给n3的分子,n1的分母乘以n2的分母赋值给n3的分母,最后除以最大公因数
相除
做法:申请动态内存给n3,n1的分子乘以n2的分母赋值给n3的分子,n1的分母乘以n2的分子赋值给n3的分母,最后除以最大公因数
4.代码互评
梁志湖的找最大公因数代码
我的找最大公因数代码
我与梁志湖同学的方法原理都是辗转相除,但是志湖同学定义的变量过多,并且在辗转相除部分的方法没有直接赋值再求余直观。
5.结果展示
(含负数,有和为0)
(非法数据:分母为0)
6.总结
本周的博客作业运用了有理数四则运算的基本知识和抽象数据类型的概念,程序设计过程应该首先明确程序的基本模块,然后根据需要添加完善程序功能。