题目:设计实现抽象数据类型“有理数”

内容:设计并上机实现抽象数据类型“有理数”,有理数的基本操作包括:两个有理数的加、减、乘、除等(包括有理数的创建和输出)。

要求

  1. 有理数的类型,我们可以构造成一个结构体类型,这个结构体由两个整数构成,分别表示有理数的分子和分母。  //int fz; int fm;
  2. 在初始化或创建一个有理数时,可以给出有理数的分子和分母来创建一个有理数;也可以给出一个小数形式的有理数,来计算对应的分子分母来创建一个有理数(可设置一个允许的计算误差)。
  3. 以分数形式创建有理数时,要处理分母为零的异常情况。
  4. 输出不能有类似于4/4、3/6这样的结果数据。
  5. 要有能根据用户输入选择不同运算的菜单选择界面。
#include<stdio.h>
#include<math.h>
struct fraction{int molecule;int denominator;
}f[2];
int reduction(int m,int n){int max,min,i,largest_reduction=1;if(m<0)m=abs(m);if(n<0)n=abs(n);if(m>=n){max=m,min=n;}else{max=n,min=m;}for(i=2;i<=min;i++){if(max%i==0&&min%i==0){max/=i;min/=i;largest_reduction*=i;i=1;}}return largest_reduction;
}int decimal(float n){int time=0;while(n-int(n)!=0){time++;n*=10;}return time;
}int bigger(int time,float n){int i;for(i=0;i<time;i++){n*=10;}return n;
} void print(int n,int m){if(n==0){printf("0\n");}else{if(abs(n)==abs(m)){if(m!=n){printf("-1\n");}else{printf("1\n");}}else{printf("%d/%d\n",n,m);}}
}
int main(int argc,char*argv[])
{ struct fraction f[2];int choose,work=0,i,j,k=0;float molecule[2]={0},denominator[2]={1,1};int mol,den;for(i=0;i<2;i++){ printf("***********************************\n");printf("*            菜单                 *\n");printf("* 1:输入一个分数                  *\n"); printf("* 2:输入一个小数                  *\n");printf("***********************************\n");printf("输入想要进行操作的序号:"); scanf("%d",&choose);if(choose==1){printf("输入分子和分母(空格隔开):\n"); scanf("%d %d",&f[i].molecule,&f[i].denominator);while(f[k].denominator==0){printf("分母不合法!请重新输入分母:");scanf("%d",&f[i].denominator); }}else if(choose==2){printf("输入小数:\n");scanf("%f",&molecule[i]);f[i].molecule=bigger(decimal(molecule[i]),molecule[i]);f[i].denominator=bigger(decimal(molecule[i]),1);}else{printf("无效的操作!请重新输入:");i--;}}for(i=0;i<1;i++){printf("*******************************\n");printf("*            菜单             *\n");printf("* 1:加法            2:减法    *\n"); printf("* 3:乘法            4:除法    *\n");printf("* 5:结束                      *\n");printf("*******************************\n");printf("输入想要进行操作的序号:"); scanf("%d",&choose);if(choose==1){mol=f[0].molecule*f[1].denominator+f[1].molecule*f[0].denominator;den=f[1].denominator*f[0].denominator;printf("%d/%d + %d/%d=",f[0].molecule,f[0].denominator,f[1].molecule,f[1].denominator);print(mol/reduction(mol,den),den/reduction(mol,den));i--;}else if(choose==2){mol=f[0].molecule*f[1].denominator-f[1].molecule*f[0].denominator;den=f[1].denominator*f[0].denominator;printf("%d/%d - %d/%d=",f[0].molecule,f[0].denominator,f[1].molecule,f[1].denominator);print(mol/reduction(mol,den),den/reduction(mol,den));i--;}else if(choose==3){mol=f[0].molecule*f[1].molecule;den=f[1].denominator*f[0].denominator;printf("%d/%d * %d/%d=",f[0].molecule,f[0].denominator,f[1].molecule,f[1].denominator);print(mol/reduction(mol,den),den/reduction(mol,den));i--;}else if(choose==4){mol=f[0].molecule*f[1].denominator;den=f[1].molecule*f[0].denominator;printf("%d/%d / %d/%d=",f[0].molecule,f[0].denominator,f[1].molecule,f[1].denominator);print(mol/reduction(mol,den),den/reduction(mol,den));i--;}else if(choose==5){return 0;}else{printf("无效的操作!请重新输入:");i--;}}return 0;     } 

数据结构:设计实现抽象数据类型“有理数”内容相关推荐

  1. 设计实现抽象数据类型“有理数”

    设计实现抽象数据类型"有理数" 设计实现抽象数据类型"有理数" 题目 分析 创建有理数的数据结构 `Init`初始化有理数 `gcd`最大公约数 `Reduct ...

  2. 数据结构简介以及抽象数据类型的实现

    数据结构简介 数据结构(英语:data structure)是计算机中存储.组织数据的方式. 数据结构意味着接口或封装:一个数据结构可被视为两个函数之间的接口,或者是由数据类型联合组成的存储内容的访问 ...

  3. 数据结构第一次作业——抽象数据类型

    1.作业内容(1分) ADT Rational{ 数据对象:D={e1,e2|e1,e2都是Elemtype类型} 数据关系:R={<e1,e2>} 基本操作:Builtration(&a ...

  4. 数据结构 —— ADT(抽象数据类型)

    什么是ADT ADT可以看作一些数据对象以及附加在这些数据对象上的操作的集合 ADT重在对功能的描述而不关心具体实现 对于栈来说,数据对象集为存储在栈内的数据元素,操作集为元素进栈,元素出栈,判断栈是 ...

  5. 设计实现抽象数据类型“三元组”,要求动态分配内存

    基本操作包括:创建一个三元组,取三元组的任意一个分量,置三元组的任意一个分量,求三元组的最大分量,求三元组的最小分量,显示三元组,销毁三元组. #include <stdio.h> #in ...

  6. 数据结构与算法-什么是数据结构,什么是数据,什么是抽象数据类型

    记录学生信息的数据结构设计 >列表包元组 >列表包字典 >字典包字典 比较数据结构的取值效率 如果要找一个学生,关注时间复杂度 > n >1 数据结构 解决数据如何保存 ...

  7. 抽象数据类型的三元组C语言,试仿照三元组的抽象数据类型分别写出数据类型复数和有理数的定义?...

    满意答案 hweiwei420 2015.10.10 采纳率:50%    等级:13 已帮助:14203人 a. 抽象数据类型复数complex: ADT complex{ 数据对象:D={e1,e ...

  8. 实验报告:抽象数据类型的表现和实现

    实验报告:抽象数据类型的表现和实现 实验内容 基本要求: 设计实现抽象数据类型"三元组",要求动态分配内存.每个三元组由任意三个实数的序列构成,基本操作包括:创建一个三元组,取三元 ...

  9. 抽象数据类型三元组表示与实现

    1,抽象数据类型概念: (1)由用户定义,用以表示应用问题的数据模型:(2)由基本的数据类型组成, 并包括一组相关的操作: 2,抽象数据类型用三元组表示:ADT = (D,S,P) D: 数据对象  ...

最新文章

  1. 面试必备:6个你必须熟练掌握的机器学习算法
  2. javascript 死循环
  3. 客户端(C#)调用CXF搭建的webservice的出现一些问题记录
  4. SpringBoot系列: SpringBoot 启动慢的问题
  5. oracle 中的常用exception
  6. Direct3D 11.1新特性曝光
  7. 代码排版工具Artistic Style的使用(原创)
  8. mixpanel实验教程(2)
  9. ARC077C pushpush 递推
  10. 科研绘图神器之Plotluck(如何节省时间)
  11. ssm大型分布式商城项目实战视频教程下载java分布式开发教程
  12. 折叠屏要来了,适配逼死 Android 开发?谷歌有办法!
  13. HTML css把图片变圆,HTML+CSS:圆形和圆角图片格式
  14. 不是吧?DNSPod挪车码免费送?
  15. 华为RH2288 V3分区并装系统
  16. 如何获取一个基因家族的所有小麦基因
  17. 地铁框架保护的原理_地铁直流系统中框架保护原理及处理程序
  18. 实时协作文档编辑器Etherpad
  19. 什么是超融合数据中心?超融合数据中心的价值是什么?
  20. [转]ViewFlipper实现多标签切换

热门文章

  1. IBC协议之 ics-024-host-requirements
  2. 评价法(三):yaahp软件——基础简介
  3. 游戏设计/开发的出发点——追根溯源
  4. C++ 7z解压缩编译及使用
  5. AS调用百度地图定位
  6. 迪文屏幕T5UID3平台学习笔记四:串口使用和定时器使用
  7. 参数反演 计算机,基于Radon变换的波场参数反演算法及图像重构
  8. 三菱fx3u型PLC和昆仑通泰MCGS触摸屏控制松下伺服电机控制程序
  9. 市场整改篇之应用宝报告
  10. 概率论:数字特征与极限定理——方差与标准差