




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
有理数四则运算------------------------------------有理数四则运算------------------------------------有理数四则运算有理数四则运算数据结构实验报告题目:有理数四则运算学院计算机学院专业软件工程年级班别12级(4)班学号3112006291学生姓名林炳城指导教师赵锐成绩____________________2014年6月1.题目设计一个可进行有理数运算的演示案例。ADTRationalNumbers{数据对象:D={ai|ai∈有理数,i=1,2,...,n,n≥0}数据关系:R={<ai-1,ai>|ai-1,ai∈D,ai-1<ai,i=2,...,n}基本操作:InitRationalNumber(&RN)操作结果:初始化一个有理数RN。 DestroyRationalNumber(&RN)
初始条件:有理数RN存在。操作结果:有理数RN被销毁。 Addition(RN1,RN2,&RN3)初始条件:有理数RN1,RN2存在。操作结果:有理数RN1加上RN2,结果用RN3返回。Subtraction(RN1,RN2,&RN3)初始条件:有理数RN1,RN2存在。操作结果:有理数RN1减去RN2,结果用RN3返回。Multiplication(RN1,RN2,&RN3)初始条件:有理数RN1,RN2存在。操作结果:有理数RN1乘以RN2,结果用RN3返回。Division(RN1,RN2,&RN3)初始条件:有理数RN1,RN2存在。操作结果:有理数RN1除以RN2,结果用RN3返回。 MaxCommonDivisor(intx,inty,int&result)初始条件:自然数x、y。操作结果:求自然数x、y的最大公约数。}ADTRationalNumbers2.头文件定义公用头文件rational_numbers.h:#include<stdio.h>#include<stdlib.h>//宏定义#defineTRUE1#defineFALSE0#defineOK1#defineERROR0#defineIBFEASIBLE-1#defineOVERFLOW-2//类型定义typedefintStatus;typedefstructRationalNumbers{intfenzi;//分子intfenmu;//分母}RationalNumbers;3.算法设计StatusInitRationalNumber(RationalNumbers&RN){ //RN=(RationalNumbers*)malloc(Sizeof(RationalNumbers)); //上面乃是真正使用时必须有的代码 if(!RN) returnERROR; else{//初始化有理数为零 RN.fenzi=0; RN.fenmu=1; returnOK;}}StatusDestroyRationalNumber(RationalNumbers&RN){//销毁有理数 if(!RN) returnERROR; free(RN); returnOK;}StatusAddition(RationalNumbersRN1,RationalNumbersRN2,RationalNumbers&RN){//加法运算 //RN1、RN2为加数 intfenzi,fenmu,result;//计算结果的分子,分母,最大公约数 if(!RN) returnERROR; //关键算法:通分后分子进行加法fenzi=RN1.fenzi*RN2.fenmu+RN2.fenzi*RN1.fenmu; fenmu=RN1.fenmu*RN2.fenmu; MaxCommonDivisor(fenzi,fenmu,&result); RN.fenzi=fenzi/result;RN.fenmu=fenmuu/result; returnOK;}StatusSubtraction(RationalNumbersRN1,RationalNumbersRN2,RationalNumbers&RN){//减法运算 //RN1为被减数RN2为减数, intfenzi,fenmu,result;//计算结果的分子,分母,最大公约数 if(!RN) returnERROR; //关键算法:通分后分子进行减法 fenzi=RN1.fenzi*RN2.fenmu-RN2.fenzi*RN1.fenmu; fenmu=RN1.fenmu*RN2.fenmu; MaxCommonDivisor(fenzi,fenmu,&result); RN.fenzi=fenzi/result;RN.fenmu=fenmuu/result; returnOK;}StatusMultiplication(RationalNumbersRN1,RationalNumbersRN2,RationalNumbers&RN){//乘法运算 //RN1、RN2为乘数, intfenzi,fenmu,result;//计算结果的分子,分母,最大公约数 if(!RN) returnERROR; //关键算法:分子分母各自相乘 fenzi=RN1.fenzi*RN2.fenzi; fenmu=RN1.fenmu*RN2.fenmu; MaxCommonDivisor(fenzi,fenmu,&result); RN.fenzi=fenzi/result;RN.fenmu=fenmuu/result; returnOK;}StatusDivision(RationalNumbersRN1,RationalNumbersRN2,RationalNumbers&RN){/除法运算 //RN1为被除数RN2为除数, intfenzi,fenmu,result;//计算结果的分子,分母,最大公约数 if(!RN) returnERROR; //关键算法:分子分母交叉相乘 fenzi=RN1.fenzi*RN2.fenmu; fenmu=RN1.fenmu*RN2.fenzi; MaxCommonDivisor(fenzi,fenmu,&result); RN.fenzi=fenzi/result;RN.fenmu=fenmuu/result; returnOK;}StatusMaxCommonDivisor(intx,inty,int&result){//求最大公约数 //工具函数,求自然数x、y的最大公约数,用result放回 intz; if(!result) returnERROR;x<y?z=x:z=y;while(1){if(x%z==0&&y%z==0){result=z;returnOK;}z--;}returnERROR;}测试(1)头文件源码rational_numbers.h/**rational_numbers.h**Createdon:2014年6月14日*Author:LinBingcheng*/#ifndefRATIONAL_NUMBERS_H_#defineRATIONAL_NUMBERS_H_#defineTRUE1#defineFALSE0#defineOK1#defineERROR0#defineIBFEASIBLE-1#defineOVERFLOW-2#endif/*RATIONAL_NUMBERS_H_*/typedefintStatus;typedefstructrational_numbers{ //有理数类型定义 intfenzi; //分子 intfenmu; //分母}RationalNumbers;//操作结果:初始化一个有理数RN。RationalNumbers*InitRationalNumber();//初始条件:有理数RN存在。//操作结果:有理数RN被销毁。StatusDestroyRationalNumber(RationalNumbers*RN);//初始条件:有理数RN1,RN2存在。//操作结果:有理数RN1加上RN2,结果用RN3返回。RationalNumbers*Addition(RationalNumbersRN1,RationalNumbersRN2);//初始条件:有理数RN1,RN2存在。//操作结果:有理数RN1减去RN2,结果用RN3返回。RationalNumbers*Subtraction(RationalNumbersRN1,RationalNumbersRN2);//初始条件:有理数RN1,RN2存在。//操作结果:有理数RN1乘以RN2,结果用RN3返回。RationalNumbers*Multiplication(RationalNumbersRN1,RationalNumbersRN2);//初始条件:有理数RN1,RN2存在。//操作结果:有理数RN1除以RN2,结果用RN3返回。RationalNumbers*Division(RationalNumbersRN1,RationalNumbersRN2);// 初始条件:自然数x、y。//操作结果:求自然数x、y的最大公约数。intMaxCommonDivisor(intx,inty);(2)实现源码rational_numbers.c/**rational_numbers.c**Createdon:2014年6月14日*Author:LinBingcheng*/#include<stdio.h>#include<stdlib.h>#include"rational_numbers.h"RationalNumbers*InitRationalNumber(){ RationalNumbers*RN=(RationalNumbers*)malloc(sizeof(RationalNumbers)); //上面乃是真正使用时必须有的代码 if(!RN) exit(OVERFLOW); else{//初始化有理数为零 RN->fenzi=0; RN->fenmu=1; returnRN; }}StatusDestroyRationalNumber(RationalNumbers*RN){//销毁有理数 if(!RN) returnERROR; free(RN); returnOK;}RationalNumbers*Addition(RationalNumbersRN1,RationalNumbersRN2){//加法运算 //RN1、RN2为加数 intfenzi,fenmu; //计算结果的分子,分母,最大公约数 RationalNumbers*RN=InitRationalNumber(); if(!RN) returnNULL; //关键算法:通分后分子进行加法 fenzi=RN1.fenzi*RN2.fenmu+RN2.fenzi*RN1.fenmu; fenmu=RN1.fenmu*RN2.fenmu; RN->fenzi=fenzi/MaxCommonDivisor(fenzi,fenmu); RN->fenmu=fenmu/MaxCommonDivisor(fenzi,fenmu); returnRN;}RationalNumbers*Subtraction(RationalNumbersRN1,RationalNumbersRN2){//减法运算 //RN1为被减数RN2为减数, intfenzi,fenmu; //计算结果的分子,分母,最大公约数 RationalNumbers*RN=InitRationalNumber(); if(!RN) returnNULL; //关键算法:通分后分子进行减法 fenzi=RN1.fenzi*RN2.fenmu-RN2.fenzi*RN1.fenmu; fenmu=RN1.fenmu*RN2.fenmu; RN->fenzi=fenzi/MaxCommonDivisor(fenzi,fenmu); RN->fenmu=fenmu/MaxCommonDivisor(fenzi,fenmu); returnRN;}RationalNumbers*Multiplication(RationalNumbersRN1,RationalNumbersRN2){//乘法运算 //RN1、RN2为乘数, intfenzi,fenmu; //计算结果的分子,分母,最大公约数 RationalNumbers*RN=InitRationalNumber(); if(!RN) returnNULL; //关键算法:分子分母各自相乘 fenzi=RN1.fenzi*RN2.fenzi; fenmu=RN1.fenmu*RN2.fenmu; RN->fenzi=fenzi/MaxCommonDivisor(fenzi,fenmu); RN->fenmu=fenmu/MaxCommonDivisor(fenzi,fenmu); returnRN;}RationalNumbers*Division(RationalNumbersRN1,RationalNumbersRN2){ //除法运算 //RN1为被除数RN2为除数, intfenzi,fenmu; //计算结果的分子,分母,最大公约数 RationalNumbers*RN=InitRationalNumber(); if(!RN) returnNULL; //关键算法:分子分母交叉相乘 fenzi=RN1.fenzi*RN2.fenmu; fenmu=RN1.fenmu*RN2.fenzi; RN->fenzi=fenzi/MaxCommonDivisor(fenzi,fenmu); RN->fenmu=fenmu/MaxCommonDivisor(fenzi,fenmu); returnRN;}intMaxCommonDivisor(intx,inty){ //求最大公约数 //工具函数,求自然数x、y的最大公约数,用result放回 intz; if(x<y){ z=x; }else{ z=y; } while(1){ if(x%z==0&&y%z==0){ returnz; } z--; } returnERROR;}(3)测试源码main.c/**main.c**Createdon:2014年6月14日*Author:LinBingcheng*/#include<stdio.h>#include"rational_numbers.h"intmain(){ charflag; RationalNumbers*RN1=InitRationalNumber(); RationalNumbers*RN2=InitRationalNumber(); RationalNumbers*RN; while(1){ printf("请输入有理数格式的算式:"); scanf("%d/%d%c%d/%d",&RN1->fenzi,&RN1->fenmu,&flag,&RN2->fenzi, &RN2->fenmu); getchar(); switch(flag){ case'+': RN=Addition(*RN1,*RN2); break; case'-': RN=Subtraction(*RN1,*RN2); break; case'*': RN=Multiplication(*RN1,*RN
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 职业病赔偿标准考核试卷
- 全球家电产品认证要求考核试卷
- 融资政策精准对接考核试卷
- 内河运输企业盈利能力研究考核试卷
- 乐器批发商渠道合作效果评估方法考核试卷
- 2025年中国PU刹车脚轮数据监测研究报告
- 2025年中国IC一卡通管理系统数据监测报告
- 2025年中国49键电子琴数据监测研究报告
- 2025年中国107胶数据监测报告
- 2025至2030年中国高尔夫柄市场分析及竞争策略研究报告
- 水泥搅拌桩施工项目进度管理措施
- 人工智能赋能教师数字素养提升
- 换电站合同范例
- 【超星学习通】马克思主义基本原理(南开大学)尔雅章节测试网课答案
- (CNAS-CL01-2018认可准则)内审核查表
- 2024年模型模具加工合同范本
- 广东省高州市2023-2024学年高一下学期期中考试数学
- 食堂工作人员考核方案
- 国家基本公卫(老年人健康管理)考试复习题及答案
- 临床营养(043)(正高级)高级卫生专业技术资格考试试卷及答案指导(2025年)
- 重庆市旋挖成孔灌注桩工程技术规程
评论
0/150
提交评论