矩阵类的设计_第1页
矩阵类的设计_第2页
矩阵类的设计_第3页
矩阵类的设计_第4页
矩阵类的设计_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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章 类的设计7

3、3.1 matrix类的设计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 matrixprivat

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

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

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

8、法模块的流程下图4.5.2所示行或列相对应元素相乘提示错误判断结果相加输出结果图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两矩阵相加两矩阵相减

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

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

11、我会更加注视实践操作,使自己便好地学好计算机。同时,我也发现我的好多不足之处,我也被提醒以后办事的时候要认真,仔细,考虑周全。经过本次课程设计,我看到了互帮互助的重要性。这一点会让我终生受益。附录:程序代码#include <iostream>#include <math.h> /cmath是一个包含了许多数学函数的库文件,就像iostream一样,是库文件,程序中必然会有直接调用但是没定义的数学函数,就是应为有这个头文件using namespace std;/命名空间class matrixprivate: double *data; /二维矩阵数据数组指针 int

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

13、m=row;n=line;/cout<<"带参构造函数被调用!"<<endl;int i,j; data = new double*m; for (i=0;i<m;i+) datai=new doublen; for(i=0;i<m;i+)/行for(j=0;j<n;j+)/列dataij=0; matrix(matrix &com)/定义拷贝函数,拷贝构造函数要调用基类的拷贝构造函数和成员函数/cout<<"拷贝构造函数被调用!"<<endl;int i,j;m=com.m;n=

14、com.n; data = new double*m; for (i=0;i<m;i+) datai=new doublen; for(i=0;i<m;i+)/行for(j=0;j<n;j+)/列dataij=com.dataij;/*matrix()/析构函数 int i;for(i=0;i<m;i+)delete datai;/cout<<"析构函数被调用!"<<endl; */void getdata();matrix operator +(matrix);/矩阵加法,如果矩阵不匹配无法相加需要给出出错信息matrix

15、operator -(matrix);/矩阵减法,如果矩阵不匹配无法相减需要给出出错信息matrix operator *(matrix);/矩阵乘法,如果矩阵不匹配无法相乘需要给出出错信息friend void operator !(matrix); /矩阵转置运算void print();/输出结果;void matrix:getdata()int i,j;cout<<"输入矩阵数据:"<<endl;for(i=0;i<m;i+)/行for(j=0;j<n;j+)/列cout<<"data"<&l

16、t;i<<""<<""<<j<<" = "cin>>dataij;cout<<"矩阵已输入!"<<endl;void matrix:print()int i,j;for(i=0;i<m;i+)/行for(j=0;j<n;j+)/列cout<<dataij<<" "cout<<endl;/矩阵的加法的重载matrix matrix:operator +(matrix

17、c)tryint error=1;if(m=c.m&&n=c.n)matrix temp(m,n);int i,j; for(i=0;i<m;i+)/行for(j=0;j<n;j+)/列temp.dataij=dataij+c.dataij;return temp;else throw error;catch(int)cout<<"两矩阵行列不对应相等!无法相加!"<<endl;matrix matrix:operator -(matrix c)tryint error=1;if(m=c.m&&n=c.n)

18、matrix temp(m,n);int i,j; for(i=0;i<m;i+)/行for(j=0;j<n;j+)/列temp.dataij=dataij-c.dataij;return temp;else throw error;catch(int)cout<<"两矩阵行列不对应相等!无法相减!"<<endl;matrix matrix:operator *(matrix c)int error=1;tryif(m=c.n)matrix t(m,c.n);int i,j,k;for(i=0;i<m;i+)for(j=0;j<

19、;c.n;j+)for(k=0;k<n;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;i<c.m;i+)/行for(j=i;j<c.n;j+)/列te=c.dataij;c.dataij=c.dataji;c.

20、dataji=te;c.print();cout<<"原矩阵内的数据已被改变!"<<endl;else matrix temp(c.n,c.m);for(i=0;i<c.n;i+)for(j=0;j<c.m;j+)temp.dataij=c.dataji;temp.print();cout<<endl;cout<<"原矩阵内的数据未被改变!"<<endl;return ;cout<<"友元函数'operator !'被调用!"<<endl;int main(void)int raw1,line1,raw2,line2;cout<<"输入第一个矩阵的相关参数:"<<endl;cout<<"行数:"cin>>raw1;cout<<"列数:"cin>>line1;matrix c1(raw1,li

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论