代码改变世界

week01-绪论

2018-03-07 22:06  怪人多多  阅读(194)  评论(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;

 

函数

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++的特点,抽象数据类型能够方便的处理数据,通过与老师和学姐的交流掌握了基本内容,但发现还有很多问题不懂,接下来会加倍努力掌握内容