c实现分数重载实现分数加减乘除重载函数运算符重载.docx
《c实现分数重载实现分数加减乘除重载函数运算符重载.docx》由会员分享,可在线阅读,更多相关《c实现分数重载实现分数加减乘除重载函数运算符重载.docx(9页珍藏版)》请在冰点文库上搜索。
![c实现分数重载实现分数加减乘除重载函数运算符重载.docx](https://file1.bingdoc.com/fileroot1/2023-6/8/f2f2ddea-fcff-40a9-af93-9d7e58955c30/f2f2ddea-fcff-40a9-af93-9d7e58955c301.gif)
c实现分数重载实现分数加减乘除重载函数运算符重载
昆明理工大学理学院
信息与计算科学专业操作性实验报告
年级:
2010级姓名:
学号:
指导教师:
实验课程名称:
开课实验室:
理学院机房
实验成绩:
学风(5)
观察能力(15)
操作能力(30)
调试能力(50)
其它
总分
实验内容:
1.实验/作业题目:
写一个分数的程序,应用重载函数,使运算符重载,
并实现分数的加减乘除。
对1~100分内各个分数段给出ABCD的评价
2.实验/作业课时:
2个课时
3.实验过程(包括实验环境、实验内容的描述、完成实验要求的知识或技能):
先写程序,再写流程图。
#include
usingnamespacestd;
classfraction
{
private:
intabove;//分子
intbelow;//分母
voidreduction();//约分
fractionmakeCommond(fraction);//通分
public:
fraction(inta=0,intb=1)
{//构造函数
above=a;below=b;
}
fractionoperator+(fraction);//两分数相加
fractionoperator-(fraction);//两分数相减
fractionoperator*(fraction);//两分数相乘
fractionoperator/(fraction);//两分数相除
voiddisplay();//显示分数
voidinput();//输入分数
};
//***********分数的约分*********//
voidfraction:
:
reduction()
{
inti,comdiv,small,max;
if(above{
small=above;
max=below;
}
else
{
small=below;
max=above;
}
for(i=small;i>1;i--)
{
if(small%i==0&max%i==0)
break;
}
comdiv=i;//最大公约数
if(i!
=0)
{
above/=i;
below/=i;
}
}
//*************分数的通分*************//
fractionfraction:
:
makeCommond(fractionfrac)
{
intb1=below,b2=frac.below,m,s;
if(b1>b2)
{
m=b1%b2;
s=b2;
}
else
{
m=b2%b1;
s=b1;
}
while(m>0)
{
intres=s%m;
s=m,m=res;
}
intsmall=(b1*b2)/s;
above=above*(small/below);
frac.above=frac.above*(small/frac.below);
below=small;
frac.below=small;
returnfrac;
}
//***************分数的相加*************//
fractionfraction:
:
operator+(fractionfr)
{
fractionf3;
f3.above=above*fr.below+fr.above*below;
f3.below=below*fr.below;
f3.reduction();
returnf3;
}
//*********************分数的相减***************//
fractionfraction:
:
operator-(fractionfr)
{
fractionf3;
f3.above=above*fr.below-fr.above*below;
f3.below=below*fr.below;
f3.reduction();
returnf3;
}
//*******************分数的相乘****************//
fractionfraction:
:
operator*(fractionfr)
{
fractionf3;
f3.above=above*fr.above;
f3.below=below*fr.below;
f3.reduction();
returnf3;
}
//******************分数的相除***********//
fractionfraction:
:
operator/(fractionfr)
{
fractionf3;
f3.above=above*fr.below;
f3.below=below*fr.above;
f3.reduction();
returnf3;
}
//*********************分数的输出*************//
voidfraction:
:
display()
{
cout<}
//*******************分数的输入****************//
voidfraction:
:
input()
{
cout<<"请输入分数的分子:
";
cin>>above;
while(true)
{
cout<<"请输入分数的分母(不等于零):
";
cin>>below;
if(below==0)
{
cout<<"分母不能为零!
";
}
else
break;
};
}
intmain()
{
fractionf1(4,20),f2(80,400);
f1.input();
f2.input();
f1.display();
f2.display();
cout<<"分数加法"<f1.operator+(f2).display();
cout<<"分数减法"<f1.operator-(f2).display();
cout<<"分数乘法"<f1.operator*(f2).display();
cout<<"分数除法"<f1.operator/(f2).display();
return0;
}
4.算法描述、流流程图或程序图:
5.实验数据和实验结果(用屏幕图形表示,可另加附页):
6.心得体会:
分数的加、减、乘、除,用重载函数重载运算符,使简便,分数的
加、减、乘、除,要构造函数,还要实现约分、通分,还是多看、多练、
多写、多想。
评分标准学风--报告格式规范,文字清晰观察能力--正确描述和理解需要操作的问题
操作能力--正确输入程序,熟悉编程环境调试能力--熟练使用调试功能解决程序错误