有理数基本运算
1.抽象数据结构
ADT Rational{
数据对象:D={e1,e2 | e1,e2属于ElemType类型}
数据关系:R={<e1,e2>} //e1为分子,e2为分母
基本操作:
InitRational(*T, v1, v2);//构造有理数T,元素e1,e2分别被赋以分子、分母值
DestroyRational(*T);//销毁有理数T
Get(*T, i, e);//用e(引用类型参数)返回有理数T的分子或分母,当入参i为1时返回分子, i为2是返回分母
Put(*T, i, e);//将有理数T的分子或分母更改为e,入参i为1时改变分子, i为2是改变分母
yuefen*T);//约分得最简分数
add(*T1, *T2, *T3);//有理数T1,T2相加,结果存入有理数T3
jian(*T1, *T2, *T3);//有理数T1,T2相减,结果存入有理数T3
cheng(*T1, *T2, *T3);//有理数T1,T2相乘,结果存入有理数T3
chu(*T1, *T2, *T3);//有理数T1,T2相除,结果存入有理数T3
}ADT Rational
2.数据结构、函数说明
3.代码实现说明
- 主函数:
- 构造有理数:
- 销毁有理数:
- 约分:
- 相加:
- 相减:
- 相乘:
- 相除:
- 返回分子,分母:
- 更改分子,分母:
4.结果展示
- 测试数据
- 分母为非正数时
- 负有理数
- 有一个有理数为0时(自定义:如果结果为零,分子和分母都为零)
- 两个相同且不是最简的有理数
- 修改,返回,输入数据,以最后的有理数T3为例,e的初值设为5,先改变T3分母,如红色框;再返回T3当前的分母,如蓝色框;
5.代码互评
- 志坚的代码(头文件与构造有理数的函数):
- 我的代码:
不同之处:
1.从头文件中可以看出,我和他使用的数据类型不一样,我使用的是结构体表示有理数,而他是用数组;
2.对于构造有理数, 他用到了动态申请空间,由InitRational分配储存空间,比较节省空间效率,是一大优点,而我是直接使用结构体表示;
3.从变量名的命名上,我们都使用了typedef来重新命名,函数风格上,我们都是无返回值的类型,只是形参有不一样,我大多使用指针,而他用变量名;但是函数中他使用了更多的c++语法,所以整体上比我的好得多。
6.总结
- 了解了抽象数据结构的用法,还有三元组的形式,接触到了一些c++语法,比如cin,cout,&等等的用法,还有就是复习了一些c语言的知识,比如函数,指针,结构体,数组等的应用。
- 但是没学到的东西还是很多,很多知识都是一知半解,弄不透彻,所以做起题目很蒙,不知道该从何入手,比如用三元组,函数调用时,函数的形参到底是要怎么表示,什么类型。