首页 分数计算器

分数计算器

举报
开通vip

分数计算器分数计算器 C++语言实习报告 题 目: 分数计算器 指导教师: ____ 院 系: 班 级: 姓 名 学 号: ___ 完成时间: 目 录 一、设计的任务要求…………………………………………………………..1 二、程序综述…………………………………………………………………..1 1(程序设计基本思路………………………………………....................1 2(主要程序功能设计……………………………………………………1 三、程序设计流程图…………………………………………………………..4...

分数计算器
分数计算器 C++语言实习报告 题 目: 分数计算器 指导教师: ____ 院 系: 班 级: 姓 名 学 号: ___ 完成时间: 目 录 一、设计的任务要求…………………………………………………………..1 二、程序综述…………………………………………………………………..1 1(程序设计基本思路………………………………………....................1 2(主要程序功能设计……………………………………………………1 三、程序设计流程图…………………………………………………………..4 四、程序清单…………………………………………………………………..5 五、结束语……………………………………………………………………..13 六、参考文献…………………………………………………………………..15 一、设计的任务要求 )该程序是分数计算器,程序的一些算术功能没有完成,请编写函数,将程(1 序完成,要求界面提示清楚,便于操作。 (2)程序的很多逻辑功能没有完成,如大于、小于以及分数与整数的逻辑比较,请编写函数,将程序完成,要求界面提示清楚,便于操作。 二、程序综述 随着科学的进步和科技的发展,计算机的应用可以说是家喻户晓,但是随着计算机应用领域的不断扩大,计算机已经深入到社会和生活的各个领域,而对于我们21世纪的青年来说,在社会主义发展的新阶段,更应该了解和掌握时代的脉搏,通晓计算机的知识和识别计算机的语言,在掌握了C++语言的概念和语法后,能熟悉掌握面向对象程序设计的编程方法及各种编程技巧,并能够利用简洁的语句编写出高效、完整,以解决在生活中各个方面遇到的具体问题,且为程序语言的软件编程奠定基础,也是在C语言程序的基础之上,使我对计算机语言有了更进一步的理解,和更深一步的认知。同时通过用C++程序设计语言的应用,可以让我们提高学生的C++编程水平,让我们能够学有所获,灵活的运用所学知识,来实现机器语言。 1(程序设计基本思路 若想完成程序设计首先需要定义一个分数类即CFraction,并设置分子和分母,以及将分数转换为对应的小数、返回分数的绝对值、分子分母的约分和置换功能,在执行计算器功能时,需要进行四则混合运算和逻辑运算,由于是特殊的函数成员对象之间相互运算,所以需要使用运算符重载功能。故有: 在设计四则混合运算时: const CFraction&operator+=(int num); //重载+=运算符 const CFraction&operator-=(int num); //重载-=运算符 const CFraction&operator*=(int num); //重载*=运算符 在设计逻辑运算时: (幂)运算符重载 CFraction operator^(const CFraction&basetra,int exp); // bool operator==(const CFraction&leftfra,const CFraction&rightfra); //逻辑运算符 bool operator!=(const CFraction&leftfra,const CFraction&rightfra); bool operator>=(const CFraction&leftfra,const CFraction&rightfra); ostream&operator<<(ostream&os,const CFraction&fra); //输出运算符重载 1 istream&operator>>(istream&is,CFraction&fra); //输入运算符重载 在进行分数运算的时候,由于分子不能为0,所以有: void CFraction::Setnume(int newnume){nNume=newnume;} void CFraction::Setdeno(int newdeno) { if(newdeno!=0) nDeno=newdeno; else { cout<<"错误:分母不可以为0 ~\n"<<"按任意键继续"; cin>>AnyChar; abort(); } } 2(主要程序功能设计: 该程序是分数计算器,所以要完成分数与分数之间的加、减、乘、除、乘幂等运算和分数与整数之间的加、减、乘、除、乘幂等运算,以及分数与分数,分数与整树之间的逻辑功能运算。 程序中涉及到的类的定义和主要运用函数的列举: class CFraction //分数类定义 { private: int nNume; //分子 int nDeno; //分母 char AnyChar; //定义一个字符变量 public: CFration(); //构造函数 CFration(int nume,int deno); //构造函数 int Getnume()const; //返回分子,const成员函数,不能修改数据成员 int Getdeno()const; //返回分母 double Decimal()const; //将分数转换为对应的小数 2 CFraction Absval()const; //返回分数的绝对值 void Setnume(int newnume); //设置分子 void Setdeno(int newdeno); //设置分母 void Simplify(); //约分 void Recip(); //分子分母置换 const CFraction&operator+=(int num); //重载+=运算符 const CFraction&operator-=(int num); const CFraction&operator*=(int num); CFraction(){ nNume=0; nDeno=1;} //默认构造函数(=0/1) CFraction(int nume,int deno){nNume=nume;nDeno=deno;} }; 四则混合运算程序模块: 由于是特殊的函数成员对象之间相互运算,所以需要使用运算符重载功能,以便 用来计算数据之间的大小。 CFraction operator+(const CFraction&leftfra,const CFraction&rightfra); CFraction operator+(const CFraction&leftfra,int rightnum); CFraction operator-(const CFraction&leftfra,const CFraction&rightfra); CFraction operator-(const CFraction&leftfra,int rightnum); CFraction operator*(const CFraction&leftfra,const CFraction&rightfra); CFraction operator*(const CFraction&leftfra,int rightnum); CFraction operator^(const CFraction&basetra,int exp); //(幂)运算符重载 逻辑运算程序模块: 由于是特殊的函数成员对象之间相互运算,所以需要使用运算符重载功能,以便 用来比较数据之间的大小。 bool operator==(const CFraction&leftfra,const CFraction&rightfra); //逻辑运算符 bool operator!=(const CFraction&leftfra,const CFraction&rightfra); bool operator>=(const CFraction&leftfra,const CFraction&rightfra); istream&operator>>(istream&is,CFraction&fra); //输入运算符重载 istream&operator>>(istream&is,CFraction&fra); //输入运算符重载 3 三、程序设计流程图 开始执行 [2]是否输入选择项 做逻辑[1] 运算 [2] [1]是否做混合 运算 [1]加法 输入选择项 [2]减法 [3]乘法 输入选择项 [1]分数与分数 [2]分数与整数 最后输出结果 是否返回上一 级[1]或[2] 是否退出 [0] 结束 4 四、程序清单 #include #include #include #include using namespace std; class CFraction //分数类定义 { private: int nNume; //分子 int nDeno; //分母 char AnyChar; //定义一个字符变量 public: CFration(); //构造函数 CFration(int nume,int deno); //构造函数 int Getnume()const; //返回分子,const成员函数,不能修改数据成员 int Getdeno()const; //返回分母 double Decimal()const; //将分数转换为对应的小数 CFraction Absval()const; //返回分数的绝对值 void Setnume(int newnume); //设置分子 void Setdeno(int newdeno); //设置分母 void Simplify(); //约分 void Recip(); //分子分母置换 const CFraction&operator+=(int num); //重载+=运算符 const CFraction&operator-=(int num); const CFraction&operator*=(int num); CFraction(){ nNume=0; nDeno=1;} //默认构造函数(=0/1) CFraction(int nume,int deno){nNume=nume;nDeno=deno;} }; 5 int GCF(int x,int y); //求x、y的最大公因子 CFraction operator+(const CFraction&leftfra,const CFraction&rightfra); CFraction operator+(const CFraction&leftfra,int rightnum); CFraction operator-(const CFraction&leftfra,const CFraction&rightfra); CFraction operator-(const CFraction&leftfra,int rightnum); CFraction operator*(const CFraction&leftfra,const CFraction&rightfra); CFraction operator*(const CFraction&leftfra,int rightnum); CFraction operator^(const CFraction&basetra,int exp); //(幂)运算符重载 bool operator==(const CFraction&leftfra,const CFraction&rightfra); //逻辑运算符 bool operator!=(const CFraction&leftfra,const CFraction&rightfra); bool operator>=(const CFraction&leftfra,const CFraction&rightfra); ostream&operator<<(ostream&os,const CFraction&fra); //输出运算符重载 istream&operator>>(istream&is,CFraction&fra); //输入运算符重载 int CFraction::Getnume()const{return nNume;} int CFraction::Getdeno()const{return nDeno;} double CFraction::Decimal()const{return double(nNume)/double(nDeno);} CFraction CFraction::Absval()const { CFraction returnValue(abs(nNume),abs(nDeno)); return returnValue; } void CFraction::Setnume(int newnume){nNume=newnume;} void CFraction::Setdeno(int newdeno) { if(newdeno!=0) nDeno=newdeno; else { cout<<"错误:分母不可以为0 ~\n"<<"按任意键继续"; cin>>AnyChar; abort(); } 6 } void CFraction::Simplify() { int r=GCF(nNume,nDeno); nNume/=r; nDeno/=r; } void CFraction::Recip() { int temp=nNume; nNume=nDeno; nDeno=temp; } const CFraction& CFraction::operator+=(int rightnum) { CFraction newrhs(rightnum,1); return(*this+newrhs); } const CFraction& CFraction::operator-=(int rightnum) { CFraction newrhs(rightnum,1); return(*this-newrhs); } const CFraction& CFraction::operator*=(int rightnum) { CFraction newrhs(rightnum,1); return(*this*newrhs); } int GCF(int x,int y) //辗转相除求x、y的最大公约数 { int r=x%y; if(r==0) return y; else return GCF(y,r); 7 } CFraction operator+(const CFraction&leftfra,const CFraction&rightfra) { CFraction sum; int newnum=(leftfra.Getnume()*rightfra.Getdeno())+(rightfra.Getnume()*leftfra.Getdeno ()); int newden=(leftfra.Getdeno()*rightfra.Getdeno()); sum.Setnume(newnum); sum.Setdeno(newden); sum.Simplify(); return sum; } CFraction operator+(const CFraction&leftfra,int rightnum) { CFraction newrhs(rightnum,1); return leftfra+newrhs; } CFraction operator-(const CFraction&leftfra,const CFraction&rightfra) { CFraction cha; int newnum=(leftfra.Getnume()*rightfra.Getdeno())-(rightfra.Getnume()*leftfra.Getdeno ()); int newden=(leftfra.Getdeno()*rightfra.Getdeno()); cha.Setnume(newnum); cha.Setdeno(newden); cha.Simplify(); return cha; } CFraction operator-(const CFraction&leftfra,int rightnum) { CFraction newrhs(rightnum,1); return leftfra-newrhs; 8 } CFraction operator*(const CFraction&leftfra,const CFraction&rightfra) { CFraction ji; int newnum=(leftfra.Getnume()*rightfra.Getnume()); int newden=(leftfra.Getdeno()*rightfra.Getdeno()); ji.Setnume(newnum); ji.Setdeno(newden); ji.Simplify(); return ji; } CFraction operator*(const CFraction&leftfra,int rightnum) { CFraction newrhs(rightnum,1); return leftfra*newrhs; } CFraction operator^(const CFraction&basefra,int exp) { CFraction returnValue; returnValue.Setnume(pow(basefra.Getnume(),exp)); returnValue.Setdeno(pow(basefra.Getdeno(),exp)); return returnValue; } bool operator==(const CFraction&leftfra,const CFraction&rightfra) { return leftfra.Decimal()==rightfra.Decimal(); } bool operator!=(const CFraction&leftfra,const CFraction&rightfra) { return leftfra.Decimal()!=rightfra.Decimal(); } bool operator!=(const CFraction&leftfra,int rightnum) { return leftfra.Decimal()!=rightnum; } bool operator>=(const CFraction&leftfra,const CFraction&rightfra) 9 { return leftfra.Decimal()>=rightfra.Decimal(); } ostream&operator<<(ostream&os,const CFraction&fra) { CFraction temp=fra.Absval(); int numer=fra.Getnume(); int denom=fra.Getdeno(); if((!((numer>0&&denom>0)||(numer<0&&denom<0)))&&fra!=0) os<<'-'; if(temp.Getnume()==0||temp.Getdeno()==1) os<>(istream&is, CFraction&fra)//is为输入流,fra为待输入的分数 { int newnum,newden; char slash=' '; do { is>>newnum>>slash>>newden; } while(slash!='/'); fra.Setnume(newnum); fra.Setdeno(newden); return is; }//*********************************************// int main() { CFraction f1; CFraction f2; int i,x=1,y=1,z=1; while(x!=0) { 10 cout<<"********按数字选择功能********\n"; cout<<"[1]四则运算&幂运算\n"; cout<<"[2]逻辑运算\n"; cout<<"[0]退出程序\n\n"; cin>>x; y=1; while(x==1&&y!=0) { cout<<"********按数字选择功能********\n"; cout<<"[1]加法\n"; cout<<"[2]减法\n"; cout<<"[3]乘法\n"; cout<<"[4]除法\n"; cout<<"[5]乘方\n"; cout<<"[0]返回上一级\n\n"; cin>>y; if(y==1||y==2||y==3||y==4) { cout<<"********按数字选择功能********\n"; cout<<"[1]两个分数\n"; cout<<"[2]分数与整数\n"; cout<<"[0]返回上一级 \n\n"; cin>>z; if(z==1) { cout<<"输入第1个分数:\t"; cin>>f1; cout<<"\n输入第2个分数:\t"; cin>>f2; f1.Simplify(); f2.Simplify(); cout<<'\n'<>f1; cout<<"\n输入整数:\t"; cin>>i; f1.Simplify(); if(y==1)cout<>f1; cout<<"\n输入幂数:\t"; cin>>i; f1.Simplify(); 12 CFraction exp=f1^i; cout<<"\n"<>f1; cout<<"\n输入第2个分数:\t"; cin>>f2; f1.Simplify(); f2.Simplify(); cout<<"\n用布尔型变量表示,1为真,0为假\n\n"; cout<=f2) cout<="<
本文档为【分数计算器】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_358746
暂无简介~
格式:doc
大小:41KB
软件:Word
页数:17
分类:生活休闲
上传时间:2017-11-15
浏览量:348