4、特殊计算器程序设计与实现
1.系统需求
(1)功能结构图
(2)需求说明
1、程序的功能是实现一个特殊的计算器,可以实现复数、有理数、矩阵和集合的特殊运算。
其中,可以实现复数、有理数的加、减、乘、除,可以实现矩阵的加法、减法和乘法运算,也可以实现两个集合的求交集、并集和判断一个集合是否是另一个集合的子集的运算。
2、功能选择可以用菜单实现,用户通过输入不同的数字进入不同的菜单。
3、运行时给出明确的提示信息,比如,输入一个什么类型的数据。
根据用户的输入计算出结果。
4、使用运算符重载实现各种特殊的计算。
2.系统总体设计
(1)系统开发环境
操作系统:
Windows7
开发平台:
MicrosoftVisualC++6.0
(2)系统总体设计
Complex类包含运算符重载:
operator+加,operator-减,operator*乘,operator/除,voidcomplex:
:
print()函数,显示复数;
matrix类matrix:
:
operator()(shortrow,shortcol)重载运算符成员函数,matrix:
:
SetElem(shortrow,shortcol,intval)将元素(row,col)设置为val,matrix:
:
Disp()显示矩阵元素。
rational类,optimization()定义有理数优化函数,voidrational:
:
print()显示有理数,doublereal(rationalx)声明转换函数,将有理数对象转换为实数。
Set类集合类包含booloperator&(int,set)声明重载运算符&,判断某一整数是否属于某一集合,友元:
booloperator==(set,set)声明重载运算符==,判断两个集合是否相等,booloperator!
=(set,set)声明重载运算符!
=,判断两个集合是否不等,setoperator*(set,set)声明重载运算符+,求两个集合的并,booloperator<(set,set)声明重载运算符<,判断某一集合是否为另一集合的纯子集,booloperator<=(set,set)声明重载运算符<=,判断某一集合是否为另一集合的子集,additem()增加集合元素,print()显示有理数,operator+重载运算符+,operator-重载运算符-,operator*重载运算符*,operator/重载运算符/.
Matrix类包含voidDisp(),显示矩阵所有元素,intmatrix:
:
operator()(shortrow,shortcol),重载运算符成员函数(),voidSetElem(shortrow,shortcol,intval),将元素(row,col)设置为val,friendmatrixoperator+(matrixp,matrixq)重载运算符+,friendmatrixoperator-(matrixp,matrixq)重载运算符-,friendmatrixoperator*(matrixp,matrixq),重载运算符×。
3.系统详细设计
(1)界面菜单设计及实现
(2)显示复数计算功能的设计及实现
(3)显示有理数计算功能的设计与实现
(4)显示矩阵计算的实现
(5)显示集合类计算的实现
答:
(1)构造一个函数voidjiemian()来实现界面菜单,并用switch()语句来实现选择,关键技术:
if(i>=0&&i<=4){
switch(i)
{case1:
complexcompute();break;
case2:
rationalcompute();break;
case3:
matrixcompute();break;
case4:
setcompute();break;
case0:
tuichu();break;}
(2)利用complex类来实现复数计算,
1)复数相加用运算符重载:
complexoperator+(complexa,complexb){complextemp;temp.real=a.real+b.real;temp.image=a.image+b.image;returntemp;},
2)相减:
complexoperator-(complexa,complexb){complextemp;temp.real=a.real-b.real;temp.image=a.image-b.image;returntemp;}
3)相乘:
complexoperator*(complexa,complexb){complextemp;temp.real=a.real*b.real-a.image*b.image;temp.image=a.real*b.image+a.image*b.real;returntemp;}
4)相除:
complexoperator/(complexa,complexb){complextemp;floattt;tt=1/(b.real*b.real+b.image*b.image);temp.real=(a.real*b.real+a.image*b.image)*tt;temp.image=(b.real*a.image-a.real*b.image)*tt;returntemp;}
5)复数显示,构建voidcomplexcompute()
6)关键技术:
while(j){if(j>=0&&j<=4){floatr1,j1,r2,j2;
7)cout<<"请输入第一个复数的实部:
";cin>>r1;cout<<"请输入第一个复数的虚部:
";cin>>j1;cout<<"请输入第二个复数的实部:
";cin>>r2;cout<<"请输入第二个复数的虚部:
";cin>>j2;complexc1(r1,j1);complexc2(r2,j2);complexc3;switch(j){case1:
c3=c1+c2;c1.print();c2.print();c3.print();break;
case2:
c3=c1-c2;c1.print();c2.print();c3.print();break;
case3:
c3=c1*c2;c1.prin