- 1、本文档共4页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C课程设计报告矩阵乘法计算
C++课程设计报告
一、题目名称:矩阵乘法计算
二、难易等级: A级
三、对题目的分析和注释:
分析:
依次建立两个矩阵空间并按照矩阵乘法规则进行运算。
(矩阵的乘法规则:
矩阵的乘法运算必须符合m*n的矩阵与n*s的矩阵相乘。
第一个矩阵的第i行的元素依次乘以第二个矩阵的第j列元素后结果相加组成生成矩阵第i行第j列元素。)
注释:
(1)设计一个矩阵类,将相应的函数和数据封装在类中,简化程序。
(2)修改程序结构,使程序可以反复执行,直至按键选择退出为止。
(3)本程序用数组表示5*5矩阵,将其改为根据输入矩阵的大小动态分配空间[m][n]来放置数据,其中m,n为用户可输入的任意整数。
(4)增加类的构造函数和成员函数,使得矩阵数据既可以用在对象初始化时赋值,也可以通过键盘赋值,还可以通过读取数据文件输入。
(5)用模板的形式改写矩阵数据类型,使得矩阵中的数据既可以是整型数据,也可以是浮点型数据,执行程序时,分别定义两个整型矩阵和两个浮点型矩阵进行乘法验证。
(6)完成矩阵的乘法运算,在运算之前判断这两个矩阵能否满足乘法运算的条件,若不满足,则给出提示信息。
四、所增加功能模块的设计
如果要说增加功能的话,自己编的程序里面不多,我只是按照题目要求,设计了一个矩阵类,同时用模板的形式改写矩阵数据类型和运算符的重载。
1、模板的使用
我使用了大量的模板,以T为模板参数,通过对T的不同类型的选择实现相应的运算处理。其中choose1()函数本是无参函数,为了方便模板化,给其赋以伪参数T,在执行时通过T的取值生成相应的函数模板。
templateclass T
void choose1(T)
{
}
调用时:
switch(sjlx)
{
case 1:
{
choose1(1);
}break;
case 2:
{
choose1(0.0);
}break;
case 3:
{
choose1(1e-10);
}break;
default:cout输入选择错误!!!endl;
}
2、矩阵类的构造
按照课本要求采用二级指针动态开辟内存空间,节省内存使用;
其中数据结构如下:
Mat--Mat[0] -----Mat[0][0] Mat[0][1] ……Mat[0][j]
Mat[1] -----Mat[1][0] Mat[1][1] ……Mat[1][j]
:
:
Mat[i] -----Mat[i][0] Mat[i][1] ……Mat[i][j]
实现构造的代码为:
templateclass T
CMatrixT::CMatrix(int row,int col)
{
int i,j;
nRow=row,nCol=col;
Mat=new T*[nRow];
for(i=0;inRow;i++)
{
Mat[i]=new T[nCol];
}
cout请输入数据:\n;
for(i=0;inRow;i++)
for(j=0;jnCol;j++)
{
cout第[i+1][j+1]个数据:;
cinMat[i][j];
}
}
3、运算符的重载
要实现矩阵间的乘法运算,有必要对其运算符进行重载。而乘法运算符又要针对不同数据类型进行运算,所以我对运算符重载函数模板化。
templateclass T
CMatrixT operator* (CMatrixT mat1,CMatrixT mat2)
{
CMatrixT mat3(mat1.nRow,mat2.nCol,0);
for(int i=0;imat1.nRow;i++)
for(int j=0;jmat2.nCol;j++)
{
mat3.Mat[i][j]=0;
for(int k=0;kmat1.nCol;k++)
mat3.Mat[i][j]+=mat1.Mat[i][k]*mat2.Mat[k][j];
}
return mat3;
}
五、设计中遇到的主要问题及解决办法
1、无法实现文件输入
主要原因是输入之前调用的是默认构造函数,只是简单赋值,并未开辟内存空间,后来调用带参构造函数就可以正常输入数据;
2、重载乘法运算的函数无法重载
经检查发现,由于重载的是友元函数,函数不存在this指针,因此必须显式地调用两个相乘的矩阵类。
六、设计中尚存的不足
1、功能还不够强大,只能做简单的矩阵乘法,我所期望的是能够做各种混合运算,具有强大处理功能的实用程序,希望在以后的
文档评论(0)