




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C+让机实验报告指导教师:冯潇姓名:赵蕊学号:2010211864班级:0411003时间:2012/5/21实验 6-3 矩阵运算题目:对具有同行列数的整形矩阵进行加、减、乘、转置、赋值运算、问题分析和任务定义1 .本实验通过矩阵类 Matrix 来实现,并运用 Matrix 类的重载做运算。2 .Matrix 的数据成员有:行 line、列 col、指向矩阵的元素的指针 int*elems。它的成员函数有:(1)构造函数;(2)析构函数;(3)复制构造函数;(4)对属性进行修改的 set 方法;(5)对属性进行读取的 get 方法;(6)对 Matrix 进行重载加运算符;(7)对 Mat
2、rix 进行重载减运算符;(8)对 Matrix 进行重载乘运算符;(9)对 Matrix 进行重载转置运算符;(10)对 Matrix 进行重载赋值运算符;、概要设计1.为实现矩阵的加、减、乘、转置、赋值运算必须弄清楚矩阵的具体运算规则。(1)矩阵的加减法运算;矩阵的加减法必须俩个矩阵的行列数相同,然后对应位置的行列进行相加减。(2)矩阵的乘法运算;矩阵的乘法运算必须运算的矩阵的第一个矩阵的列数与运算的第二个矩阵的行数相同,否则不能运算。运算时,第一个矩阵的第 i 行第 j 列的数与第二个矩阵的第 i列元素分别相乘为新矩阵的第 i 行第 j 列的数。(3)矩阵的赋值运算;矩阵的赋值运算即俩个
3、矩阵的元素完全相同。(4)矩阵的转置运算;矩阵的转置运算即为转置前的第 i 行第 j 列的数即为转置后的矩阵的第 j 行第 i 列的2.程序的流程图三、详细设计1 .定义 Matrix 类和友元#ifndefMATRIX_H#defineMATRIX_H#includeusingnamespacestd;classMatrix;Matrixoperator+(constMatrix&a,constMatrix&b);Matrixoperator-(constMatrix&a,constMatrix&b);Matrixoperator*(constMatrix&a
4、mp;a,constMatrix&b);classMatrixfriendMatrixoperator+(constMatrix&a,constMatrix&b);friendMatrixoperator-(constMatrix&a,constMatrix&b);friendMatrixoperator*(constMatrix&a,constMatrix&b);public:Matrix(intl,intc);Matrix(constMatrix&m);Matrix。;voidsetLine(intl);voidsetCol(
5、intc);voidsetElems();intgetLine()const;intgetCol()const;voidprint()const;Matrix&operator=(constMatrix&m);Matrixoperator()const;private:intline;intcol;int*elems;#endif2. Matrix 的构造函数与赋值构造函数和析构函数 Matrix:Matrix(intl,intc)setLine(l);setCol(c);elems=newintcol*line;Matrix:Matrix(constMatrix&m)
6、line=m.line;col=m.col;elems=newintline*col;for(inti=0;iline*col;i+)elemsi=m.elemsi;3. Matrix 的赋值运算Matrix&Matrix:operator=(constMatrix&m)setLine(m.line);setCol(m.col);deleteelems;elems=newintline*col;for(inti=0;iline*col;i+)elemsi=m.elemsi;return*this;)4. Matrix 的转置运算MatrixMatrix:operator()co
7、nst(Matrixt(col,line);for(inti=0;iline;i+)for(intj=0;jcol;j+)t.elemsline*j+i=elemscol*i+j;returnt;)5. Matrix 的加法运算Matrixoperator+(constMatrix&a,constMatrix&b)(if(a.line!=b.line|a.col!=b.col)(cerr两矩阵的行列数不相同!endl;exit(EXIT_FAILURE);)Matrixc(a.line,a.col);for(inti=0;ia.line*a.col;i+)c.elemsi=a.
8、elemsi+b.elemsi;returnc;)6. Matrix 的减法运算Matrixoperator-(constMatrix&a,constMatrix&b)(if(a.line!=b.line|a.col!=b.col)(cerr两矩阵的行列数不相同!endl;exit(EXIT_FAILURE);)Matrixc(a.line,a.col);for(inti=0;ia.line*a.col;i+)c.elemsi=a.elemsi-b.elemsi;returnc;)7. Matrix 的乘法运算Matrixoperator*(constMatrix&a,
9、constMatrix&b)(if(a.col!=b.line)(cerr第一个矩阵的列数和第二个矩阵的行数不相同!endl;exit(EXIT_FAILURE);)intline=a.line,col=b.col;inti,j,k;Matrixtemp(line,col);for(i=0;iline*col;i+)temp.elemsi=0;for(i=0;iline;i+)for(k=0;kcol;k+)for(j=0;jb.line;j+)temp.elemsi*col+k+=a.elemsi*col+j*b.elemsj*col+k;returntemp;)8 .输出矩阵的元素
10、voidMatrix:print()constinti;for(i=0;iline*col;i+)if(i+1)%(col)=0)coutsetw(5)elemsiendl;)elsecoutsetw(5)elemsi;)9 .主函数intmain()Matrixa(3,3),b(3,3);cout请输入第一个矩阵的元素:endl;a.setElems();a.print();cout请输入第二个矩阵的元素:endl;b.setElems();b.print();Matrixc(3,3);cout两矩阵的乘积为:endl;c=a*b;c.print();coutn 转置矩阵为:endl;(c)
11、.print();return0;四、调试分析本程序通过自己构造矩阵类,对矩阵进行构造,并进行一系列运算,还进行复制构造函数之类的进行操作,开始进行调试构造函数没问题,在进行“operator/运算时一直出错,经过长达一个小时左右的调试,查错,最终终于查到错误,一个很小的错误尽然困惑了 1 个小时,在进行赋值构造函数时竟然没有进行动态存储分配空间,导致每次运行到“operator”时直接程序爆掉,也让我想起上次的一个程序尽然没有释放一个开辟的空间,导致在循环中一直开辟空间导致程序一直处于开辟空间的状态,也使程序一直爆掉,生活中很少能够做到很谨慎的处理问题,这是一个合格的程序员必须克服的问题,自
12、己在以后的一定要在熟练掌握各种知识点的同时好好的注意没一个细节。五、运行结果请输入第一个矩阵的元素;12345&7S912345679请输入第二个矩阵的元素:9B7654321?B?654两矩那的藁积为:3月241884695413811490转置矩阵为388413824691141S5490Pressanykeytocontinue附源程序:#ifndefMATRIX_H#defineMATRIX_H#includeusingnamespacestd;classMatrix;Matrixoperator+(constMatrix&a,constMatrix&b);Ma
13、trixoperator-(constMatrix&a,constMatrix&b);Matrixoperator*(constMatrix&a,constMatrix&b);classMatrixfriendMatrixoperator+(constMatrix&a,constMatrix&b);friendMatrixoperator-(constMatrix&a,constMatrix&b);friendMatrixoperator*(constMatrix&a,constMatrix&b);public:M
14、atrix(intl,intc);Matrix(constMatrix&m);Matrix();voidsetLine(intl);voidsetCol(intc);voidsetElems();intgetLine()const;intgetCol()const;voidprint()const;Matrix&operator=(constMatrix&m);Matrixoperator()const;private:intline;intcol;int*elems;#endif#includematrix.h#includeMatrix:Matrix(intl,in
15、tc)setLine(l);setCol(c);elems=newintcol*line;Matrix:Matrix(constMatrix&m)line=m.line;col=m.col;elems=newintline*col;for(inti=0;iline*col;i+)elemsi=m.elemsi;Matrix:Matrix()deleteelems;voidMatrix:setLine(intl)line=l;)voidMatrix:setCol(intc)(col=c;)voidMatrix:setElems()(inti,size=col*line;for(i=0;i
16、elemsi;)intMatrix:getLine()const(returnline;)intMatrix:getCol()const(returncol;)voidMatrix:print()constinti;for(i=0;iline*col;i+)if(i+1)%(col)=0)coutsetw(5)elemsiendl;)elsecoutsetw(5)elemsi;)Matrix&Matrix:operator=(constMatrix&m)(setLine(m.line);setCol(m.col);deleteelems;elems=newintline*col
17、;for(inti=0;iline*col;i+)elemsi=m.elemsi;)return*this;)MatrixMatrix:operator-()constMatrixt(col,line);for(inti=0;iline;i+)for(intj=0;jcol;j+)t.elemsline*j+i=elemscol*i+j;returnt;)#includematrix.hMatrixoperator*(constMatrix&a,constMatrix&b)if(a.col!=b.line)cerr第一个矩阵的列数和第二个矩阵的行数不相同exit(EXIT_FA
18、ILURE);)intline=a.line,col=b.col;inti,j,k;Matrixtemp(line,col);for(i=0;iline*col;i+)temp.elemsi=0;!endl;for(i=0;iline;i+)for(k=0;kcol;k+)for(j=0;jb.line;j+)temp.elemsi*col+k+=a.elemsi*col+j*b.elemsj*col+k;returntemp;)Matrixoperator-(constMatrix&a,constMatrix&b)(if(a.line!=b.line|a.col!=b.col)(cerr两矩阵的行列数不相同!endl;exit(EXIT_FAILURE);)Matrixc(a.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025财产信托合同模板
- 中班安全教育《禁止的事情不能做》教案及课件大纲
- 2025《产品代理合同范本》
- 2025年二房东出租房屋租赁合同模板
- 2025科技公司租赁合同模板
- 2025装饰装修工程劳务总承包合同
- 2025关于商业建筑设计合同
- 2025工程承包合作合同协议
- 玩具管理员课件
- 幼儿园安全教育之乘车安全
- 我国区域发展战略 【核心知识精讲精思】 高一地理下学期 (湘教版2019必修第二册)
- 2023年美国AHA心肺复苏指南
- DL-T 2087-2020 火力发电厂热电联产供热技术导则
- GB/T 20840.103-2020互感器第103部分:互感器在电能质量测量中的应用
- (模版1)某标准件厂冷镦车间变电所设计
- 2022Z世代洞察报告QuestMobile
- 大专毕业论文3000字格式12篇
- 部编版语文六年级下册期末总复习
- 初中学生家长会安全教育课件
- 第二部分-CPO-10中央机房优化控制系统
- 2020新版个人征信报告模板
评论
0/150
提交评论