一.作业题目
实验题目
试仿照三元组或复数的抽象数据类型写出有理数抽象数据类型的描述 (有理数是其分子、分母均为整数且分母不为零的分数)。
有理数基本运算如下所示:
- 1.构造有理数T,元素e1,e2分别被赋以分子、分母值
- 2.销毁有理数T
- 3.用e(引用类型参数)返回有理数T的分子或分母,当入参i为1时返回分子, i为2是返回分母。
- 4.将有理数T的分子或分母更改为e,入参i为1时改变分子, i为2是改变分母
- 5.有理数T1,T2相加,结果存入有理数T3
- 6.有理数T1,T2相减,结果存入有理数T3
- 7.有理数T1,T2相乘,结果存入有理数T3
- 8.有理数T1,T2相除,结果存入有理数T3
实验要求:
- 1.抽象数据类型名为Rational。
- 2.有理数分母不能为负数或者0,类似输入请提示重输入。
- 3.数据对象和数据运算的表示与数据操作的实现分离。表示用头文件完成,实现用CPP文件完成。Main.cpp文件实现数据输入输出。
- 4.数据输入输出格式参考如下:
**输入:**
1 3 //T1的分子、分母
1 2 //T2的分子、分母
** 输出:**
5 6 //两个有理数相加
-1 6 //两个有理数相减
1 6 //两个有理数相乘
2 3 //两个有理数相除
- 5.程序应对异常输入或者出错必要处理和提示,分子分母要约分。
二、博客作业要求:
1.作业内容(1分)
用ADT的抽象数据模型描述你的有理数数据类型。
ADT Rational{
数据对象:D={ e1,e2∈I (I为整数集合) }
数据关系:R={ e1是有理数的分子,e2是有理数的分母,且e2≠0,即:分母不能为0 }
基本操作:
InitRational(&T,a1,a2)
操作结果:构造有理数T,元素e1,e2分别被赋以参数a1,a2的值
DestroyRational(&T)
初始条件:有理数T已存在
操作结果:有理数T被销毁
GetRational(T,i,&e)
初始条件:有理数T已存在, i∈{1,2}
操作结果:用e返回有理数T的分子或分母,i=1返回分子, i=2返回分母
PutRational(T,i,e)
初始条件:有理数T已存在, i∈{1,2}
操作结果:改变有理数T的分子或分母为e,i=1改变分子, i=2改变分母
AddRational(T1,T2,&T3)
初始条件:有理数T1,T2已存在
操作结果:有理数T1,T2相加,结果存入有理数T3
SubRational(T1,T2,&T3)
初始条件:有理数T1,T2已存在
操作结果:有理数T1,T2相减,结果存入有理数T3
MulRational(T1,T2,&T3)
初始条件:有理数T1,T2已存在
操作结果:有理数T1,T2相乘,结果存入有理数T3
DivRational(T1,T2,&T3)
初始条件:有理数T1,T2已存在
操作结果:有理数T1,T2相除,结果存入有理数T3
} ADT Rational
2.数据结构、函数说明(2分)
截图展示你的头文件。头文件代码务必加入注释。
3.代码实现说明(4分)
(1)构造有理数T
做法:动态申请内存,分别把变量a1 a2的值赋给有理数T的结构体成员。
(2)销毁有理数T
做法:利用free()来释放申请的内存
(3)查询有理数T
做法:用e返回有理数T的分子或分母,i=1返回分子, i=2返回分母
(4)改变有理数T
做法:改变 T的分子或分母为e,i=1改变分子,i=2改变分母
(5)有理数T1 T2相加
做法:两个有理数先通分后相加,再调用Maxnum()函数得到最大公约数,最后约分化为最简分式
(6)有理数T1 T2相减
做法:两个有理数先通分后相减,再调用Maxnum()函数得到最大公约数,最后约分化为最简分式
(7)有理数T1 T2相乘
做法:两个有理数分子分母分别相乘,再调用Maxnum()函数得到最大公约数,最后约分化为最简分式
(8)有理数T1 T2相除
做法:先取T2倒数然后两个有理数分子分母分别相乘,再调用Maxnum()函数得到最大公约数,最后约分化为最简分式
(9)求最大公约数
做法:取a,b中较小的值为n,然后通过循环找到a,b的最大公约数
4.代码互评(选做,加分)
找一份同学代码,评价你和同学代码不同之处,如:
变量名命名风格不同
函数设计风格不同
结构体有无不同
异常出错处理是否不同
等等
注意:务必找个代码风格差异大的同学代码互评,此处要说写的太简单,0分。尽量找代码写的比自己好的同学互评。
5.结果展示(2分)
-
1.输入有理数的分母为0时,提示错误
-
2.输入有理数后,按提示进行有理数查询
-
3.按提示进行有理数的更改,且有更改成功的提示
-
4.再次进入查询发现已经更改成功
-
5.输出有理数和更改有理数时不按提示操作时的提醒
-
6.更改有理数时将分母更改成0时的提示
-
7.两个有理数(2/3 4/5)进行相加相减后的结果
-
8.两个有理数(2/3 4/5)进行相乘相除后的结果
-
9.两个有理数都是负数的情况下,进行相乘相除后结果变成正数
6.总结(1分)
谈谈你对数据结构及抽象数据类型的理解。
- 数据结构是对于数据的存储、组织结构方式的归纳总结。不同的数据结构类型,其对应相关的存储结构、逻辑结构不同,但都是为了让我们在解决实际问题的时候能够很好的找到一种合适的建模结构,在此基础上设计对应的算法。
- 抽象数据类型(ADT)是指一个数学模型及定义在该模型上的一组操作。它仅取决于其逻辑特征,而与计算机内部如何表示和实现无关。比如整型,各个计算机,不管大型机、小型机、PC、平板电脑甚至智能手机,都有“整型”类型,也需要整型运算,那么整型其实就是一个抽象数据类型。
- 根据定义抽象数据类型的定义,它还包括该模型上的一组操作。就像“超级玛丽”这个经典的任天堂游戏,里面的游戏主角是马里奥,我们给他定义了基本操作,前进、后退、跳、打子弹等。这就是一个抽象数据类型,定义了一个数据对象、对象中各元素之间的关系及对数据元素的操作。至于,到底是哪些操作,这只能由设计者根据实际需要来定。像马里奥可能开始只能走和跳,后来发现应该增加一种打子弹的操作,再后来又有了按住打子弹键后前进就有跑的操作。这都是根据实际情况来定的。再比如王者荣耀里的英雄,本质上就是一种抽象数据类型(ADT),他的底层是由很多基本数据类型构成的,并且还定义了在数据上的很多操作,比如貂蝉的生命值,走位速度,攻击力就是很多基本数据类型,她的操作技能,比如扔花球,位移同时扔小花球就是数据上的操作。基本数据组合,数据上的操作,加在一起就成了抽象数据类型。其实你玩的不是英雄,而是一种抽象数据类型!
7.选做
学会使用git上传你的代码到码云
参考资料:http://www.cnblogs.com/zhrb/p/6286615.html