一.作业题目
实验题目
试仿照三元组或复数的抽象数据类型写出有理数抽象数据类型的描述 (有理数是其分子、分母均为整数且分母不为零的分数)。
有理数基本运算如下所示:
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.作业内容(1分)
用ADT的抽象数据模型描述你的有理数数据类型
ADT Rational{
数据对象:
D={e1,e2|e1,e2均为整数}
数据关系:
R1={<e1,e2>},R2={<T1,T2>,<T2,T3>}
基本操作:
ConstructRational( &T, e1, e2);//构造有理数T,元素e1,e2分别被赋以分子、分母值
DestroyRational(&T);//销毁有理数T
Return( i, T, &e);//用e(引用类型参数)返回有理数T的分子或分母,当入参i为1时返回分子, i为2是返回分母
Change(&T,int i,e);//将有理数T的分子或分母更改为e,入参i为1时改变分子, i为2是改变分母
Addition(&T1,&T2,&T3);//有理数T1,T2相加,结果存入有理数T3
Subtraction(&T1,&T2,&T3);//有理数T1,T2相减,结果存入有理数T3
Multiplication(&T1,&T2,&T3);//有理数T1,T2相乘,结果存入有理数T3
Division(&T1,&T2,&T3);//有理数T1,T2相除,结果存入有理数T3
}ADT Rational
2.数据结构、函数说明(2分)
2.1截图展示头文件
3.代码实现说明(4分)
截图展示每个函数代码。简要说明做法。
- (0)主函数
我将动态分配内存放在了主函数
- (1)构造有理数
引用了不合法有理数输入判断函数,对构造的有理数进行了判断
不合法则重新构造
- (2)两有理数相加
相加的方式:新构造的有理数T3的分子=T1的分子*T2的分母+T2的分子*T1的分子
分母=T1的分母*T2的分母
再引用约分有理数函数,对有理数进行约分
- (3)两有理数相减
相加的方式:新构造的有理数T3的分子=T1的分子*T2的分母-T2的分子*T1的分子
分母=T1的分母*T2的分母
再引用约分有理数函数,对有理数进行约分
- (4)两有理数相乘
相加的方式:新构造的有理数T3的分子=T1的分子*T2的分子
分母=T1的分母*T2的分母
再引用约分有理数函数,对有理数进行约分
- (5)两有理数相除
相加的方式:新构造的有理数T3的分子=T1的分子*T2的分母
分母=T1的分母*T2的分子
再引用约分有理数函数,对有理数进行约分
- (6)有理数约分
这里我使用的是更相减损法:设分子为a,分母为b,则若a>b,则a=a-b,若b>a,则b=b-a,直到a=b,则此时a为原有理数分子分母的最大公约数,令原有理数的分子分母同时除以最大公约数,则达到了约分的目的。
- (7)对不合法有理数输入的判断
如果有理数的分母为0或为负数则返回0(表示输入不合法),否则返回1
- (8)消除有理数
- (9)e(引用类型参数)返回有理数T的分子或分母,当入参i为1时返回分子, i为2是返回分母
4.代码互评(选做,加分)(已经和同学要了代码,还没看)
找一份同学代码,评价你和同学代码不同之处,如:
4.1变量名命名风格不同
4.2函数设计风格不同
4.3结构体有无不同
4.4异常出错处理(我的异常出错)
-
1.约分函数当分子或分母为负数时出错----增加条件
-
2.约分函数为0--------使用函数前增加条件
- 3.动态分配内存语句放在函数内,所以主函数定义的指针没有内容,从而无法作为参数传到函数--------将动态内存语句放到了主函数里
5.结果展示(2分)
- (1)分子分母都为正数
- (2)分母为0
- (3)分母为负数
- (4)分子是负数
- (5)分子是0
分子是0的时候发现程序在乘法那边无法继续进行显示,后来发现是约分的函数没有特别对分子是0的情况进行处理,所以在每次使用约分函数进行判断:当且仅当分子和分母不为0的时候才进行约分函数。
6.总结(1分)
6.1数据结构
若干个数据项构成了数据元素,相互之间存在一种或多种特定关系的数据元素又构成了数据结构。而程序的定义就是算法加数据结构,可见数据结构的地位。它穿插在程序中,对程序的运行效率,规范都有有很大作用,如果真的想提高自己的编程能力,数据结构是一定要掌握的。
6.2抽象数据类型
不同的程序,不同的数据 ,对数据类型的要求也不同,已有的基本数据类型有时候并不能满足要求,这时候抽象数据类型就派上了用场,即自定义数据类型。 而一旦定义了一个抽象数据类型及具体实现,程序设计中就可以像使用基本数据类型那样,十分方便地使用抽象数据类型。相对基本数据类型,抽象数据类型更加灵活。
7.选做(还不会)
学会使用git上传你的代码到码云