南京理工大学C++课程设计.docx
- 文档编号:24044266
- 上传时间:2023-05-23
- 格式:DOCX
- 页数:20
- 大小:134.86KB
南京理工大学C++课程设计.docx
《南京理工大学C++课程设计.docx》由会员分享,可在线阅读,更多相关《南京理工大学C++课程设计.docx(20页珍藏版)》请在冰豆网上搜索。
南京理工大学C++课程设计
C++课程设计实验报告
姓名陈国杭学号915104330113班级9151043301任课教师赵琦时间3月
选择题目矩阵转置及乘法运算难易级别A级
实验报告成绩
一、程序功能简介
该程序定义了一个向量类,里面的元素是模板形式,定义了有关向量类的各种属性、方法及运算符重载函数。
二、课程设计要求和目的
1.利用已知的向量类对象定义一个矩阵类,矩阵类的数据是向量子对象,同样定义矩阵类的各种属性、方法及运算符重载函数。
2.完善成员函数,使矩阵可以由文件输入,具体的输入格式自己规定。
3.完善矩阵的赋值、转置、乘法等运算,要求用整形矩阵和浮点型矩阵分别演算。
4.更改main函数结构,可由用户选择输入矩阵数据的方法,程序可以连续运行,知道选择退出为止。
三、课程设计中要解决的问题分析和调试
1.源程序只给出了菜单的样式,及函数类的格式。
2.运算符重载函数要重新熟练。
3.引用的头文件
4.添加人性化界面,初始运行程序时加了一个友好的界面,并附带输出了自己的姓名和学号,选择退出时,亦有特别字样。
5.在主函数中调用read()函数,通过read()中读取外部文件,但会内存错误(已解决,行和列的未定义。
)。
5.在进行四种不同的运算时均会询问输入方式,main函数利用switch函数进行主菜单的编辑。
6.在矩阵输入中增加错误判断的功能,防止输入错误导致程序无法进行。
7.程序中若输入的矩阵无法求逆,或者无法进行乘法,会直接退出程序,亟待解决
四、源程序结构流程框图与说明
6、源程序代码以及草稿原件
#include
#include
#include
#include
#include
usingnamespacestd;
template
classCMatrix
{
introw;
intcol;
T**a;
public:
CMatrix();//构造函数√
CMatrix(intr,intc);
CMatrix(constCMatrix&src);//拷贝构造函数√
~CMatrix();//析构函数√
CMatrix&operator=(constCMatrix&);
CMatrix
CMatrix
CMatrix
CMatrix
CMatrix
voidinput();//从键盘输入√
voidshow();//显示矩阵√
};
template
CMatrix
:
CMatrix()
{
row=0;
col=0;
a=NULL;
}//构造函数
template
CMatrix
:
CMatrix(intr,intc)
{
row=r;
col=c;
inti,j;
a=newT*[r];
for(i=0;i a[i]=newT[c]; for(i=0;i for(j=0;j a[i][j]=0.0; }//将数组归零 template CMatrix : CMatrix(constCMatrix { row=m.row; col=m.col; inti,j; a=newT*[row];//动态建立二维数组 for(i=0;i a[i]=newT[col]; for(i=0;i for(j=0;j a[i][j]=m.a[i][j]; } template CMatrix : ~CMatrix()//析构 { for(inti=0;i delete[]a[i]; delete[]a; } template CMatrix : operator=(constCMatrix { for(inti=0;i delete[]a[i]; delete[]a; row=m.row; col=m.col; a=newC*[row]; for(inti=0;i for(intj=0;j a[i][j]=m.a[i][j]; return*this; } template CMatrix : zhuanzhi()//转置 { CMatrixm(col,row); for(inti=0;i for(intj=0;j m.a[j][i]=a[i][j]; returnm; } template CMatrix : qiuni() { CMatrixs(1,1); s.a[0][0]=0; if(row! =col) { cout<<"输入的矩阵没有逆矩阵。 \n"< returns; } ; CMatrixt(row,col); CMatrixn(row,col); inti,j,k; floatmax,temp; for(i=0;i { for(j=0;j { t.a[i][j]=a[i][j]; } } for(i=0;i { for(j=0;j { n.a[i][j]=(i==j)? 1: 0; } } for(i=0;i { max=t.a[i][i]; k=i; for(j=i+1;j { if(fabs(t.a[j][i])>fabs(max)) { max=t.a[j][i]; k=j; } } if(k! =i) { for(j=0;j { temp=t.a[i][j]; t.a[i][j]=t.a[k][j]; t.a[k][j]=temp; temp=n.a[i][j]; n.a[i][j]=n.a[k][j]; n.a[k][j]=temp; } } if(t.a[i][i]==0) { cout<<"输入的矩阵没有逆矩阵。 \n"; returns; } temp=t.a[i][i]; for(j=0;j { t.a[i][j]=t.a[i][j]/temp; n.a[i][j]=n.a[i][j]/temp; } for(j=0;j { if(j! =i) { temp=t.a[j][i]; for(k=0;k { t.a[j][k]=t.a[j][k]-t.a[i][k]*temp; n.a[j][k]=n.a[j][k]-n.a[i][k]*temp; } } } } returnn; } template CMatrix : operator*(constCMatrix { CMatrixs(1,1); s.a[0][0]=0; CMatrixn(row,m.col); if(col! =m.row) { returns; } for(inti=0;i for(intj=0;j { for(intk=0;k { n.a[i][j]+=a[i][k]*m.a[k][j]; } }//题目所给的矩阵乘法算法 returnn; } template CMatrix : shucheng(doublenum)//数乘 { CMatrixb(row,col); for(inti=0;i for(intj=0;j b.a[i][j]=a[i][j]*num; returnb; } template CMatrix : read(char*fileName)//从文件输入 { ifstreaminfile; infile.open(fileName); Loop: if(! infile) { infile.close(); cout<<"不能打开该文件"< cout<<"再次输入文件名: "; cin>>fileName; infile.clear(); infile.open(fileName);gotoLoop;//防止多次输错 } introw;intcol; infile>>row>>col; CMatrix doublez; inti=0,j=0; while(infile>>z) { m.a[i][j]=z; if((j+1)%col==0) { j=0; i+=1; }//定义何时换行 elsej+=1; } infile.close(); returnm; } template voidCMatrix : input()//键盘输入矩阵 {
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 南京理工大学 C+ 课程设计