一.作业题目
实验题目
试仿照三元组或复数的抽象数据类型写出有理数抽象数据类型的描述 (有理数是其分子、分母均为整数且分母不为零的分数)。
有理数基本运算如下所示:
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
实验要求:
抽象数据类型名为Rational。
有理数分母不能为负数或者0,类似输入请提示重输入。
数据对象和数据运算的表示与数据操作的实现分离。表示用头文件完成,实现用CPP文件完成。Main.cpp文件实现数据输入输出。
数据输入输出格式参考如下:
输入:
1 3 //T1的分子、分母
1 2 //T2的分子、分母
** 输出:**
5 6 //两个有理数相加
-1 6 //两个有理数相减
1 6 //两个有理数相乘
2 3 //两个有理数相除
程序应对异常输入或者出错必要处理和提示,分子分母要约分。
二、博客作业要求:
1.作业内容(1分)
用ADT的抽象数据模型描述你的有理数数据类型。
ADT Rational{
数据对象:D = {T1,T2|T1,T2为有理数}
数据关系:R = {e1是有理数的分子,e2是有理数的分母,且e2≠0}
基本操作:
Creat_Rational(&T,e1,e2)
//构造有理数T,元素e1,e2分别被赋以分子、分母值
Destroy_Rational(&T)
//销毁有理数T
Get_Rational(T,i,&e)
//用e返回有理数T的分子或分母
Modify_Rational(&T,i,e)
//将有理数T的分子或分母更改为e
Add_Rational(T1,T2,&T3)
//将T1,T2相加,结果存入T3
Subtract_Rational(T1,T2,&T3)
//将T1,T2相减,结果存入T3
Multiply_Rational(T1,T2,&T3)
//将T1,T2相乘,结果存入T3
Divide_Rational(T1,T2,&T3)
//将T1,T2相除,结果存入T3
} ADT Rational
2.数据结构、函数说明(2分)
-
头文件
3.代码实现说明(4分)
-
(1)构造有理数函数
做法:动态申请内存,分别把2个变量放入数组T中。
-
(2)销毁有理数函数
做法:删除T、K所指向的内容。
-
(3)有理数相加函数
做法:通分后有理数相加,再将结果进行约分。
-
(4)有理数相减函数
做法:通分后有理数相减,再将结果进行约分。
-
(5)有理数相乘函数
做法:将有理数相乘,再将结果进行约分。
-
(6)有理数相除函数
做法:将有理数相除,再将结果进行约分。
-
(7)有理数约分函数
做法:把负有理数变为正有理数,找出最大公约数,负有理数恢复,有理数约分。
-
(8)有理数修改函数
做法:把修改i的数据存在e中赋值给T中第i(1 ≤ i ≤ 3)个有理数的分子或分母。
-
(9)返回有理数分子或分母函数
做法:用e返回T中第i(1 ≤ i ≤ 3)个有理数分子或分母的值。
4.代码互评(选做,加分)
找一份同学代码,评价你和同学代码不同之处,如:
变量名命名风格不同
函数设计风格不同
结构体有无不同
异常出错处理是否不同
等等
注意:务必找个代码风格差异大的同学代码互评,此处要说写的太简单,0分。尽量找代码写的比自己好的同学互评。
5.结果展示(2分)
-
正确结果
-
分子为0或负数
-
输入分母为0或负数
-
选择错误
6.总结(1分)
-
数据结构:数据结构指的是数据之间的相互关系,即数据的组织形式.
-
抽象数据类型:指一个数据模型以及定义在该模型上的一组操作。抽象数据类型的定义仅取决于它的一组逻辑特性,而与其在计算机内部如何表示和实现无关。
7.选做
学会使用git上传你的代码到码云
参考资料:Git与码云(Git@OSC)入门-如何在实验室和宿舍同步你的代码(1)
8.出现问题
-
销毁操作时,delete后没有加NULL,导致第一次销毁操作取消后第二次进行销毁操作时程序崩溃。
查询相关资料:http://blog.csdn.net/novocane/article/details/39972029