有理数运算c++.docx
《有理数运算c++.docx》由会员分享,可在线阅读,更多相关《有理数运算c++.docx(11页珍藏版)》请在冰豆网上搜索。
![有理数运算c++.docx](https://file1.bdocx.com/fileroot1/2023-1/28/56d8c5e4-c15a-433f-b436-9f60a3b4ba93/56d8c5e4-c15a-433f-b436-9f60a3b4ba931.gif)
有理数运算c++
2015-2016学年第二学期
面向对象程序设计(c++)
大作业说明书
班级名称:
2014计算机科学与技术(对口)
学生姓名:
学号:
题目:
有理数运算系统
指导教师:
王汇彬
计算机与信息工程学院
1.设计思想
1.1题目要求
定义并实现一个有理数类,通过重载运算符+、-、*、/对有理数进行算术运算、通过重载运算符“==”实现判定两个有理数是否相等。
写一个优化函数,它的作用是使有理数约去公分母,使保存的有理数分子和分母之间没有公约数(1除外)。
此外,还要定义一个将有理数转换为实数的函数,再加上构造函数和有理数输出函数。
1.2算法的设计
设有两个有理数a/b和c/d,则有:
(1)有理数相加分子=a*d+b*c;分母=b*d
(2)有理数相减分子=a*d-b*c;分母=b*d
(3)有理数相乘分子=a*c;分母=b*d
(4)有理数相除分子=a*d;分母=b*c
2.软硬件运行环境及开发工具
编程语言:
c++。
开发环境:
Windows7、visualc++6.0。
3.程序图
3.1程序框图
类名
类型
成员名
描述
num
Int
a
分子
Int
b
分母
double
r
转化后的实数
Num
Operator+(num)
加法重载
Num
Operator-(num)
减法重载
Num
Operator*(num)
乘法重载
Num
Operator/(num)
除法重载
Num
Operator==(num)
等于号重载
Void
Show()
显示有理数
Void
Reduction(int,int)
约分
Double
R()
转换为实数
A
Void
Menu(num,int)
显示菜单
3.2系统流程图
如图3-1所示:
图3-1系统流程图
3.3类图
如图3-2所示:
图3-2类图
4.过程论述
4.1知识点
本系统是一个关于有理数运算的系统,涉及到了以下知识点:
(1)类和继承的使用,将参与运算的变量封装在类中,方便使用;
(2)运算符重载,根据用户的需要,选择相应的运算;
(3)友元函数的使用,通过友元函数访问其他类中的私有成员;
(4)模块化的使用,将每种功能都放在相应函数内,分工清晰,方便修改。
4.2部分代码分析
(1)num类将要进行运算的变量和方法封装在一块,方便操作,主要设计代码如下:
classnum{
public:
inta,b;
doubler;
num(inta=0,intb=0){
this->a=a;
this->b=b;
}
friendnumoperator+(constnum&n1,constnum&n2);//运算符重载
friendnumoperator-(constnum&n1,constnum&n2);
friendnumoperator*(constnum&n1,constnum&n2);
friendnumoperator/(constnum&n1,constnum&n2);
friendbooloperator==(constnum&n1,constnum&n2);
doubleconvert(){//将有理数转化实数
r=(double)a/b;
returnr;
}
voidreduction(int,int);//约分,将相同的公约数去掉
voidshow();//显示
};
(2)主界面设计,主要代码如下:
voidA:
:
menu(numn1,numn2,numn3,inta,intb,intc,intd){//主菜单
intn;
charch;
do{
cout<<"***********有理数运算************"<cout<<"\t1.'+'"<cout<<"\t2.'-'"<cout<<"\t3.'*'"<cout<<"\t4.'/'"<cout<<"***********有理数运算************"<cout<<"请选择你所需要的运算符:
";
cin>>n;
switch(n){
case1:
……
break;
case2:
……
break;
case3:
……
break;
case4:
……
break;
}
cout<<"是否继续?
(n/y):
";
cin>>ch;
if(ch=='n'||c=='N')
break;
if(ch=='y'||c=='Y')
continue;
}while(n);
}
(3)选择“1.+”,调用“+”运算符函数,并判断分子分母是否相等,主要代码如下:
case1:
if((a*d)==(b*c)){
cout<<"n1=n2"<}
else{
n3=n1+n2;
cout<<"有理数为:
";
n3.show();
cout<<"约分后为:
";
n3.reduction(a*d+b*c,b*d);
cout<<"转换为实数:
"<}
break;
(4)选择“2.-”,调用“-”运算符函数,并判断分子分母是否相等,主要代码如下:
case2:
if((a*d)==(b*c)){
cout<<"n1=n2"<}
else{
n3=n1-n2;
cout<<"有理数为:
";
n3.show();
cout<<"约分后为:
";
n3.reduction(a*d-b*c,b*d);
cout<<"转换为实数:
"<}
break;
(5)选择“3.*”,调用“*”运算符函数,并判断分子分母是否相等,主要代码如下:
case3:
if((a*d)==(b*c)){
cout<<"n1=n2"<}
else{
n3=n1*n2;
cout<<"有理数为:
";
n3.show();
cout<<"约分后为:
";
n3.reduction(a*c,b*d);
cout<<"转换为实数:
"<}
break;
(6)按“4./”,调用“+”运算符函数,并判断分子分母是否相等,主要代码如下:
case4:
if((a*d)==(b*c)){
cout<<"n1=n2"<}
else{
n3=n1/n2;
cout<<"有理数为:
";
n3.show();
cout<<"约分后为:
";
n3.reduction(a*d,b*c);
cout<<"转换为实数:
"<}
break;
}
5.结果分析
(1)主界面设计,如图5-1所示。
图5-1主界面图
(2)选择“1.+”:
结果如图5-2所示。
图5-2“+”运算图
(3)选择“2.-”:
结果如图5-3所示。
图5-3“-”运算图
(4)选择“3.*”:
结果如图5-4所示。
图5-4“*”运算图
(5)按“4./”:
结果如图5-5所示。
图5-5“/”运算图
6..结论
本次作业的实现过程中,发现自身存在很多不足,很多知识点都没有掌握好。
通过翻阅课本和网上查找资料解决了编程过程中存在的问题,在翻阅资料的同时,发现一个程序不仅仅是可运行的,较好的可读性和较高的运行效率是很重要的。
面向对象程序设计(C++)课程大作业评分表
学号
2014214188
姓名
徐红燕
项目
占比
评分标准
得分
文档
50%
格式规范,逻辑清晰,完整体现软件设计与开发过程
49
程序
10%
程序运行正确
10
10%
使用了三种以上面向对象特性得6分,四种得8分,五种得满分10分
8
20%
程序自主编写,熟悉程序的各部分代码
20
10%
程序复杂度
8
总分
95