


版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C+课程设计实验报告姓名陈国杭学号 9班级 9151043301任课教师赵琦时间3月选择题目矩阵转置及乘法运算难易级别 A 级实验报告成绩一、程序功能简介该程序定义了一个向量类, 里面的元素是模板形式, 定义了有关向量类的各种属性、方法及运算符重载函数。二、课程设计要求和目的1. 利用已知的向量类对象定义一个矩阵类,矩阵类的数据是向量子对象,同样定义矩阵类的各种属性、方法及运算符重载函数。2. 完善成员函数,使矩阵可以由文件输入,具体的输入格式自己规定。3. 完善矩阵的赋值、转置、乘法等运算,要求用整形矩阵和浮点型矩阵分别演算。4. 更改 main 函数结构, 可由用户选择输入矩阵数据的方法,
2、 程序可以连续运行, 知道选择退出为止。三、课程设计中要解决的问题分析和调试1. 源程序只给出了菜单的样式,及函数类的格式。2. 运算符重载函数要重新熟练。3. 引用的头文件<iostream> (输入输出流)<fstream>()<cmath> (数学常用库函数)<cstdlib> (提供一些函数与符号常量)<string> ( string 类)。4. 添加人性化界面, 初始运行程序时加了一个友好的界面 , 并附带输出了自己的姓名和学号,选择退出时,亦有特别字样。5. 在主函数中调用 read() 函数,通过 read() 中读取
3、外部文件,但会内存错误(已解决,行和列的未定义。)。5. 在进行四种不同的运算时均会询问输入方式,main 函数利用switch函数进行主菜单的编辑。6. 在矩阵输入中增加错误判断的功能,防止输入错误导致程序无法进行。7. 程序中若输入的矩阵无法求逆,或者无法进行乘法,会直接退出程序,亟待解决四、源程序结构流程框图与说明入开程始序进主菜单:选择何种计算输入选择选择”5”提示输入矩阵的方式N输入选择键盘输入矩阵Y矩阵是否Y进行选符合要求运择算退出输出结果是否继续执行程序N结束退出作者:陈国杭学号: 9六、源程序代码以及草稿原件#include<iostream>#include<
4、;fstream> #include<cmath> #include<cstdlib> #include<string> using namespace std; template<class T>/ class CMatrix 模板函数int row;int col;T*a;public:CMatrix();/构造函数CMatrix(int r,int c);CMatrix(const CMatrix &src);/拷贝构造函数CMatrix();/析构函数CMatrix&operator=(const CMatrix&a
5、mp;);CMatrix<T>zhuanzhi();/转置函数矩阵CMatrix<T>qiuni();/CMatrix<T>operator*(const CMatrix<T>&m)const;/求逆矩阵的乘法CMatrix<T>shucheng(double num);/矩阵数乘CMatrix<T>read(char*);/ 从文件输入void input();/从键盘输入void show();/显示矩阵;template<class T>CMatrix<T>:CMatrix()row=
6、0;col=0;a=NULL;/构造函数template<class T>CMatrix<T>:CMatrix(int r,int c)row=r;col=c;int i,j;a=new T*r;for(i=0;i<r;i+)ai=new Tc;for(i=0;i<row;i+)for(j=0;j<col;j+)aij=0.0;/将数组归零template<class T>CMatrix<T>:CMatrix(const CMatrix<T>&m)/拷贝row=m.row;col=m.col;int i,j;
7、a=new T*row;/动态建立二维数组for(i=0;i<row;i+)ai=new Tcol;for(i=0;i<row;i+)/动态数组赋值for(j=0;j<col;j+)aij=m.aij;template<class T>CMatrix<T>:CMatrix()/析构for(int i=0;i<row;i+)delete ai;delete a;template<class T>CMatrix<T>&CMatrix<T>:operator=(constCMatrix<T>&am
8、p;m)/ 等于for(int i=0;i<row;i+)deleteai;deletea;row=m.row;col=m.col;a=new C*row;for(int i=0;i<row;i+)for(int j=0;j<col;j+)aij=m.aij;return *this;template<class T>CMatrix<T>CMatrix<T>:zhuanzhi()/转置CMatrix m(col,row);for(int i=0;i<row;i+)for(int j=0;j<col;j+)m.aji=aij;re
9、turn m;template<class T>CMatrix<T>CMatrix<T>:qiuni()CMatrix s(1,1);s.a00=0;if(row!=col)cout<<"输入的矩阵没有逆矩阵。n"<<endl;return s;CMatrix t(row,col);CMatrix n(row,col);int i,j,k;float max,temp;for(i=0;i<row;i+)for(j=0;j<col;j+)t.aij=aij;for(i=0;i<row;i+)for(
10、j=0;j<col;j+)n.aij=(i=j)?1:0;for(i=0;i<row;i+)max=t.aii;k=i;for(j=i+1;j<col;j+)if(fabs(t.aji)>fabs(max)max=t.aji;k=j;if(k!=i)for(j=0;j<col;j+)temp=t.aij;t.aij=t.akj;t.akj=temp;temp=n.aij;n.aij=n.akj;n.akj=temp;if(t.aii=0)cout<<"输入的矩阵没有逆矩阵。n"return s;temp=t.aii;for(j=0;
11、j<col;j+)t.aij=t.aij/temp;n.aij=n.aij/temp;for(j=0;j<col;j+)if(j!=i)temp=t.aji;for(k=0;k<col;k+)t.ajk=t.ajk-t.aik*temp;n.ajk=n.ajk-n.aik*temp;return n;template<class T>CMatrix<T>CMatrix<T>:operator*(constCMatrix<T>&m)const/ 重载乘法CMatrix s(1,1);s.a00=0;CMatrix n(ro
12、w,m.col);if(col!=m.row)return s;for(int i=0;i<row;i+)for(int j=0;j<m.col;j+)for(int k=0;k<col;k+)n.aij+=aik*m.akj;/题目所给的矩阵乘法算法return n;template<class T>CMatrix<T>CMatrix<T>:shucheng(doublenum)/ 数乘CMatrix b(row,col);for(int i=0;i<row;i+)for(int j=0;j<col;j+)b.aij=aij*
13、num;return b;template<class T>CMatrix<T>CMatrix<T>:read(char*)/ 从文件输入ifstream infile; in();Loop:if(!infile)in();cout<<" 不能打开该文件 "<<endl;cout<<" 再次输入文件名 :"cin>>in();in();goto Loop; /防止多次输错int row;int col;infile>>row>>col;CMatri
14、x<T>m(row,col);/ 通过文件前两个数字作为行、列 double z;int i=0,j=0;while(infile>>z)m.aij=z;if(j+1)%col=0)j=0;i+=1;/定义何时换行else j+=1;in();return m;template<class T>void CMatrix<T>:input()/键盘输入矩阵for(int i=0;i<row;i+)for(int j=0;j<col;j+)cin>>aij;template<class T>voidCMatrix&
15、lt;T>:show()/ 显示矩阵for(int i=0;i<row;i+)for(int j=0;j<col;j+)cout<<aij<<""cout<<endl;int main()int x,y;cout<<"*欢迎使用矩阵计算器*"<<endl;cout<<"制作者:陈国杭学号: 9"<<endl;cout<<" 主菜单 "<<endl;cout<<"1.计算
16、矩阵的转置 " <<endl;cout<<"2.计算矩阵的逆 " <<endl;cout<<"3.计算矩阵的乘法 " <<endl;cout<<"4.计算矩阵的数乘 " <<endl;cout<<"5.退出菜单 " <<endl;cout<<endl;qing:cout<<"请选择一种正确的运算while(cin>>x):"if(x=5) co
17、ut<<"欢迎再次使用 "<<endl;break;elseif(x>5|x<1)cout<<" 输入错误,请重新输入!"<<endl;gotoqing;cout<<endl;cout<<"1.文件输入 "<<endl;cout<<"2.键盘输入 "<<endl;cout<<endl;yxiu:cout<<"请选择正确的输入方式:"cin>>
18、y;if (y!=1&&y!=2)cout<<"输入错误,请重新输入!"<<endl;gotoyxiu;cout<<endl;switch(x)case 1:if(y=1)char 256;cout<<" 请输入文件名: "cin>>cout<<endl;CMatrix<double>m1;CMatrix<double>m2=m1.read();CMatrix<double>m3=m2.zhuanzhi();cout<<
19、"原矩阵的转置矩阵为:n"m3.show();if(y=2)int h,l;cout<<"请输入矩阵的行 :"cin>>h;cout<<"请输入矩阵的列 :"cin>>l;cout<<" 请依次输入矩阵的值: "CMatrix<double>m1(h,l);m1.input();CMatrix<double>m2=m1.zhuanzhi();cout<<endl;cout<<"原矩阵的转置矩阵为:n
20、"m2.show();break;case 2:if(y=1)char 256;cout<<" 请输入文件名: "cin>>cout<<endl;CMatrix<double>m1;CMatrix<double>m2=m1.read();CMatrix<double>m3=m2.qiuni();cout<<"原矩阵的逆矩阵为: n"m3.show();if(y=2)int h,l;cout<<"请输入矩阵的行 :"cin>&
21、gt;h;cout<<"请输入矩阵的列 :"cin>>l;cout<<"请依次输入矩阵的值:"CMatrix<double>m1(h,l);m1.input();CMatrix<double>m2=m1.qiuni();cout<<endl;cout<<"原矩阵的逆矩阵为: n"m2.show();break;case 3:if(y=1)char 256;cout<<" 请输入文件名 :"cout<<&quo
22、t; 第一个矩阵 t"cin>>cout<<endl;CMatrix<double>m1;CMatrix<double>m2=m1.read();cout<<endl;char 256;cout<<" 请输入文件名 :"cout<<" 第二个矩阵 t"cin>>cout<<endl;CMatrix<double>m3;CMatrix<double>m4=m3.read();cout<<endl;CMat
23、rix<double>m5=m2*m4;cout<<"两个矩阵相乘结果为:n"m5.show();if(y=2)int h1,l1,h2,l2;cout<<endl;cout<<"请输入第一个矩阵的行:"cin>>h1;cout<<"请输入第一个矩阵的列:"cin>>l1;cout<<"请依次输入第一个矩阵的值:"CMatrix<double>m1(h1,l1);m1.input();cout<<
24、endl;cout<<"请输入第二个矩阵的行:"cin>>h2;cout<<"请输入第二个矩阵的列:"cin>>l2;if(l1!=h2)cout<<" 两矩阵不能相乘。 n"<<endl;break; cout<<" 请依次输入第二个矩阵的值: "CMatrix<double>m2(h2,l2);m2.input();CMatrix<double>m3=m1*m2;cout<<endl;cout
25、<<"两个矩阵相乘结果为:n"m3.show();break;case 4:if(y=1)int s;char 256;cout<<" 请输入文件名: "cin>>cout<<endl;CMatrix<double>m1;CMatrix<double>m2=m1.read();cout<<" 请输入要乘的实数: "cin>>s;CMatrix<double>m3=m2.shucheng(s);cout<<"输入矩阵与实数相乘结果为:n"m3.show();if(y=2)int h,l,s;cout<<"请输入矩阵的行 :"cin>
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高中班主任德育工作计划(7篇)
- 在职党员双重管理制度
- 工业项目标准合同(5篇)
- 监理师考试关键试题及答案解析
- 理解云计算在嵌入式中的应用试题及答案
- 进入软件测试行业的门槛与要求试题及答案
- 软件测试工程师行业动态解读试题及答案
- 国际商务交流与谈判题库试题集汇
- 公路工程现场管理技巧试题及答案
- 2025年新教师岗前培训计划范文(5篇)
- 三方协议书(消防)
- 工序能耗计算方法及等级指标
- 预激综合征临床心电图的当前观点
- 阀门检修作业指导书讲解
- 毕业设计(论文)秸秆粉碎机的设计(含全套图纸)
- 药店组织机构图及部门设置说明
- 桩基钢筋笼吊装计算书(共16页)
- 危大工程验收表-
- 叶轮动平衡试验报告A
- 注浆管施工方案
- 公共场所卫生行政许可延续申请表
评论
0/150
提交评论