week01-绪论
2018-03-07 19:46 黑鹰1096 阅读(165) 评论(1) 编辑 收藏 举报
week01-绪论
一.作业题目
仿照三元组或复数的抽象数据类型写出有理数抽象数据类型的描述 (有理数是其分子、分母均为整数且分母不为零的分数)。
有理数基本运算:
- 构造有理数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.代码实现说明
有理的数构造
void Rtionalgouzao()//构造
{
nn: cout<<"请输入第一个分子分母\n" <<endl;
cin>>a[0].x>>a[0].y;
if(a[0].y==0){
cout<<"没有意义,请重新输入"<<endl;
goto nn;
}
mm: cout<<"请输入第二个分子分母\n"<<endl;
cin>>a[1].x>>a[1].y;
if(a[1].y==0){
cout<<"没有意义,请重新输入"<<endl;
goto mm;
}
}
有理数的公约
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.总结
抽象数据类型包括数据对象,数据关系,基本操作三个方面。其最重要的是基本操作也是最难的。