week01-绪论
2018-03-07 22:06 怪人多多 阅读(194) 评论(1) 编辑 收藏 举报一.作业题目
仿照三元组或复数的抽象数据类型写出有理数抽象数据类型的描述 (有理数是其分子、分母均为整数且分母不为零的分数)。
有理数基本运算:
- 构造有理数T,元素e1,e2分别被赋以分子、分母值
- 销毁有理数T
- 用e(引用类型参数)返回有理数T的分子或分母,当入参i为1时返回分子, i为2是返回分母。
- 将有理数T的分子或分母更改为e,入参i为1时改变分子, i为2是改变分母
- 有理数T1,T2相加,结果存入有理数T3
- 有理数T1,T2相减,结果存入有理数T3
- 有理数T1,T2相乘,结果存入有理数T3
- 有理数T1,T2相除,结果存入有理数T3
二.作业内容
1.用ADT的抽象数据模型描述有理数数据类型。
ADT Rational
{
数据对象:D={x,y|x,y都属于整型,存放于a的结构数组中}
数据关系:R={x,y|x是分子,y是分母};
基本操作:
void Rationalyuefen();
void Rationalgouzao();
void Rationaljiafa();
void Rationaljianfa();
void Rationalchengfa();
void Rationalchufa();
} ADT Rational
2.数据结构、函数说明
头文件
#include <iostream>
using namespace std;
函数
void Rationalyuefen(); //有理数的约分
void Rationalgouzao(); //有理数的构造
void Rationalxiangjia(); //有理数相加
void Rationalxiangjian(); //有理数相减
void Rationalxiangcheng(); //有理数相乘
voidRationalxiangchu(); //有理数相除
3.代码实现说明
函数的构造
Status InitRational(Rational &T,ElemType a1,ElemType a2)
{ //操作结果,构造三元素r,元素e1,e2的值分别被赋值给a1,a2的值
T=(ElemType*)malloc(2*sizeof(ElemType));//分配两个存储空间,存放分子分母
if(!T)exit(OVERFLOW);//分配存储空间失败
T[0]=a1;
T[1]=a2;
Return OK;
}
有理数的公约
void Rtionalgongyue()
{
int s=0,i;
int da xiao;
if(a[2].y>0)
{
s=1;
}
if(a[2].x>a[2].y)
{
da=a[2].x;
xiao=a[2].y
}
else
{
da=a[2].y;
xiao=a[2].x;
}
for(i=xiao;i>1;i--)
{
if(a[2].x%i==0&&a[2].y%i==0)
{
a[2].x=a[2].x/i;
a[2].y=a[2].y/i;
break;
}
}
if(s=1)
{
a[2].y>0;
}
}
有理数的相加,相减,相乘,相除
void Rtionalxiangjia()
{
a[2].x=a[0].x*a[1].y+a[1].x*a[0].y;
a[2].y=a[0].y*a[1].y;
if(a[2].x==a[2].y)
{
cout<<"两数相加:"<<a[2].x/a[2].y<<endl;
}
else
{
Rtionalgongyue();
cout<<"两数相加:"<<a[2].x<<" "a[2].y<<endl;
}
}
void Rtionalxiangjian()
{
a[2].x=a[0].x*a[1].y-a[1].x*a[0].y;
a[2].y=a[0].y*a[1].y;
if(a[2].x==0)
{
cout<<"两数相减:"<<0<<endl;
}
else
{
Rtionalgongyue();
cout<<"两数相减:"<<a[2].x<<" "a[2].y<<endl;
}
}
void Rtionalxiangcheng()
{
a[2].x=a[0].x*a[1].x;
a[2].y=a[0].y*a[1].y;
if(a[2].x==a[2].y)
{
cout<<"两数相乘:"<<a[2].x/a[2].y<<endl;
}
else
{
Rtionalgongyue();
cout<<"两数相乘:"<<a[2].x<<" "a[2].y<<endl;
}
}
void Rtionalxiangchu()
{
a[2].x=a[0].x*a[1].y;
a[2].y=a[0].y*a[1].x;
if(a[0].x==0||a[1].x)
{
cout<<"两数相除:"<<a[2].x/a[2].y<<endl;
}
else
{
Rtionalgongyue();
cout<<"两数相除:"<<a[2].x<<" "a[2].y<<endl;
}
}
4.结果展示
正数
负数
无意义
其他类
5.总结
稍微了解了C++的特点,抽象数据类型能够方便的处理数据,通过与老师和学姐的交流掌握了基本内容,但发现还有很多问题不懂,接下来会加倍努力掌握内容