




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验设计方案1、实验内容与目的(简单介绍实验内容,说明实验目的)实验目的:设计一个分数计算器:1 )实现输入 ,输出 ,+,- , * , /运算符的 重载;2)实现分子分母的约分与规格化。实验内容:你的具体选择(要详细)实现分数计算器的屏幕输入和输出:1)输入采用文件(input.txt) 输入,可以有 任意个二元分数表达式,表达式之间的分隔符自定义;2)输出到文件(output.txt)2、实验准备工作(阐述解决问题所涉及的算法思想,至少要画一个算法流程图来说明)以下为循环计算二元分数计算式的流程图:在实验中还需要面对六个运算符重载,通过运算符重载,我们可以简单的使用分数 计算,而不需要关
2、心它的结构,运算符重载,我们根据基本的数学定理,将加减乘除包 装,并重载了输入输出运算符,这样,在输入输出时便可直接输出用户方便接收的格式。、实验步骤、测试与结果分析1、源程序的设计(在此附上源程序( cpp 文件)清单)#include#include #include using namespace std;/ 创建分数类 class Fractionprivate:int nume;int deno;int Gcf(int m,int n);和 n 最大公因数public:Fraction(int n=1,int d=1);virtualFraction()void Reduction(
3、);int GetNume() constreturn nume;int GetDeno() constreturn deno;void SetNume(int n);void SetDeno(int d);Fraction operator+(const Fraction &a) const; Fraction operator-(const Fraction &a) const; Fraction operator*(const Fraction &a) const; Fraction operator/(const Fraction &a) const;ostream &operator
4、 (ostream &out,const Fraction &a); (istream &in,Fraction &a); 符/ 最大公因数函数int Fraction:Gcf(int m,int n) if(n=0) return m; 为最大公因数else return Gcf(n,m%n); / 约分函数 void Fraction:Reduction()/ 分子/ 分母/ 辅助函数,返回 m/ 约分/ 返回分子/ 返回分母/ 设置分子/ 设置分母/ 重载加法符 +/ 重载加法符 - / 重载加法符 * / 重载加法符 / 重载输出运算符/ 重载输入运算/ 如果 n=0 , m/ 否者辗
5、转相除if(deno0) / 若分母小于 0 ,将 符号提前 nume=-nume; deno=-deno;int f=Gcf(abs(nume),deno);nume=nume/f; / 实现约数 deno=deno/f;/ 构造函数 Fraction:Fraction(int n,int d):nume(n),deno(d)if(deno=0) cout 分母为 0endl; / 查出异常 Reduction(); / 约分/ 设置分母函数 void Fraction:SetNume(int n)nume=n;Reduction();/ 设置分子函数 void Fraction:SetDe
6、no(int d)if(d=0) cout 分母为 0nume*a.deno+this-deno*a.nume;/ 求和的分子result.deno=this-deno*a.deno;/ 求和的分母result.Reduction();/ 约分return result;/ 返回和/ 重载运算符 Fraction Fraction:operator-(const Fraction &a) constFraction result;result.nume=this-nume*a.deno-this-deno*a.nume;/ 求差的分子result.deno=this-deno*a.deno;/
7、 求差的分母result.Reduction();/ 约分return result;/ 返回差/ 重载运算符 *Fraction Fraction:operator * (const Fraction &a) constFraction result;result.nume=this-nume*a.nume;/ 求积的分子result.deno=this-deno*a.deno;/ 求积的分母result.Reduction();/ 约分return result;/ 返回积/ 重载运算符 /Fraction Fraction:operator / (const Fraction &a) c
8、onstif(a.nume=0) cout 除数为 0nume*a.deno;/ 求商的分子result.deno=this-deno*a.nume;/ 求商的分母result.Reduction();/ 约分return result;/ 返回商/ 重载运算符 ostream &operator (ostream &out,const Fraction &a)outa.GetNume()/istream &operator (istream &in,Fraction &a) char ch; int m,n;/ 接收字符/ 定义分子和分母inm;inch;if(ch !=/) cout 非法
9、字符 n;if(n=0) cout 分母为 0endl; 出异常/ 输入分子/ 输入 / 输入分母/ 如果分母为 0 ,输a.SetNume(m);a.SetDeno(n);a.Reduction();return in;int main(void)Fraction obj1,obj2,result;char index,ch;ifstream infile(input.txt,ios:in);if(!infile)cout 打开文件 input.txt 失败! endl; exit(1);ofstream outfile(output.txt,ios:app); if(!outfile)co
10、ut 打开文件 output.txt 失败 endl; exit(1);outfileobj1; infileindex;符号infileobj2; infilech;果/ 设置分子/ 设置分母/ 约分/ 返回输入流/ 定义两个分数和结果/ 定义符号/ 以输入的方式打开文件/ 若文件打开失败/ 以输出的方式打开文件/ 若文件打开失败endl;/ 无限次循环直到求解/ 输入第一个分数/ 输入需要执行的操作/ 输入第二个分数/ 选择继续或者计算结if(index=+) result=obj1+obj2;/ 加法else if(index=-) result=obj1-obj2; / 减法else
11、if(index=*) result=obj1*obj2;/ 乘法else if(index=/) result=obj1/obj2;/ 除法else system(PAUSE); return 0;cout 正在计算 obj1 index obj2.endl;ofstream outfile(output.txt,ios:app); if(!outfile)cout 打开文件 output.txt 失败 endl; exit(1);outfileobj1 index obj2 = resultendl;/ 输 出 结 果 到 output.txt/ 若遇到; ,继续执行 / 若遇到= ,计算
12、结果谢谢使用cout计算完成,结果保存在 output.txt中endlendl;if(ch=;) continue;else if(ch=)outfileendlendl;break;outfile.close();infile.close();/ 文件输出流关闭/ 文件输出流关闭system(PAUSE);return 0;2、实验现象及结论(应用文字和程序运行的截图说明程序测试现象,并解释结果)input.txt输入截图如下:Jcsy.exe 执行截图如下:7 B:Progras FilesCYuanbinwvteMp_ exe 正在计算S *耳算完成,结果保存在output,txt中
13、正在计M1/6 * 5/6计算完成.结果慄存在output,txt中请按任意犍继续-output.txt输出截图如下:in put.txt输入截图如下:jcsy.exe 执行截图如下:B: ProgrFilesXCYuYaiiVbinYwteMp,. exe 正在计算2/5 +计算完戍,结果保存在output _txt中正在计算4/5 # 1/78 计算完成,结果保存在oiitput.txt中请按任意犍继续.- Output.txt输出截图如下:本次计算结果如下文件匹)编辑 格式 查看边 辖助I1/2 + 1/2 = 1/11/6 * 5/6 = 5/36谢谢使用本次计算结果如下2/5 + 5
14、/24 = 73/120V5 / 1/78 = 312/5谢谢使用一一3、实验总结(是否成功解决问题,总结实验中最有价值的内容,程序能够在哪些方面进步改善,自我评价成败得失)试验中,我们按照从简单到复杂的方法,一步一个脚印编写代码,使得程序不易发 生错误,并且容易更正,编写出来的程序代码简洁明朗,效率较高;通过对例题的学习,我们最终将正确的代码编写出,并在不断地修改之下做到方便 用户使用的要求;编码的速度有一个从慢到快的过程,在本次试验中,我们的速度依然比较慢,这看 出我们平时编码比较少,缺乏熟练度,并对算法了解不深入;但是我们的代码看起来仍然有些凌乱,效率还没有带到真正的高效,每次运行都需
15、要等待几秒钟。再以后我们将通过练习基础功,简化程序代码,实现简单代码完善功能 的理想。1. 编码要尽量使程序简单,采用最切实可靠的算法,实现封装,不同部分的代码应分工 明确,最后由主函数统一调用;2. 编写完成后先自己检查一遍代码,然后由机器检测,找出错误的根源,从不同角度思 考如何解决问题;3. 测试时应尽可能输入各种可能情况的数据以确保程序准确无误。4. 应避免任何可能的漏洞,使代码的可用性和可靠性增强。5. 试验中,我按照从简单到复杂的方法,一步一个脚印编写代码,使得程序不易发生错 误,并且容易更正,编写出来的程序代码简洁明朗,效率较高;6. 通过对例题的学习,我最终将正确的代码编写出,并在不断地修改之下做到方便用户 使用的要求;7. 编码的速度有一个从慢到快的过程,在本次试验中,我的速度依然比较慢,这看出我 平时编码比较少,缺乏熟练度,并对算法了解不深入;8. 但是我的代码看起来仍然有些凌乱,效率还没有带
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025江西南昌市劳动保障事务代理中心招聘劳务派遣人员1人考试参考试题及答案解析
- 2025年数学试卷钓鱼答案及答案
- 2025年福建福路通城乡发展集团有限公司招聘考前自测高频考点模拟试题及答案详解1套
- 2025年中共昆明市委党校引进高层次人才(5人)考前自测高频考点模拟试题及答案详解(易错题)
- 2025北京政法职业学院招聘7人考前自测高频考点模拟试题及答案详解(必刷)
- 2025年湖南财盛国际贸易有限公司公开考前自测高频考点模拟试题附答案详解(典型题)
- 2025年黄山市中医医院招聘5人考前自测高频考点模拟试题及答案详解(名师系列)
- 2025海南保亭黎族苗族自治县残疾人联合会公益性岗位人员招聘1人备考考试题库附答案解析
- 2025山西省事业单位补充招聘考试模拟试题及答案解析
- 2025事业单位条例试题及答案
- DB11T 1493-2017 城镇道路雨水口技术规范
- 2024-2025学年七年级上学期期中考试道德与法治试题
- 山东省济宁市邹城市第十中学2024-2025学年上学期八年级第一次月考数学试题
- 高中化学全套思维导图(高清版)
- 重点难点 议论文阅读-2024年中考语文复习专练(原卷版)
- 阅读还原六选五15篇(期中复习)八年级英语上册基础知识专项讲练(人教版)
- 高中综合实践课程:设计未来城市(课件)
- 幼儿园班级幼儿图书目录清单(大中小班)
- 2020年检验检测认证企业发展战略和经营计划
- DL-T5704-2014火力发电厂热力设备及管道保温防腐施工质量验收规程
- 云南师大附中2024年数学高一下期末联考试题含解析
评论
0/150
提交评论