用C++写有理数运算Word文档格式.docx
- 文档编号:5907730
- 上传时间:2023-05-05
- 格式:DOCX
- 页数:12
- 大小:163.25KB
用C++写有理数运算Word文档格式.docx
《用C++写有理数运算Word文档格式.docx》由会员分享,可在线阅读,更多相关《用C++写有理数运算Word文档格式.docx(12页珍藏版)》请在冰点文库上搜索。
同时当从键盘输入一个有理数的分子与分母,或者两数进行运算后,有理数之间并不是最优化的形式,分子与分母之间仍可以进行化简,所以,针对这种情况仍需要定义一个函数来使有理数的分数形式化为最简,以实现有理数的最优化。
以上算法都实现了之后,要对每一步都进行输出显示,包括数据、计算及计算结果等,所以要再定义一个输出函数来实现有理数分数形式、实数形式及最优形式的输出。
同时,为了避免分母为零的错误输入与操作,在函数体内,要将各种错误的操作情况一一列出,来避免错误的有理数。
二、方案设计与论证
算法的设计
设有两个有理数a/b和c/d,则有:
(1)有理数相加分子=a*d+b*c;
(2)有理数相减分子=a*d-b*c;
(3)有理数相乘分子=a*c;
(4)有理数相除分子=a*d;
定义一个有理数类num(),通过构造函数实现对数据的初始化;
然后将运算符+、-、*、/重载为该类的成员函数,再在函数内按照上述方法将两个有理数之间的加、减、乘、除运算实现,;
再同样通过重载运算符==实现判定两个有理数是否相等,判定两个数是否相等的方法为判断一个数的分子与另一个数的分母相乘的值是否与该数的分母与另一个数的分子相乘的值相等;
再定义一个可对有理数约分的函数yuefen(),在函数体中首先要找到分子与分母的最大公约数,再将分子与分母同时除以这个最大公约数,优化函数在创建有理数对象时应执行,在执行其它各种运算之后也需执行它,这样可保证所存储的有理数随时都是最优的。
然后定义一个转换函数realnum(),将每一个有理数都好转换成实数形式,且同样在执行各种运算后都执行它。
最后定义一个函数show(),实现对数据的输出,同时为了避免分母为零的错误输入,当一个有理数的分母输入为零时,提示输入错误,以保证数据的正确性,当分子输入为零时,不管其分母多大,都显示输出为零,否则输出形式为:
分子/分母。
设有理数输入格式为:
整数1整数2整数3整数4//整数1、2、3、4分别为两个有理数的分子和分母
有理数输出格式为:
分子/分母
主函数中要提示使用者操作,首先定义一个字符m,提示使用者输入n或y来确定是否进入系统,用if语句来来实现,输入为n,则显示“不进入系统!
”,输入为y,则确定进入系统,则显示“您的输入有误!
”。
确定进入系统后,定义四个整数a,b,c,d,数据从键盘输入,分别存放有理数1的分子分母和有理数2的分子分母,再将这两个有理数分别通过分数、实数及最优形式输出。
然后声明两个带参数的有理数类对象n1(a,b)和n2(c,d),分别为有理数a/b和c/d,再声明一个无实参对象n3,来存放有理数n1和n2的运算结果;
再提示输入运算符,又通过if语句实现每一个相应运算符的操作并将结果再次通过分数、实数及最优形式输出,如果输入的运算符不是“+、-、*、/”,则提示“您的运算符输入不正确!
”,最后判断出两个有理数是否相等并将结果输出。
一个运算结束后,再次通过if语句提示是否继续进行下一个运算,如果不继续,则输出“退出运算系统”,如果继续,则会通过returnmain()返回继续以上操作。
系统类图:
三、程序框图或流程图,程序清单与调用关系
属性和方法定义:
类名
成员类别
类型
成员名
描述
num
属性
int
numerator
分子
int
denomination
分母
方法
num
num()
输入两个有理数
void
yuefen(int,int)
化简有理数
+(num)
两数相加运算
-(num)
两数相减运算
*(num)
两数相乘运算
/(num)
两数相除运算
bool
==(num)
判断两个有理数是否相等
double
realnum()
转换为实数
void
show()
输出有理数
程序代码:
#include<
iostream.h>
classnum
{
public:
num(intz=0,intm=0){numerator=z;
denominator=m;
}
voidyuefen(intx,inty);
//定义约分函数
numoperator+(numn2);
//运算符+重载成员函数
numoperator-(numn2);
//运算符-重载成员函数
numoperator*(numn2);
//运算符*重载成员函数
numoperator/(numn2);
//运算符/重载成员函数
booloperator==(numn2);
//运算符==重载成员函数
doublerealnum(){R=(double)numerator/denominator;
returnR;
cout<
<
R;
}//定义函数将其转化
voidshow();
//定义函数将其输出
private:
intnumerator,denominator;
doubleR;
};
voidnum:
:
yuefen(intx,inty)//分数化简函数
{intt;
inti;
if(x>
y)
t=y;
else
t=x;
for(i=t;
i>
=1;
i--)
if((x%i==0)&
&
(y%i==0))
{
t=i;
break;
if(t)
numerator=x/t;
denominator=y/t;
else
numerator=x;
denominator=y;
if(numerator==0)
cout<
"
0"
endl;
numerator<
/"
denominator<
////////////////////////////////重载运算符函数的实现///////////////////////////////////
numnum:
operator+(numn2)
returnnum(numerator*n2.denominator+denominator*n2.numerator,denominator*n2.denominator);
operator-(numn2)
returnnum(numerator*n2.denominator-denominator*n2.numerator,denominator*n2.denominator);
numnum:
operator*(numn2)
returnnum(numerator*n2.numerator,denominator*n2.denominator);
operator/(numn2)
returnnum(numerator*n2.denominator,denominator*n2.numerator);
boolnum:
operator==(numn2)
if((numerator=n2.numerator)&
(denominator=n2.denominator))
returntrue;
returnfalse;
show()//显示输出函数
if(numerator==0)
cout<
elseif(denominator==0)
您的输入有误!
else
}
///////////////////////////////////////////主函数////////////////////////////////////
intmain()
charm;
///////////////////////////有理数运算程序//////////////////////////////"
确定进入系统?
(Y/N)"
//提示是否进入有理数运算系统
cin>
>
m;
if(m=='
n'
||m=='
N'
)
不进入系统!
elseif(m=='
y'
Y'
{
charn;
输入两个有理数:
;
inta,b,c,d;
cin>
a>
b>
c>
d;
numn1(a,b),n2(c,d),n3;
您所输入的有理数n1为:
n1.show();
化简后的n1为:
n1.yuefen(a,b);
转化为实数后的n1为:
n1.realnum()<
您所输入的有理数n2为:
n2.show();
化简后的n2为:
n2.yuefen(c,d);
转化为实数后的n2为:
n2.realnum()<
输入您所需要的运算符:
n;
if(n=='
+'
{
n3=n1+n2;
cout<
您所需的操作为:
n1+n2="
n3.show();
化简后的数为:
n3.yuefen(a*d+b*c,b*d);
转化为实数后为:
n3.realnum()<
}
elseif(n=='
-'
n3=n1-n2;
n1-n2="
n3.yuefen(a*d-b*c,b*d);
*'
n3=n1*n2;
n1*n2="
n3.yuefen(a*c,b*d);
/'
n3=n1/n2;
n1/n2="
n3.yuefen(a*d,b*c);
else
您输入的运算符不正确!
由==重载运算符知:
if(a*d==b*c)
n1=n2"
n1!
=n2"
}
您的输入有误!
运算结束,您继续吗?
//提示是否继续运算
charp;
p;
if(p=='
||p=='
退出运算系统!
elseif(p=='
returnmain();
return0;
实例如下:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 有理数 运算