矩阵类的设计.doc

上传人:啊飒飒 文档编号:10763172 上传时间:2021-06-03 格式:DOC 页数:30 大小:201.90KB
返回 下载 相关 举报
矩阵类的设计.doc_第1页
第1页 / 共30页
矩阵类的设计.doc_第2页
第2页 / 共30页
矩阵类的设计.doc_第3页
第3页 / 共30页
矩阵类的设计.doc_第4页
第4页 / 共30页
矩阵类的设计.doc_第5页
第5页 / 共30页
点击查看更多>>
资源描述

《矩阵类的设计.doc》由会员分享,可在线阅读,更多相关《矩阵类的设计.doc(30页珍藏版)》请在三一文库上搜索。

1、C+程序设计课程设计说明书题 目矩阵类的设计学 号1067118208姓 名王明超指导教师刘立新日 期2012/06/20内蒙古科技大学课程设计任务书课程名称C+语言课程设计设计题目矩阵类的设计指导教师时间2011-2012春学期 第17、18周一、教学要求1. 巩固和加深学生对C+语言课程的基本知识的理解和掌握2. 掌握C+语言编程和程序调试的基本技能3. 利用C+语言进行基本的软件设计4. 掌握书写程序设计说明文档的能力5. 提高运用C+语言解决实际问题的能力二、设计资料及参数用C+设计一个程序,能提供下列功能: 设计一个矩阵类,包含行、列和矩阵数据元素,完成如下功能:(1) 输入矩阵。按

2、照行顺序输入矩阵的每一个元素。(2) 矩阵的运算。重载“+”和“*”实现矩阵的加法和矩阵的乘法。(3) 转置。重载“-”运算符实现矩阵的转置。(4) 输出。重载“”运算符实现矩阵的输出。三、设计要求及成果根据系统功能要求,可以将问题解决分为以下步骤:(1)分析系统中的各个实体之间的关系及其属性和行为;(2)根据问题描述,设计系统的类层次;(3)完成类层次中各个类的描述(包括属性和力一法);(4)完成类中各个成员函数的定义;(5)完成系统的应用模块;(6)功能调试;(7)提交课程设计报告:完成系统总结报告以及系统使用说明书目录第1章 需求分析4第2章 总体设计5第3章 类的设计73.1 Matr

3、ix类的设计7第4章 详细设计94.1 工程视图94.2 类图视图104.3 函数的调用关系114.4 主程序流程图124.5 主要算法的流程图13第5章 测试15第6章 总结19附录:程序代码20 第一章 需求分析一、设计资料及参数用C+设计一个程序,能提供下列功能: 设计一个矩阵类,包含行、列和矩阵数据元素,完成如下功能:(1) 输入矩阵。按照行顺序输入矩阵的每一个元素。(2) 矩阵的运算。重载“+”和“*”实现矩阵的加法和矩阵的乘法。(3) 转置。重载“-”运算符实现矩阵的转置。(4) 输出。重载“”运算符实现矩阵的输出。二、 需求分析:首先根据要解决的问题是分析设计类图,抽象出各个类的

4、数据成员和函数成员,然后进行详细编码,在主函数中创建类的对象,调用适当的成员函数或全局函数实现相应的功能。 第二章 总体设计2.1输入功能输入一个矩阵的行列数,并依次输入该矩阵的每行和每列的元素。2.2加法功能能够对输入的两个矩阵进行加法运算。2.3 乘法功能能够对输入的两个矩阵进行乘法运算。2.4转置功能能够对输入得矩阵进行转置处理。2.5错误处理根据你键入的矩阵进行判断,发生错误时报错,提示输入错误。函数功能图主函数输出提示Matrix类提示输出加法运算乘法运算转置运算图2.1 第三章 类的设计3.1 Matrix类的设计class Matrixprivate: double *data;

5、 /二维矩阵数据数组指针 int m,n;/矩阵的行数,列数public:Matrix();/无参构造函数被调用!无参构造函数,无参构造函数是自己定义的构造函数,只是构造函数是没有参数的,不用向函数传递数值或地址Matrix(int row, int line);/带参构造函数被调用!动态分配二维数组空间,构造M行N列的矩阵(构造函数) Matrix(Matrix &com);/ 拷贝构造函数被调用!定义拷贝函数,拷贝构造函数要调用基类的拷贝构造函数和成员函数Matrix()/析构函数被调用!析构函数void GetData();Matrix operator +(Matrix);/矩阵加法,

6、如果矩阵不匹配无法相加需要给出出错信息 Matrix operator -(Matrix);/矩阵减法,如果矩阵不匹配无法相减需要给出出错信息Matrix operator *(Matrix);/矩阵乘法,如果矩阵不匹配无法相乘需要给出出错信息friend void operator !(Matrix); /矩阵转置运算void print();/输出结果; 第四章 详细设计4.1工程视图说明有几个源代码文件,可以截取工程文件视图表示 图4.1.1 工程文件视图 4.2类图视图每个文件包含哪些类和函数,可以截图说明图4.2.14.3 函数的调用关系函数的调用关系如图4.3所示main输入函数类

7、函数矩阵加函数矩阵减函数矩阵乘函数矩阵转置函数输出函数图4.3 4.4 主程序流程图提示进入系统输入元素显示矩阵图4.4.14.5 主要算法的流程图4.5.1加法模块程序将首先判断两个矩阵之间的行与列是否相对应,如果不对应,程序将提示用户输入错误,如果相对应,再进行循环操作,让两个矩阵相对应的元素相加。加法模块的流程下图4.5.1所示行或列相对应元素相加提示错误判断图4.5.14.5.2乘法模块首先模块将判断两个矩阵之间的行与列是否相对应,如果不对应,程序将提示用户输入错误,如果相对应,再进行循环操作,让两个矩阵相对应的元素相乘 ,直到不符合条件为止。乘法模块的流程下图4.5.2所示行或列相对

8、应元素相乘提示错误判断结果相加输出结果图4.5.24.5.3转置模块程序首先创建临时对象,用来存储两矩阵的积,再判断是否符合条件,若符合,则将两矩阵相对应的元素进行交换,当不符合条件时,退出循环。转置模块的流程下图4.5.3所示创建临时对象判断条件元素交换图4.5.3 第五章 测试5.1 输入两个二阶矩阵这两个矩阵可以完成所设计的任何运算1 2;3 4与5 6;7 8测试程序如图输入矩阵1图5.1按提示输入矩阵1输入矩阵2图5.2按提示输入矩阵2矩阵1做转置运算图5.3矩阵1的转置矩阵2做转置运算图5.4矩阵2的转置两矩阵相加图5.5两矩阵相加两矩阵相减图5.6两矩阵相减两矩阵相乘图5.7两矩

9、阵相乘5.2再次输入两个矩阵做测试我们知道这两个矩阵不能完成加运算123;456与12;34;56图5.2.1输入两矩阵图5.2.2两矩阵做加、减、乘、转置运算 第六章 总结这个程序实现了对矩阵进行输入,加法,乘法,转置运算的功能。在设计的过程中,我感觉自己收获挺大的,从一开始的迷茫,不知道从何下手到把程序中的几个模块编写出来,所以先研究了几个别人的程序,到第二周开始自己编程,但又一次次陷入困境。在整个程序的编写过程中。最难的就是加法和乘法这两个模块,这也是我要解决的重点问题。开始编写加法和乘法时,很头疼,去向其他人寻求帮助,在别人的帮助和提示下,我编完了程序,但编译时老出错,又不得不向他人请

10、教。这样的话,整个程序基本上全部完成了,就剩下完善工作了。虽然设计时完成了,但是我觉得其中还是由一些不足之处:1.警告句。程序中缺少一些警告句,例如:“是否真的相加(y/n)?”。2.有可能的话可以分开页面做不同的程序,通过不同的提示进入不同的功能。整个程序完成了,还有很多不完善的地方,希望自己以后办事的时候要认真,仔细,考虑周全。短短的两周课程设计结束了,但是这段时间里,我又学到了更多C +的知识,如:类,文件流等,我认识到要想学好计算机就要重视实践操作,不仅仅是学习C+语言,还是其它的语言,以及其它的计算机方面的知识都要重在实践,所以后在学习过程中,我会更加注视实践操作,使自己便好地学好计

11、算机。同时,我也发现我的好多不足之处,我也被提醒以后办事的时候要认真,仔细,考虑周全。经过本次课程设计,我看到了互帮互助的重要性。这一点会让我终生受益。附录:程序代码#include #include /cmath是一个包含了许多数学函数的库文件,就像iostream一样,是库文件,程序中必然会有直接调用但是没定义的数学函数,就是应为有这个头文件using namespace std;/命名空间class Matrixprivate: double *data; /二维矩阵数据数组指针 int m,n;/矩阵的行数,列数public:Matrix()/cout无参构造函数被调用!endl;in

12、t i,j; data = new double*m; for (i=0;im;i+) datai=new doublen; for(i=0;im;i+)/行for(j=0;jn;j+)/列dataij=0;/无参构造函数,无参构造函数是自己定义的构造函数,只是构造函数是没有参数的,不用向函数传递数值或地址 Matrix(int row, int line) /动态分配二维数组空间,构造M行N列的矩阵(构造函数) m=row;n=line;/cout带参构造函数被调用!endl;int i,j; data = new double*m; for (i=0;im;i+) datai=new do

13、ublen; for(i=0;im;i+)/行for(j=0;jn;j+)/列dataij=0; Matrix(Matrix &com)/定义拷贝函数,拷贝构造函数要调用基类的拷贝构造函数和成员函数/cout拷贝构造函数被调用!endl;int i,j;m=com.m;n=com.n; data = new double*m; for (i=0;im;i+) datai=new doublen; for(i=0;im;i+)/行for(j=0;jn;j+)/列dataij=com.dataij;/*Matrix()/析构函数 int i;for(i=0;im;i+)delete datai;/

14、cout析构函数被调用!endl; */void GetData();Matrix operator +(Matrix);/矩阵加法,如果矩阵不匹配无法相加需要给出出错信息Matrix operator -(Matrix);/矩阵减法,如果矩阵不匹配无法相减需要给出出错信息Matrix operator *(Matrix);/矩阵乘法,如果矩阵不匹配无法相乘需要给出出错信息friend void operator !(Matrix); /矩阵转置运算void print();/输出结果;void Matrix:GetData()int i,j;cout输入矩阵数据:endl;for(i=0;i

15、m;i+)/行for(j=0;jn;j+)/列coutdataijdataij;cout矩阵已输入!endl;void Matrix:print()int i,j;for(i=0;im;i+)/行for(j=0;jn;j+)/列coutdataij ;coutendl;/矩阵的加法的重载Matrix Matrix:operator +(Matrix c)tryint error=1;if(m=c.m&n=c.n)Matrix Temp(m,n);int i,j; for(i=0;im;i+)/行for(j=0;jn;j+)/列Temp.dataij=dataij+c.dataij;return

16、 Temp;else throw error;catch(int)cout两矩阵行列不对应相等!无法相加!endl;Matrix Matrix:operator -(Matrix c)tryint error=1;if(m=c.m&n=c.n)Matrix Temp(m,n);int i,j; for(i=0;im;i+)/行for(j=0;jn;j+)/列Temp.dataij=dataij-c.dataij;return Temp;else throw error;catch(int)cout两矩阵行列不对应相等!无法相减!endl;Matrix Matrix:operator *(Mat

17、rix c)int error=1;tryif(m=c.n)Matrix t(m,c.n);int i,j,k;for(i=0;im;i+)for(j=0;jc.n;j+)for(k=0;kn;k+)t.dataij+=dataik*c.datakj;return t;else throw error;catch(int )cout两矩阵不满足相乘的条件!endl;/在一个类中重单目运算符,则无需指定参数,因为参数就是类对象本身void operator !(Matrix c)double te;int i,j;if(c.m=c.n)for(i=0;ic.m;i+)/行for(j=i;jc.n

18、;j+)/列te=c.dataij;c.dataij=c.dataji;c.dataji=te;c.print();cout原矩阵内的数据已被改变!endl;else Matrix temp(c.n,c.m);for(i=0;ic.n;i+)for(j=0;jc.m;j+)temp.dataij=c.dataji;temp.print();coutendl;cout原矩阵内的数据未被改变!endl;return ;cout友元函数operator !被调用!endl;int main(void)int raw1,line1,raw2,line2;cout输入第一个矩阵的相关参数:endl;co

19、utraw1;coutline1;Matrix c1(raw1,line1),c(raw1,line1);c1.GetData();cout输入第二个矩阵的相关参数:endl;coutraw2;coutline2;Matrix c2(raw2,line2),c3(raw1,line2);c2.GetData();cout矩阵c1为:endl;c1.print();coutendl;cout矩阵c1转置的结果为:endl;!c1; cout矩阵c2为:endl;c2.print(); coutendl;cout矩阵c2转置的结果为:endl;!c2;c=c1+c2;coutc1与c2相加的结果为:endl;c.print();c=c2-c1;coutc1与c2相减的结果为:endl;c.print();c3=c1*c2;coutc1与c2相乘的结果为:endl;c3.print();coutendl;30

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1