求解有理数分式方程含代码功能增强Word格式.docx
《求解有理数分式方程含代码功能增强Word格式.docx》由会员分享,可在线阅读,更多相关《求解有理数分式方程含代码功能增强Word格式.docx(24页珍藏版)》请在冰点文库上搜索。
定义一个类jisuan接受参数,使用类Fenshi类对运算符进行重载计算。
定义一个jisuan类的动态数组p存储结果。
2.总体设计
2.1程序设计函数接口
1.Fenshi类
1)Fenshi(intn=0,intd=1);
//带默认形参值的构造函数
2)Fenshi(Fenshi&
fen);
//拷贝构造函数
3)~Fenshi();
//析构函数
4)voidsimplify();
//将分式化为最简形式
5)booloperator==(Fenshi&
//运算符重载
6)Fenshioperator+(Fenshi&
fen);
7)Fenshioperator-(Fenshi&
8)Fenshioperator*(Fenshi&
9)Fenshioperator/(Fenshi&
10)voidprint();
//输出分式
11)intGcd(inta,intb);
//辗转相除法求最大公因子
12)boolIsneg();
//判断分式是否为正数
2.jisuan类
1)jisuan();
//默认构造函数
2)jisuan(inta,intb,intc,intd,inte,intf);
//构造函数
3)~jisuan();
4)voidcal();
//计算有理分式的结果
5)voidprint();
//以分数形式输出结果
6)FenshiA;
//待求解方程x的系数
3.主函数
1)voidDrawWarn();
//输出警告界面
2)voidDrawMenu();
//输出菜单
2.2程序功能说明
1)输入参数:
录入方程的参数并输出结果。
2)历史结果:
查询用户计算过的历史记录。
3)查询结果:
按系数或者次序查询计算过的结果。
4)退出系统。
2.3程序流程图
图2-1程序流程图
3.调试结果
3.1程序运行
1)程序启动输入存储结果个数界面
2)主菜单
3)计算界面
4)历史结果界面
5)查询结果界面
6)警告界面
6.1)未存储数据时查询历史结果
6.2)超过给定的最大存储个数
3.2总结分析
本次设计让我对C++有了更进一步的认识,特别是在类与对象这一块,发现了以前很多的知识漏洞。
这个设计过程最难的便是程序的调试了,有时候程序明明看起来并没有任何的错误,但是结果偏偏不对,实在是恼人,可能只是一个小小的错误比如将“==”写成了“=”,但是结果确实完全错误。
我相信在今后的学习真的我会更加努力,积累经验。
使自己在编程等各方面得到提高。
4.程序清单
头文件(类的定义):
classFenshi
{
public:
Fenshi(intn=0,intd=1);
Fenshi(Fenshi&
~Fenshi();
voidsimplify();
//将分式化为最简形式,并检查分母是否为0
//进行运算符的重载
booloperator==(Fenshi&
Fenshioperator+(Fenshi&
Fenshioperator-(Fenshi&
Fenshioperator*(Fenshi&
Fenshioperator/(Fenshi&
voidprint();
intGcd(inta,intb);
//最大公因子
boolIsneg();
private:
intfenmu,fenzi;
};
classjisuan
jisuan();
jisuan(inta,intb,intc,intd,inte,intf);
~jisuan();
voidcal();
//计算
FenshiA;
FenshiB;
FenshiC;
Fenshians;
类的实现:
#include"
dingyi.h"
#include<
conio.h>
iostream>
usingnamespacestd;
math.h>
Fenshi:
:
Fenshi(intn,intd)
this->
fenzi=n;
fenmu=d;
simplify();
}
Fenshi(Fenshi&
fen)
fenmu=fen.fenmu;
fenzi=fen.fenzi;
~Fenshi()
{}
boolFenshi:
operator==(Fenshi&
fen)
if(this->
fenmu==fen.fenmu&
&
this->
fenzi==fen.fenzi)
returntrue;
else
returnfalse;
FenshiFenshi:
operator+(Fenshi&
ans.fenmu=this->
fenmu*fen.fenmu;
ans.fenzi=this->
fenzi*fen.fenmu+this->
fenmu*fen.fenzi;
ans.simplify();
returnans;
operator-(Fenshi&
fenzi*fen.fenmu-this->
operator*(Fenshi&
fenzi*fen.fenzi;
operator/(Fenshi&
fenzi*fen.fenmu;
voidFenshi:
simplify()
if(fenmu<
0)
{
fenmu=-fenmu;
fenzi=-fenzi;
}
inta=abs(fenzi),b=abs(fenmu);
intk;
if(a<
b)
k=Gcd(b,a);
k=Gcd(a,b);
fenmu=fenmu/k;
fenzi=fenzi/k;
intFenshi:
Gcd(inta,intb)
if(b==0)
returna;
returnGcd(b,a%b);
print()
if(fenzi==0)
cout<
<
0;
if(fenmu==1)
fenzi;
elseif(fenmu==-1)
-fenzi;
fenzi<
'
/'
fenmu;
Isneg()
if(fenzi<
else
jisuan:
jisuan():
A(0,1),B(0,1),C(0,1)
jisuan(inta,intb,intc,intd,inte,intf):
A(a,b),B(c,d),C(e,f)
~jisuan()
voidjisuan:
cal()
{
ans=(C-B)/A;
cal();
cout<
"
\t方程为:
endl;
\t"
;
A.print();
x'
if(B.Isneg())
+'
B.print();
="
C.print();
\t结果为:
\tx="
ans.print();
主函数:
voidDrawWarn()
endl
<
\t┏━━━━━━━━━━━━━━━━━━━━━┓"
\t┃请先输入参数!
┃"
\t┗━━━━━━━━━━━━━━━━━━━━━┛"
voidDrawMenu()
system("
cls"
);
\t┃请选择操作┃"
\t┣━━━━━━━━━━━━━━━━━━━━━┫"
\t┃1.输入参数┃"
\t┃2.历史结果┃"
\t┃3.查询结果┃"
\t┃0.退出┃"
intmain()
inta,b,c,d,e,f,n,count=0;
请输入您想要保存的答案个数:
cin>
>
n;
jisuan*p;
p=newjisuan[n];
charch;
boolbeContinue=true;
//表示是否继续,用户选了“退出”,则为false,退出程序
boolbeInited=false;
//表示方程是否被初始化,若没有被初始化,则不允许“输出结果”。
while(beContinue)
DrawMenu();
while
(1)
{
ch=_getch();
if(ch<
='
3'
&
ch>
0'
)
break;
DrawMenu();
}
switch(ch)
case'
1'
{
system("
if(count==n)
cout<
已经达到最大存储范围"
请按任意键返回"
_getch();
DrawMenu();
}
cout<
<
(a/b)x+c/d=e/f"
\t请依次输入[abcdef]:
a=0;
while(a==0)
\ta="
cin>
a;
if(a==0)
cout<
\t系数不能为0!
请重新输入!
b=0;
while(b==0)
\tb="
b;
if(b==0)
\t分母不能为0!
\tc="
cin>
c;
d=0;
while(d==0)
\td="
d;
if(d==0)
\te="
e;
f=0;
while(f==0)
\tf="
f;
if(f==0)
beInited=true;
jisuanfa(a,b,c,d,e,f);
<
fa.print();
p[count]=fa;
count++;
_getch();
break;
2'
system("
if(beInited)
{
for(inti=0;
i<
count;
i++)
{cout<
第"
i+1<
次计算结果"
p[i].print();
}
else
DrawWarn();
break;
case'
\t┃1.以运行顺序查询┃"
\t┃2.以x的系数查询┃"
boolIsc=true;
while(Isc)
charcha;
while
(1)
cha=_getch();
if(cha<
else
输入错误!
请重新输入"
switch(cha)
case'
{
cout<
请输入查询第几次的结果"
intcha;
cin>
cha;
if(cha<
=count&
cha>
{
cout<
结果为:
p[cha-1].print();
}
else
没有这个结果"
请继续选择查询方法或者返回主菜单"
break;
}
intaa,bb;
boolIsexi=true;
请输入x的系数的分子分母"
aa>
bb;
Fenshichaxun(aa,bb);
for(inti=0;
{
if(p[i].A==chaxun)
{p[i].print();
Isexi=false;
if(Isexi)
Isc=false;
beContinue=false;
return1;