




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、课程设计任务书学院信息科学与工程专业电子信息科学与技术学生姓名学号设计题目设计一个能够实现X矩阵操作的类计算器程序内容及要求:T设计一个能够实现X矩阵操作的类矩阵是线性代数里一个重要的概念,在这里采用语言实现一个简单的X矩阵类,类中包括一些简单的运算等操作具体要求如下:()使用构造函数完成方阵的初始化赋值(动态内存分配);()使用析构函数完成矩阵动态内存的释放;()重载加法运算符+、一、,实现两个矩阵的运算;()使用函数实现矩阵的转置;()使用函数求矩阵中的最大、小值、对应行列式的值;()重载加法运算符,实现矩阵按照行列的格式输出;()编写一个主函数测试上述功能。T计算器程序进度安排:第周:分
2、析题目,查阅课题相关资料,进行类设计、算法设计;第周:上机调试程序,程序测试与分析,撰写课程设计报告,准备答辩。指导教师(签字):学院院长(签字)年月日年月日 PARTITOC o 1-5 h z HYPERLINK l bookmark41需求分析2 HYPERLINK l bookmark62算法基本原理2 HYPERLINK l bookmark83类设计3 HYPERLINK l bookmark104详细设计44.1类的接口设计44.2类的实现54.3主函数设计11 HYPERLINK l bookmark125运行结果与分析125.1程序运行结果125.2运行结果分析14PARTI
3、I HYPERLINK l bookmark161需求分析24 HYPERLINK l bookmark182算法基本原理24 HYPERLINK l bookmark203类设计14 HYPERLINK l bookmark224详细设计154.1类的实现154.2主函数设计19 HYPERLINK l bookmark245运行结果与分析275.1程序运行结果275.2运行结果分析276参考文献15PARTI1需求分析矩阵是线性代数里一个重要的概念,在这里采用C+语言实现一个简单的X矩阵类,类中包括一些简单的运算等操作具体要求如下:(1)使用构造函数完成方阵的初始化赋值(动态内存分配);(
4、2)使用析构函数完成矩阵动态内存的释放;(3)重载加法运算符,实现两个矩阵的和;(4)重载加法运算符,实现两个矩阵的差;(5)重载加法运算符*,实现两个矩阵的积;(6)重载加法运算符=,实现两个矩阵之间的赋值;(7)使用函数实现矩阵的转置;(8)使用函数求矩阵中的最大值;(9)使用函数求矩阵中的最小值;(10)添加函数Det以得到矩阵对应行列式的值;(11)重载加法运算符,实现矩阵按照行列的格式输出;(12)编写一个主函数测试上述功能。2算法基本原理矩阵进行加法,减法,乘法运算时,必须满足两个矩阵阶数相同的条件。加法,减法计算是把矩阵对应的各行各列的每一对数值分别进行加减法运算,结果组成一个新
5、的同阶矩阵。矩阵乘法是这样定义的,只有当矩阵A的列数与矩阵B的行数相等时AxB才有意义。一个m%n的矩阵a(m,n)左乘一个nxp的矩阵b(n,p),会得到一个mxp的矩阵c(m,p),满足矩阵乘法满足结合率,但不满足交换率3类设计从上面的算法分析可以看到,本设计面临的计算问题的关键是矩阵运算。可以定义一个矩阵类Matrix。矩阵类Matrix只处理nXn类型的方阵,方阵用一个一维数组来存放,矩阵类Matrix的数据成员包括数组的首地址num和阶数n。矩阵类Matrix的功能有:默认构造函数Matrix。、构造函数Matrix(intn,int*a)、手动输入矩阵函数SetMatrix(int
6、n)、析构函数Matrix。、重载加法运算符+,实现两个矩阵的和函数Matrixoperator+(constMatrix&a)、重载加法运算符一,实现两个矩阵的差函数Matrixoperator-(constMatrix&a)、重载加法运算符*,实现两个矩阵的积函数Matrixoperator*(constMatrix&a)、重载加法运算符=,实现两个矩阵之间的赋值函数Matrix&operator=(constMatrix&a)、实现矩阵的转置Transpose。、求矩阵中的最大值Max()、求矩阵中的最小值Min()、求行列式Det()、重载加法运算符,实现矩阵按照行列的格式输出Matr
7、ixoperator(constMatrix&a)、我的求行列式函数MyDet(int*array,intJie)。矩阵类Matrix如图1所示。Matrix+n:int+num:int+Matrix()+Matrix(intn,int*a)+SetMatrix(intn):void+Matrix()+operator+(constMatrix&a):Matrix+operator-(constMatrix&a):Matrix+operator*(constMatrix&a):Matrix+&operator=(constMatrix&a):Matrix+Transpose():void+Ma
8、x():int+Min():int+Det():double+operator(constMatrix&a):MatrixMyDet(int*array,intJie):double类的图形表示4详细设计整个程序分为三个部分,首先是类,然后是类的功能函数,最后是一个主函数用来测试类的所有功能是否可是实现4.1类的接口设计#includestdafx.h#includeusingnamespacestd;classMatrixpublic:intn;int*num;Matrix。;/默认构造函数Matrix(intn,int*a);构造函数voidSetMatrix(intn);/手动输入矩阵M
9、atrix。;/析构函数Matrixoperator+(constMatrix&a);/重载加法运算符,实现两个矩阵的和Matrixoperator-(constMatrix&a);/重载加法运算符一,实现两个矩阵的差Matrixoperator*(constMatrix&a);/重载加法运算符一,实现两个矩阵的差Matrix&operator=(constMatrix&a);/重载加法运算符*,实现两个矩阵的积voidTranspose。;/实现矩阵的转置intMax();/求矩阵中的最大值intMin();/求矩阵中的最小值doubleDet();求行列式Matrixoperatorvv(
10、constMatrix&a);/重载加法运算符vv,实现矩阵按照行列的格式输出private:doubleMyDet(int*array,intJie);我的求行列式函数;由于成员函数要实现重载运算符,就把数据成员都设为public。这个问题也可用设重载函数为友元函数来解决。另外,实现行列式的函数过于复杂,于是参考了网上一些资料,然后编写了doubleMyDet(int*array,intJie)函数来实现。4.2类的实现Matrix:Matrix()默认构造函数n=1;num=newint(1);*num=0;Matrix:Matrix(intn,int*a)构造函数this-n=n;num
11、=newintn*n;for(inti=0;ivn*n;i+)*(num+i)=*(a+i);voidMatrix:SetMatrix(intn)手动输入矩阵if(this-n=1)deletenum;elsedeletenum;this-n=n;num=newintn*n;for(inti=0;in;i+)for(intj=0;j*(num+i*n+j);Matrix:Matrix。/析构函数if(n=l)deletenum;elsedeletenum;MatrixMatrix:operator+(constMatrix&a)/重载加法运算符+,实现两个矩阵的和if(a.n=n)int*p=
12、newintn*n;for(inti=0;ivn*n;i+)*(p+i)=*(a.num+i)+*(num+i);Matrix*temp=newMatrix(n,p);if(nl)deletep;elsedeletep;return*temp;elseMatrixtemp;returntemp;MatrixMatrix:operator-(constMatrix&a)/重载加法运算符一,实现两个矩阵的差if(a.n=n)int*p=newintn*n;for(inti=0;i1)deletep;elsedeletep;return*temp;elseMatrixtemp;returntemp;
13、MatrixMatrix:operator*(constMatrix&a)重载加法运算符*,实现两个矩阵的积if(a.n=n)int*p=newintn*n;inti=0,j=0,k=0;for(i=0;in*n;i+)*(p+i)=0;for(i=0;in;i+)for(j=0;jn;j+)for(k=0;k1)deletep;elsedeletep;return*temp;elseMatrixtemp;returntemp;Matrix&Matrix:operator=(constMatrix&a)重载加法运算符=,实现两个矩阵之间的赋值if(a.n=n)for(inti=0;i1)int
14、temp;for(inti=0;in;i+)for(intj=0;ji;j+)temp=*(num+i*n+j);*(num+i*n+j)=*(num+j*n+i);*(num+j*n+i)=temp;intMatrix:Max()求矩阵中的最大值inttemp;temp=*num;for(inti=0;itemp)temp=*(num+i);returntemp;intMatrix:Min()求矩阵中的最小值inttemp;temp=*num;for(inti=0;in*n;i+)if(*(num+i)num,this-n);doubleMatrix:MyDet(int*array,intJ
15、ie)我的求行列式函数if(Jie=0)cerr阶小于0或等于0!endl;return0;elseif(Jie=1)returnarray0;elseinti,j,k,tag;int*subArray500;for(i=0;iJie;i+)subArrayi=newint(Jie-1)*(Jie-1);for(i=0;iJie;i+)for(j=0;jJie-1;j+)for(k=0;kJie-1;k+)*(subArrayi+j*(Jie-1)+k)=0;for(i=0;iJie;i+)for(j=0;jJie-1;j+)for(k=0;kJie-1;k+)if(ki)*(subArray
16、i+j*(Jie-1)+k)=*(array+(j+1)*Jie+k);else*(subArrayi+j*(Jie-1)+k)=*(array+(j+1)*Jie+k+1);doubletemp=0;tag=1;for(i=0;iJie;i+)temp+=tag*MyDet(subArrayi,Jie-1)*arrayi;tag*=-1;,题。4.3returntemp;ostream&operatorvv(ostream&stream,constMatrix&a)重载加法运算符实现矩阵按照行列的格式输出streamendl;for(inti=0;ia.n;i+)for(intj=0;ja.
17、n;j+)stream*(a.num+i*a.n+j);streamendl;returnstream;以上就是类的成员函数,在编写中除了求行列式以外,没有遇到什么大的问主函数设计intmain(intargc,char*argv)intn1=3,n2=3,n3=3,max,min;intnum1=1,1,1,1,1,1,1,1,1;intnum2=2,3,3,2,2,3,2,2,2;intnum3=3,3,3,3,3,3,3,3,3;Matrixa,b(n1,num1),c(n2,num2),d(n3,num3);a.SetMatrix(3);d=a+b;coutd=dendl;d=a-c;
18、coutd=dendl;d=a*c;coutd=dendl;max=a.Max();min=a.Min();coutThemaxofais:maxendl;coutTheminofais:minendl;couta=aendl;a.Transpose();couta=aendl;coutTheDetofcis:c.Det()endl;return0;在程序的主函数部分,选择了一个手动输入矩阵和三个固定矩阵作为一个实际例子来验证算法。5运行结果与分析5.1程序运行结果程序运行结果如图2所示。=,BC:DocumentsandSettingsAdministratorMffiTejE(.JlaH馬
19、输入第1行第丄列个元素请输入第1行第2列个元素请输入第丄行第3列个元素宙输入第2行第1列个元素请输入第2行第2列个元素请输入第2行第3列个元素请输入第孑行第1列个元素咅输入第3行第2列个元素鲁输入餡行餡列个元素(5d=TOC o 1-5 h z356SB9769d=0-1-2-2-5-5d卜妙78tf?824tfef88TheDetPressanykeytocontinueThemaxThemin4-3-6图2程序运行结果从图2中可以看出,程序能够实现一个简单nXn矩阵操作的类。5.2运行结果分析整个程序中的矩阵存储采用的是一维数组和动态内存分配方式。Matrix类是专门处理矩阵的类结合问题的
20、实际需要,增加了很矩阵所特有的运算,使Matrix类进一步具体化、特殊化,达到对问题的有效描述和处理。程序的访问控制也是根据问题的需要而设计的。 PARTII1需求分析(1)很多自然科学和工程技术中的问题都需要计算器的参与,常见的计算器有三类:算数型计算器、科学型计算器、程序计算器。(2)算术型计算器可进行加、减、乘、除等简单的四则运算,又称简单计算器。科学型计算器一一可进行乘方、开方、指数、对数、三角函数、统计等方面的运算,又称函数计算器。程序计算器一一可以编程序,把较复杂的运算步骤贮存起来,进行多次重复的运算。(3)本程序可以实现加、减、乘、除、平方、开方、sin、cos、清除、ce等操作
21、。算法基本原理本程序使用进行编写,首先建立一个基本对话框,用右边的控件管理,构造出该计算器的雏形。本计算器是以点击对应数字实现输入数据。定义一个变量,然后点击任何数字,首先该变量自乘10再加上对应数字来实现其输入功能。类设计从上面的算法分析可以看到,本设计面临的计算问题的关键是数据输入以及数据操作。可以在CCalcDlg类中定义m_fresult用于装第一个操作数,m_foldresult用于装第二个操作数。定义一个整型数据m_nOperator用于判断操作符。定义一个整型数据m_ncontrol用于判断操作是否结束,以免获得结果后,按数字键还能继续执行输入操作。定义按钮数字函数,即对应数字的
22、输入函数。定义按钮操作函数,即对应函数的操作函数。定义按钮清除函数:C按钮,即为初始化所有操作数;Ce按钮,即为初始化当前操作数。CDialogCCaleDig+m_freEult:double+m_foldresult:double+ro_nOperator:int+mncontrol:int # #OnlnitDialog():virtualBOOLOnSysCommand(UINTnID,LPARAMlParam):afx_msgvoidOnPaint():afx_msgvoidOnQueryDragIcon():afx_msgHCURSOROnButtonl()OnButton2)On
23、Button3()OnButton4)OnButton5)OnButton6()OnButton7)OnButton8)OnButton9()OnButtonO)OnButtonC()_OnButtonAdd():afx_msgvoidOnButtonSub():OnButtonMul():_OnButtonDivO:afx_msgvoidOnButtonResult():afx_msgvoidOnButtonSquO:OnButtonSqr():afxOnButtonSinO:OnButtonCos():_OnButtonCe():afxmsgvoidafx_msgafx_msgafx_ms
24、gafx_msgafx_msgafx_msgafx_msgafx_msgafx_msgafx_msgafx_msgvoidvoidvoidvoidvoidvoidvoidvoidvoidvoidvoidafx_msgafx_msgafx_msg:_nisgafx_msgafx_msgvoidvoidvoidvoidvoidvoid CCalcDlg类的咖L图形表示4详细设计calcDlg.h中定义变量以及操作函数。calcDlg.cpp中将对应的操作函数内容代码编写进去4.1类的接口设计/calcDlg.h文件,实现类的声明#includeusingnamespacestd;classCCal
25、cDlg:publicCDialog/Constructionpublic:CCalcDlg(CWnd*pParent=NULL);/standardconstructor/DialogData/AFX_DATA(CCalcDlg)enumIDD=IDD_CALC_DIALOG;doublem_fresult;doublem_foldresult;intm_nOperator;intm_ncontrol;/AFX_DATA/ClassWizardgeneratedvirtualfunctionoverrides/AFX_VIRTUAL(CCalcDlg)protected:DDX/DDVvir
26、tualvoidDoDataExchange(CDataExchange*pDX);/support/AFX_VIRTUAL/Implementationprotected:HICONm_hIcon;/Generatedmessagemapfunctions/AFX_MSG(CCalcDlg)virtualBOOLOnInitDialog();afx_msgvoidOnSysCommand(UINTnID,LPARAMlParam);afx_msgvoidOnPaint(); afx_msgHCURSOROnQueryDragIcon();afx_msgvoidOnButton1();afx_
27、msgvoidOnButton2();afx_msgvoidOnButton3();afx_msgvoidOnButton4();afx_msgvoidOnButton5();afx_msgvoidOnButton6();afx_msgvoidOnButton7();afx_msgvoidOnButton8();afx_msgvoidOnButton9();afx_msgvoidOnButton0();afx_msgvoidOnButtonC();afx_msgvoidOnButtonAdd();afx_msgvoidOnButtonSub();afx_msgvoidOnButtonMul()
28、;afx_msgvoidOnButtonDiv();afx_msgvoidOnButtonResult();afx_msgvoidOnButtonSqu();afx_msgvoidOnButtonSqr();afx_msgvoidOnButtonSin();afx_msgvoidOnButtonCos();afx_msgvoidOnButtonCe();/AFX_MSGDECLARE_MESSAGE_MAP();/AFX_INSERT_LOCATION 4.2类的实现/calcDlg.cpp文件,类实现#includestdafx.h#includemath.h#includecalc.h#i
29、ncludecalcDlg.h/包含类的声明头文件/calcDlg类的实现CCalcDlg:CCalcDlg(CWnd*pParent/*=NULL*/)/初始化变量:CDialog(CCalcDlg:IDD,pParent)/AFX_DATA_INIT(CCalcDlg)m_fresult=0.0;m_fresult=0.0;m_nOperator=0;m_ncontrol=0;/AFX_DATA_INIT/NotethatLoadIcondoesnotrequireasubsequentDestroyIconinWin32m_hIcon=AfxGetApp()-LoadIcon(IDR_M
30、AINFRAME);BEGIN_MESSAGE_MAP(CCalcDlg,CDialog)/将变量于外面输入/AFX_MSG_MAP(CCalcDlg)/联系起来产生映射ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_BUTTON12,OnButton1)ON_BN_CLICKED(IDC_BUTTON_2,OnButton2)ON_BN_CLICKED(IDC_BUTTON_3,OnButton3)ON_BN_CLICKED(IDC_BUTTON_4,OnButton4)ON_BN_CLICKED(I
31、DC_BUTTON_5,OnButton5)ON_BN_CLICKED(IDC_BUTTON_6,OnButton6)ON_BN_CLICKED(IDC_BUTTON_7,OnButton7)ON_BN_CLICKED(IDC_BUTTON_8,OnButton8)ON_BN_CLICKED(IDC_BUTTON_9,OnButton9)ON_BN_CLICKED(IDC_BUTTON_0,OnButton0)ON_BN_CLICKED(IDC_BUTTON_C,OnButtonC)ON_BN_CLICKED(IDC_BUTTON_ADD,OnButtonAdd)ON_BN_CLICKED(I
32、DC_BUTTON_SUB,OnButtonSub)ON_BN_CLICKED(IDC_BUTTON_MUL,OnButtonMul)ON_BN_CLICKED(IDC_BUTTON_DIV,OnButtonDiv)ON_BN_CLICKED(IDC_BUTTON_RESULT,OnButtonResult)ON_BN_CLICKED(IDC_BUTTON_SQU,OnButtonSqu)ON_BN_CLICKED(IDC_BUTTON_SQR,OnButtonSqr)ON_BN_CLICKED(IDC_BUTTON_SIN,OnButtonSin)ON_BN_CLICKED(IDC_BUTT
33、ON_COS,OnButtonCos)ON_BN_CLICKED(IDC_BUTTON_CE,OnButtonCe)/AFX_MSG_MAPEND_MESSAGE_MAP()voidCCalcDlg:OnButton1()UpdateData(TRUE);if(m_ncontrol!=0)m_fresult=m_foldresult=0;m_ncontrol=0;m_fresult=m_fresult*10+1;UpdateData(FALSE);voidCCalcDlg:OnButton2()UpdateData(TRUE);if(m_ncontrol!=0)/按1按钮/将控件中的数据交换到
34、变量中/如果是操作结束后/操作数初始化/符号初始化/操作数自乘10,加对应按钮数/将变量中的数据交换到控件中/按2按钮 # #m_fresult=m_foldresult=0; m_ncontrol=0;m_fresult=m_fresult*10+2;UpdateData(FALSE);voidCCalcDlg:OnButton3()UpdateData(TRUE);if(m_ncontrol!=0)m_fresult=m_foldresult=0;m_ncontrol=0;m_fresult=m_fresult*10+3;UpdateData(FALSE);voidCCalcDlg:OnB
35、utton4()UpdateData(TRUE);if(m_ncontrol!=0)m_fresult=m_foldresult=0;m_ncontrol=0;m_fresult=m_fresult*10+4;UpdateData(FALSE);voidCCalcDlg:OnButton5()/按3按钮/按4按钮/按5按钮UpdateData(TRUE);if(m_ncontrol!=0) m_fresult=m_foldresult=0;m_ncontrol=0;m_fresult=m_fresult*10+5;UpdateData(FALSE);voidCCalcDlg:OnButton6
36、()UpdateData(TRUE);if(m_ncontrol!=0)m_fresult=m_foldresult=0;m_ncontrol=0;m_fresult=m_fresult*10+6;UpdateData(FALSE);voidCCalcDlg:OnButton7()UpdateData(TRUE);if(m_ncontrol!=0)m_fresult=m_foldresult=0;m_ncontrol=0;m_fresult=m_fresult*10+7;UpdateData(FALSE);voidCCalcDlg:OnButton8()/按6按钮/按7按钮/按8按钮 /按9按
37、钮/按0按钮UpdateData(TRUE);if(m_ncontrol!=0)m_fresult=m_foldresult=0;m_ncontrol=0;m_fresult=m_fresult*10+8;UpdateData(FALSE);voidCCalcDlg:OnButton9()UpdateData(TRUE);if(m_ncontrol!=0)m_fresult=m_foldresult=0;m_ncontrol=0;m_fresult=m_fresult*10+9;UpdateData(FALSE);voidCCalcDlg:OnButton0()UpdateData(TRUE)
38、;if(m_ncontrol!=0)m_fresult=m_foldresult=0;m_ncontrol=0;m_fresult=m_fresult*10;UpdateData(FALSE);voidCCalcDlg:OnButtonC()UpdateData(TRUE);m_fresult=0;m_foldresult=0;按C按钮/初始化所有数据m_nOperator=0;UpdateData(FALSE); # #voidCCalcDlg:OnButtonAdd()UpdateData(TRUE);m_foldresult=m_fresult;m_fresult=0;m_nOperat
39、or=1;UpdateData(FALSE);/按+按钮/将操作数1赋值给操作数2初始化操作数1记录操作为+ # #/按-按钮/按*按钮voidCCalcDlg:OnButtonSub()UpdateData(TRUE);m_foldresult=m_fresult;m_fresult=0;m_nOperator=2;UpdateData(FALSE);voidCCalcDlg:OnButtonMul()UpdateData(TRUE);m_foldresult=m_fresult;m_fresult=0;m_nOperator=3;UpdateData(FALSE); voidCCalcDlg:OnButtonDiv()UpdateData(TRUE);m_foldresult=m_fresult;m_fresult=0;m_nOperator=4;UpdateData(FALSE);/按/按钮voidCCalcDlg:OnButtonResult()UpdateData(TRUE);switch(m_nOperator)case1:m_fresult=m_foldresult+mbreak;case2:m_fresul
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025至2030年中国项目进度管理软件行业发展研究报告
- 2025至2030年中国防沉块行业发展研究报告
- 2025至2030年中国铝熔铸件行业发展研究报告
- 汽车电气设备构造与维修 课件 项目八 汽车空调系统维护及检
- 2025至2030年中国连体执手锁行业发展研究报告
- 2025至2030年中国货运电动车行业发展研究报告
- 2025至2030年中国蕃茄红行业发展研究报告
- 2025至2030年中国自动温控阀行业发展研究报告
- 2025至2030年中国美容凳行业发展研究报告
- 2025至2030年中国纯氦行业发展研究报告
- TCI 263-2024 水上装配式钢结构栈桥(平台)施工技术规程
- 甲状腺结节射频消融术后护理
- 种植牙沙龙策划方案
- 大众安徽测评题库
- 花管注浆施工工艺
- 深度学习及其应用-复旦大学中国大学mooc课后章节答案期末考试题库2023年
- 2023学年完整公开课版《约客》黎少阳
- 战场自救与互救-课件
- 华夏万卷写字课三年级下册电子版
- 北师大版五年级(下册)数学知识要点归纳|期末复习
- 口腔种植修复(基础篇)知到章节答案智慧树2023年浙江大学
评论
0/150
提交评论