


已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C+课程设计实验报告姓名 陈国杭 学号 915104330113 班级9151043301 任课教师 赵琦 时间 3月 选择题目 矩阵转置及乘法运算 难易级别 A级 实验报告成绩 一、程序功能简介该程序定义了一个向量类,里面的元素是模板形式,定义了有关向量类的各种属性、方法及运算符重载函数。二、课程设计要求和目的1. 利用已知的向量类对象定义一个矩阵类,矩阵类的数据是向量子对象,同样定义矩阵类的各种属性、方法及运算符重载函数。2. 完善成员函数,使矩阵可以由文件输入,具体的输入格式自己规定。3. 完善矩阵的赋值、转置、乘法等运算,要求用整形矩阵和浮点型矩阵分别演算。4. 更改main函数结构,可由用户选择输入矩阵数据的方法,程序可以连续运行,知道选择退出为止。三、课程设计中要解决的问题分析和调试1.源程序只给出了菜单的样式,及函数类的格式。2.运算符重载函数要重新熟练。3.引用的头文件(输入输出流)(file stream)(数学常用库函数)(提供一些函数与符号常量)(string类)。 4.添加人性化界面,初始运行程序时加了一个友好的界面,并附带输出了自己的姓名和学号,选择退出时,亦有特别字样。5.在主函数中调用read()函数,通过read()中读取外部文件,但会内存错误(已解决,行和列的未定义。)。5.在进行四种不同的运算时均会询问输入方式,main函数利用switch函数进行主菜单的编辑。6. 在矩阵输入中增加错误判断的功能,防止输入错误导致程序无法进行。7. 程序中若输入的矩阵无法求逆,或者无法进行乘法,会直接退出程序,亟待解决四、源程序结构流程框图与说明Y选择退出作者:陈国杭 学号:915104330113N进行运算开始进入程序主菜单:选择何种计算输入选择提示输入矩阵的方式输入选择键盘输入矩阵输出结果是否继续执行程序结束退出选择”5”矩阵是否符合要求YN 6、 源程序代码 以及草稿原件#include#include#include#include#includeusing namespace std;template/模板函数class CMatrixint row;int col;T*a;public:CMatrix(); /构造函数 CMatrix(int r,int c); CMatrix(const CMatrix &src); /拷贝构造函数 CMatrix(); /析构函数 CMatrix&operator=(const CMatrix&); CMatrixzhuanzhi(); /转置函数 CMatrixqiuni(); /求逆矩阵 CMatrixoperator*(const CMatrix&m)const; /矩阵的乘法 CMatrixshucheng(double num); /矩阵数乘 CMatrixread(char * fileName); /从文件输入 void input(); /从键盘输入 void show(); /显示矩阵 ; template CMatrix:CMatrix() row=0; col=0; a=NULL; /构造函数 template CMatrix:CMatrix(int r,int c) row=r; col=c; int i,j; a=new T*r; for(i=0;ir;i+) ai=new Tc; for(i=0;irow;i+) for(j=0;jcol;j+) aij=0.0; /将数组归零 template CMatrix:CMatrix(const CMatrix&m) /拷贝 row=m.row; col=m.col; int i,j; a=new T*row; /动态建立二维数组 for(i=0;irow;i+) ai=new Tcol; for(i=0;irow;i+) /动态数组赋值 for(j=0;jcol;j+) aij=m.aij; template CMatrix:CMatrix() /析构 for(int i=0;irow;i+) delete ai; delete a; template CMatrix&CMatrix:operator=(const CMatrix&m) /等于 for(int i=0;irow;i+) deleteai; deletea; row=m.row; col=m.col; a=new C*row; for(int i=0;irow;i+) for(int j=0;jcol;j+) aij=m.aij; return *this; template CMatrixCMatrix:zhuanzhi() /转置 CMatrix m(col,row); for(int i=0;irow;i+) for(int j=0;jcol;j+) m.aji=aij; return m; template CMatrixCMatrix:qiuni() CMatrix s(1,1); s.a00=0; if(row!=col) cout输入的矩阵没有逆矩阵。nendl; return s; ; CMatrix t(row,col); CMatrix n(row,col); int i,j,k; float max,temp; for(i=0;irow;i+) for(j=0;jcol;j+) t.aij=aij; for(i=0;irow;i+) for(j=0;jcol;j+) n.aij=(i=j)?1:0; for(i=0;irow;i+) max=t.aii; k=i; for(j=i+1;jfabs(max) max=t.aji; k=j; if(k!=i) for(j=0;jcol;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;jcol;j+) t.aij=t.aij/temp; n.aij=n.aij/temp; for(j=0;jcol;j+) if(j!=i) temp=t.aji; for(k=0;kcol;k+) t.ajk=t.ajk-t.aik*temp; n.ajk=n.ajk-n.aik*temp; return n; templateCMatrixCMatrix:operator*(const CMatrix&m)const /重载乘法 CMatrix s(1,1); s.a00=0;CMatrix n(row,m.col);if(col!=m.row)return s; for(int i=0;irow;i+) for(int j=0;jm.col;j+) for(int k=0;kcol;k+) n.aij+=aik*m.akj; /题目所给的矩阵乘法算法return n;template CMatrixCMatrix:shucheng(double num) /数乘 CMatrix b(row,col);for(int i=0;irow;i+) for(int j=0;jcol;j+) b.aij=aij*num;return b; template CMatrixCMatrix:read(char * fileName) /从文件输入 ifstream infile; infile.open(fileName);Loop:if(!infile) infile.close(); cout不能打开该文件endl; coutfileName; infile.clear(); infile.open(fileName);goto Loop; /防止多次输错 int row;int col; infilerowcol; CMatrixm(row,col);/通过文件前两个数字作为行、列 double z; int i=0,j=0; while(infilez) m.aij=z; if(j+1)%col=0) j=0; i+=1; /定义何时换行 else j+=1; infile.close();return m; template void CMatrix:input() /键盘输入矩阵 for(int i=0;irow;i+) for(int j=0;jaij; template void CMatrix:show() /显示矩阵 for(int i=0;irow;i+) for(int j=0;jcol;j+) coutaij ; coutendl; int main() int x,y; cout*欢迎使用 矩阵计算器*endl; cout 制作者:陈国杭 学号:915104330113endl; cout主菜单endl; cout1. 计算矩阵的转置 endl; cout2. 计算矩阵的逆 endl; cout3. 计算矩阵的乘法 endl; cout4. 计算矩阵的数乘 endl; cout5. 退出菜单 endl; coutendl; qing:coutx) if(x=5) cout欢迎再次使用5|x1) cout输入错误,请重新输入!endl;goto qing; coutendl; cout1. 文件输入endl; cout2. 键盘输入endl; coutendl;yxiu: couty; if (y!=1&y!=2)cout输入错误,请重新输入!endl;goto yxiu; coutendl; switch(x) case 1: if(y=1) char filename256; coutfilename; coutendl; CMatrixm1; CMatrixm2=m1.read(filename); CMatrixm3=m2.zhuanzhi(); cout原矩阵的转置矩阵为:n; m3.show(); if(y=2) int h,l; couth; coutl; cout请依次输入矩阵的值:; CMatrixm1(h,l); m1.input(); CMatrixm2=m1.zhuanzhi(); coutendl; cout原矩阵的转置矩阵为:n; m2.show(); ; break; case 2: if(y=1) char filename256; coutfilename; coutendl; CMatrixm1; CMatrixm2=m1.read(filename); CMatrixm3=m2.qiuni(); cout原矩阵的逆矩阵为:n; m3.show(); if(y=2) int h,l; couth; coutl; cout请依次输入矩阵的值:; CMatrixm1(h,l); m1.input(); CMatrixm2=m1.qiuni(); coutendl; cout原矩阵的逆矩阵为:n; m2.show(); ; break; case 3: if(y=1) char filename1256;cout请输入文件名:;coutfilename1; coutendl; CMatrixm1; CMatrixm2=m1.read(filename1);coutendl;char filename2256;cout请输入文件名:;coutfilename2; coutendl;CMatrixm3; CMatrixm4=m3.read(filename2);coutendl; CMatrixm5=m2*m4; cout两个矩阵相乘结果为:n; m5.show(); if(y=2) int h1,l1,h2,l2; coutendl; couth1; coutl1; cout请依次输入第一个矩阵的值:; CMatrixm1(h1,l1); m1.input(); coutendl; couth2; coutl2; if(l1!=h2)cout两矩阵不能相乘。nendl;break; cout请依次输入第二个矩阵的值:; CMatrixm2(h2,l2); m2.input(); CMatrixm3=m1*m2; coutendl; cout两个矩阵相乘结果为:n; m3.show(); ; break; case 4: if(y=1) int s; char filename256; coutfilename; coutendl; CMatrixm1; CMatrixm2=m1.read(filename); couts; CMatrixm3=m2.shucheng(s); cout输入矩阵与实数相乘结果为:n; m3.show(); if(y=2) int h,l,s; couth; coutl; cout请依次输入矩阵的值:; CMatrixm1(h,l); m1.input(); coutendl; couts; CMatrixm2=m1.shucheng(s); coutendl; cout输入矩阵与实数相乘结果为:n; m2.show(); ;break; coutendl; cout-endl
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 个性化定制离婚协议书模板
- 物流运输合同签订与仓储管理流程图
- 离异父母子女抚养费增加及支付金额调整协议
- 物业分公司7月物业费收缴及使用专项合同
- 离婚协议签订时双方子女国际交流及留学协议
- 煤炭运输合同范本:煤炭行业运输安全标准
- 房地产销售团队核心信息保密及竞业限制合同样本
- 讲师礼仪培训纲要
- 生字记得快课件
- 乳房标本解剖课件
- 2025混凝土建材购销合同范本
- 支教考试笔试试题真题及答案
- 2024-2025学年四年级第一学期语文教学计划及教学进度表
- 餐饮公司中标协议书
- 肥胖症诊疗指南(2024年版)解读
- 入股瑜伽店协议书
- 旅游团队境外医疗援助补充协议
- 汽车报废委托协议书
- 光伏支架生产工艺流程
- 钢结构雨棚作业安全技术交底
- 女性私密项目培训
评论
0/150
提交评论