c++分数计算器含源码Word文档格式.docx
《c++分数计算器含源码Word文档格式.docx》由会员分享,可在线阅读,更多相关《c++分数计算器含源码Word文档格式.docx(11页珍藏版)》请在冰豆网上搜索。
{
private:
intnume;
//分子
intdeno;
//分母
intGcf(intm,intn);
//辅助函数,返回m和n最大公因数
public:
Fraction(intn=1,intd=1);
virtual~Fraction(){}
voidReduction();
//约分
intGetNume()const{returnnume;
}//返回分子
intGetDeno()const{returndeno;
}//返回分母
voidSetNume(intn);
//设置分子
voidSetDeno(intd);
//设置分母
Fractionoperator+(constFraction&
a)const;
//重载加法符+
Fractionoperator-(constFraction&
//重载加法符-
Fractionoperator*(constFraction&
//重载加法符*
Fractionoperator/(constFraction&
//重载加法符/
};
ostream&
operator<
(ostream&
out,constFraction&
a);
//重载输出运算符<
istream&
operator>
(istream&
in,Fraction&
//重载输入运算符>
//---------------------------------最大公因数函数------------------------------
intFraction:
:
Gcf(intm,intn)
if(n==0)returnm;
//如果n=0,m为最大公因数
elsereturnGcf(n,m%n);
//否者辗转相除
}
//------------------------------------约分函数---------------------------------
voidFraction:
Reduction()
if(deno<
0)//若分母小于0,将符号提前
{
nume=-nume;
deno=-deno;
}
intf=Gcf(abs(nume),deno);
nume=nume/f;
//实现约数
deno=deno/f;
//----------------------------------构造函数-----------------------------------
Fraction:
Fraction(intn,intd):
nume(n),deno(d)
if(deno==0)cout<
"
分母为0"
endl;
//查出异常
Reduction();
//约分
//----------------------------------设置分母函数-------------------------------
SetNume(intn)
nume=n;
//----------------------------------设置分子函数-------------------------------
SetDeno(intd)
if(d==0)cout<
//查出异常
deno=d;
//----------------------------------重载运算符+--------------------------------
FractionFraction:
operator+(constFraction&
a)const
Fractionresult;
result.nume=this->
nume*a.deno+this->
deno*a.nume;
//求和的分子
result.deno=this->
deno*a.deno;
//求和的分母
result.Reduction();
//约分
returnresult;
//返回和
//----------------------------------重载运算符---------------------------------
operator-(constFraction&
nume*a.deno-this->
//求差的分子
//求差的分母
//返回差
//----------------------------------重载运算符*--------------------------------
operator*(constFraction&
nume*a.nume;
//求积的分子
//求积的分母
//返回积
//----------------------------------重载运算符/--------------------------------
operator/(constFraction&
if(a.nume==0)cout<
除数为0"
//如果除数为0,输出异常
nume*a.deno;
//求商的分子
//求商的分母
//返回商
//----------------------------------重载运算符<
--------------------------------
a)
out<
a.GetNume()<
/"
a.GetDeno();
//按一定格式输出分数
returnout;
//返回输出流
}
//----------------------------------重载运算符>
charch;
//接收字符
intm,n;
//定义分子和分母
in>
m;
//输入分子
ch;
//输入/
if(ch!
='
/'
)cout<
非法字符"
n;
//输入分母
if(n==0)cout<
//如果分母为0,输出异常
a.SetNume(m);
//设置分子
a.SetDeno(n);
//设置分母
a.Reduction();
returnin;
//返回输入流
intmain(void)
Fractionobj1,obj2,result;
//定义两个分数和结果
charindex,ch;
//定义符号
ifstreaminfile("
input.txt"
ios:
in);
//以输入的方式打开文件
if(!
infile)//若文件打开失败
cout<
打开文件input.txt失败!
exit
(1);
ofstreamoutfile("
output.txt"
app);
//以输出的方式打开文件
outfile)//若文件打开失败
打开文件output.txt失败"
outfile<
---------------------本次计算结果如下--------------------"
for(;
;
)//无限次循环直到求解完成
infile>
obj1;
//输入第一个分数
index;
//输入需要执行的操作符号
obj2;
//输入第二个分数
//选择继续或者计算结果
if(index=='
+'
)result=obj1+obj2;
//加法
elseif(index=='
-'
)result=obj1-obj2;
//减法
*'
)result=obj1*obj2;
//乘法
)result=obj1/obj2;
//除法
else
{
system("
PAUSE"
);
return0;
}
正在计算"
obj1<
"
index<
obj2<
..."
ofstreamoutfile("
if(!
outfile)
cout<
exit
(1);
outfile<
="
result<
//输出结果到output.txt
计算完成,结果保存在output.txt中"
endl<
if(ch=='
'
)continue;
//若遇到"
,继续执行
elseif(ch=='
)//若遇到"
,计算结果
outfile<
-------------------------谢谢使用------------------------"
break;
outfile.close();
//文件输出流关闭
infile.close();
//文件输出流关闭
system("
return0;
2、实验现象及结论(应用文字和程序运行的截图说明程序测试现象,并解释结果)
input.txt输入截图如下:
Jcsy.exe执行截图如下:
output.txt输出截图如下:
jcsy.exe执行截图如下:
Output.txt输出截图如下:
3、实验总结(是否成功解决问题,总结实验中最有价值的内容,程序能够在哪些方面进一步改善,自我评价成败得失)
试验中,我们按照从简单到复杂的方法,一步一个脚印编写代码,使得程序不易发生错误,并且容易更正,编写出来的程序代码简洁明朗,效率较高;
通过对例题的学习,我们最终将正确的代码编写出,并在不断地修改之下做到方便用户使用的要求;
编码的速度有一个从慢到快的过程,在本次试验中,我们的速度依然比较慢,这看出我们平时编码比较少,缺乏熟练度,并对算法了解不深入;
但是我们的代码看起来仍然有些凌乱,效率还没有带到真正的高效,每次运行都需要等待几秒钟。
再以后我们将通过练习基础功,简化程序代码,实现简单代码完善功能的理想。
1.编码要尽量使程序简单,采用最切实可靠的算法,实现封装,不同部分的代码应分工明确,最后由主函数统一调用;
2.编写完成后先自己检查一遍代码,然后由机器检测,找出错误的根源,从不同角度思考如何解决问题;
3.测试时应尽可能输入各种可能情况的数据以确保程序准确无误。
4.应避免任何可能的漏洞,使代码的可用性和可靠性增强。
5.试验中,我按照从简单到复杂的方法,一步一个脚印编写代码,使得程序不易发生错误,并且容易更正,编写出来的程序代码简洁明朗,效率较高;
6.通过对例题的学习,我最终将正确的代码编写出,并在不断地修改之下做到方便用户使用的要求;
7.编码的速度有一个从慢到快的过程,在本次试验中,我的速度依然比较慢,这看出我平时编码比较少,缺乏熟练度,并对算法了解不深入;
8.但是我的代码看起来仍然有些凌乱,效率还没有带到真正的高效,每次运行都需要等待几秒钟。
再以后我将通过练习基础功,简化程序代码,实现简单代码完善功能的理想。
本次试验中,我们先将书上的代码编译通过,通过讨论,认为书上检查异常的方式不便于理解,于是直接采用输出到dos窗口的方式,所以没有使用到utility.h头文件,同时,由于我们电脑上安装的编译系统不方便对.h文件进行调试修改,所以我们采用的cpp文件,在一个cpp文件中写下所有代码。
对于txt文件输出的格式,我们做的稍微人性化,界面简洁,容易区分