代码改变世界

week01-绪论

2018-03-07 19:46  黑鹰1096  阅读(164)  评论(1编辑  收藏  举报

 

week01-绪论

一.作业题目

仿照三元组或复数的抽象数据类型写出有理数抽象数据类型的描述 (有理数是其分子、分母均为整数且分母不为零的分数)。
有理数基本运算:

  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.用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;

    1.  

函数

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.总结

 抽象数据类型包括数据对象,数据关系,基本操作三个方面。其最重要的是基本操作也是最难的。