有理数基本运算
1.作业内容
用ADT的抽象数据模型描述你的有理数数据类型
ADT Rational{
数据对象:
D={ e1, e2 | e1,e2属于int类型} //int是类型标识符
数据关系:
R={ <e1,e2> } //e1为有理数的分子,e2为有理数的分母
基本运算:
Init(Rational *T,int n,int m):构造有理数z,元素e1,e2分别赋以分子,分母值
Destory(Rational &T):销毁有理数
back(Rational &T,int i,int e):用e返回有理数T的分子分母,当如参i为1时返回分子,i为2时返回分母
change(Rational &T,int i,int e):将有理数T的分子或分母更改为e,入参i为1时改变分子,i为2时改变分母
Commul(Rational *T1,Rational *T2,int mul):求有理数分母最小公倍数
Add(Rational *T1,Rational *T2,Rational *T3,int mul):有理数x和y相加,结果存入有理数z
Sub(Rational *T1,Rational *T2,Rational *T3,int mul):有理数x和y相减,结果存入有理数z
Mul(Rational *T1,Rational *T2,Rational *T3):有理数x和y相乘,结果存入有理数z
Div(Rational *T1,Rational *T2,Rational *T3):有理数x和y相除,结果存入有理数z
Commul(Rational *T1,Rational *T2,int mul):求有理数分母最小公倍数
Turn(Rational *T3):化简有理数
out(Rational *T3):输出有理数
}ADT Rational
2.数据结构、函数说明
3.代码实现说明
-
构造有理数
-
销毁有理数
-
分子分母返回
-
分子分母更改
-
有理数求和
-
有理数求差
-
有理数求积
-
有理数求商
4.代码互评
------------------------------------------------分------割-------线---------------------------------------------
- 梦冰同学在有理数定义的时候是用 new 动态分配空间,优点是按需分配不浪费存储空间;不足之处在于若指针没有及时释放,则会成为指向任意空间的野指针。
- 而我在有理数定义是使用结构体,优点是结构体按计划分配,由编译器给定空间,在作用域使用完毕系统自动释放所占空间;不足之处在于结构体是静态分配,只有固定的内存和位置,不能根据需求任意改变大小。
5.结果展示
-
有理数不等
-
有理数相等
-
分母为零
-
分母为负数
6.总结
这两个概念,尤其是第一个是特别非常抽象的概念,没什么具体可对应的实体可以给你举例,我就随便说说我的理解吧。
- 数据结构呢,我们总是为了完成一个功能或者目的写程序,但不管什么程序、代码实际上都是一些指令的集合,说白了就是在描述“怎么做”,而光知道怎么做还只是问题的一半,还要知道“做什么”,也就是刚才那些指令的对象是谁,自然肯定是相关的数据,比如说学生信息管理中,指令是增加学生,那他的对象就是学生信息这种数据,指令是成绩统计,那对象就是学生的成绩数据,而在我们的程序中,数据也必须要有一种很明确的组织表示方式,只要这样我们才能在这种具体明确的实体上编写指令,比如说学生数据可以定义为一个多维的数组,只有这样我们再写增加学生时,才能知道具体增加就是增加一个数组元素并未其赋值。所以数据结构就是相互之间有联系的具有某种组织方式的数据集合。
- 抽象数据类型相比较数据结构要具体一些,我们光有了数据结构还不够,因为数据是各种各样的,对于不同数据,我们能采取的方法也不一样,比如说学生数据可以增减,成绩数据可以进行算数运算,但是为什么说抽象呢,也就说他并不是具体整型还是字符型这种基本类型,而是我们根据我们要解决的实际问题,对应现实世界所描述的一种和现实世界中的实体对应的数据类型,而且这种抽象的数据类型还包括能够对于他实行的操作,比如说我们定义一种数据类型叫“学生”,具体的数据我可以定义一中类似表的结构存储,而且还要定义一些操作,比如说添加学生,删除学生,这两部分就共同组成了“学生”这个抽象的数据类型。
7.选做
学会使用git上传你的代码到码云