博客作业01-抽象数据类型

有理数基本运算

1.作业内容

用ADT的抽象数据模型描述你的有理数数据类型

ADT Rational{

    数据对象:
        D={ e1, e2 | e1,e2属于int类型} //int是类型标识符

    数据关系:
        R={ <e1,e2> }  //e1为有理数的分子,e2为有理数的分母

    基本运算:

        Init(Rational *T,int n,int m):构造有理数z,元素e1,e2分别赋以分子,分母值

        Destory(Rational &T):销毁有理数  

        back(Rational &T,int i,int e):用e返回有理数T的分子分母,当如参i为1时返回分子,i为2时返回分母 

        change(Rational &T,int i,int e):将有理数T的分子或分母更改为e,入参i为1时改变分子,i为2时改变分母 

        Commul(Rational *T1,Rational *T2,int mul):求有理数分母最小公倍数 

        Add(Rational *T1,Rational *T2,Rational *T3,int mul):有理数x和y相加,结果存入有理数z 

        Sub(Rational *T1,Rational *T2,Rational *T3,int mul):有理数x和y相减,结果存入有理数z 

        Mul(Rational *T1,Rational *T2,Rational *T3):有理数x和y相乘,结果存入有理数z 

        Div(Rational *T1,Rational *T2,Rational *T3):有理数x和y相除,结果存入有理数z 

        Commul(Rational *T1,Rational *T2,int mul):求有理数分母最小公倍数  

        Turn(Rational *T3):化简有理数 

        out(Rational *T3):输出有理数 

 }ADT Rational

2.数据结构、函数说明

1232060-20180307192914286-612740908.png

3.代码实现说明

  • 构造有理数
    1232060-20180307193300724-1994737853.png

  • 销毁有理数
    1232060-20180307193320683-1389555722.png

  • 分子分母返回
    1232060-20180307193330974-703812397.png

  • 分子分母更改
    1232060-20180307193342533-237298805.png

  • 有理数求和
    1232060-20180307193406894-75178865.png

  • 有理数求差
    1232060-20180307193424048-1276584325.png

  • 有理数求积
    1232060-20180307193442663-1979607108.png

  • 有理数求商
    1232060-20180307193454775-1249231367.png

4.代码互评

1232060-20180307202859521-85429976.png
------------------------------------------------分------割-------线---------------------------------------------
1232060-20180307202907405-1038649361.png

  • 梦冰同学在有理数定义的时候是用 new 动态分配空间,优点是按需分配不浪费存储空间;不足之处在于若指针没有及时释放,则会成为指向任意空间的野指针。
  • 而我在有理数定义是使用结构体,优点是结构体按计划分配,由编译器给定空间,在作用域使用完毕系统自动释放所占空间;不足之处在于结构体是静态分配,只有固定的内存和位置,不能根据需求任意改变大小。

5.结果展示

  • 有理数不等
    1232060-20180307200446569-929404622.png

  • 有理数相等
    1232060-20180307200344564-1179295929.png

  • 分母为零
    1232060-20180307200223922-837377979.png

  • 分母为负数
    1232060-20180307200255003-1782202181.png

6.总结

这两个概念,尤其是第一个是特别非常抽象的概念,没什么具体可对应的实体可以给你举例,我就随便说说我的理解吧。

  • 数据结构呢,我们总是为了完成一个功能或者目的写程序,但不管什么程序、代码实际上都是一些指令的集合,说白了就是在描述“怎么做”,而光知道怎么做还只是问题的一半,还要知道“做什么”,也就是刚才那些指令的对象是谁,自然肯定是相关的数据,比如说学生信息管理中,指令是增加学生,那他的对象就是学生信息这种数据,指令是成绩统计,那对象就是学生的成绩数据,而在我们的程序中,数据也必须要有一种很明确的组织表示方式,只要这样我们才能在这种具体明确的实体上编写指令,比如说学生数据可以定义为一个多维的数组,只有这样我们再写增加学生时,才能知道具体增加就是增加一个数组元素并未其赋值。所以数据结构就是相互之间有联系的具有某种组织方式的数据集合。
  • 抽象数据类型相比较数据结构要具体一些,我们光有了数据结构还不够,因为数据是各种各样的,对于不同数据,我们能采取的方法也不一样,比如说学生数据可以增减,成绩数据可以进行算数运算,但是为什么说抽象呢,也就说他并不是具体整型还是字符型这种基本类型,而是我们根据我们要解决的实际问题,对应现实世界所描述的一种和现实世界中的实体对应的数据类型,而且这种抽象的数据类型还包括能够对于他实行的操作,比如说我们定义一种数据类型叫“学生”,具体的数据我可以定义一中类似表的结构存储,而且还要定义一些操作,比如说添加学生,删除学生,这两部分就共同组成了“学生”这个抽象的数据类型。

    7.选做

学会使用git上传你的代码到码云

转载于:https://www.cnblogs.com/PENGXI/p/8525026.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值