版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
有理数四则运算------------------------------------有理数四则运算------------------------------------有理数四则运算有理数四则运算数据结构实验报告题目:有理数四则运算学院计算机学院专业软件工程年级班别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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2016新编马原课后练习题及答案
- 产教融合校企合作的主要模式
- 2025年四年级班主任下学期工作计划范文
- 2025年团总支红十字协会工作计划范文
- 2025年护理作计划总结
- Unit 4 Last Weekend Lesson1(说课稿)-2023-2024学年人教新起点版英语五年级下册
- 2025年大学生学习工作计划范文
- Unit11 Trees第3课时(说课稿)-2023-2024学年沪教牛津版(深圳用)英语六年级上册
- Unit 4 position Lesson 2 Let's practice(说课稿)-2024-2025学年北师大版(三起)英语五年级上册
- 2025年高一实习班主任工作计划怎么写
- 四年级数学(除数是两位数)计算题专项练习及答案
- 中考字音字形练习题(含答案)-字音字形专项训练
- 社区矫正个别教育记录内容范文
- 常见妇科三大恶性肿瘤的流行及疾病负担研究现状
- CTD申报资料撰写模板:模块三之3.2.S.4原料药的质量控制
- (正式版)JTT 1482-2023 道路运输安全监督检查规范
- 围手术期血糖的管理
- 2024年度医疗器械监督管理条例培训课件
- 100以内不进位不退位加减法练习题
- 企业安全生产评估报告
- 水库大坝深基坑开挖专项方案样本
评论
0/150
提交评论