您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 综合/其它 > 中国地质大学C++上机实习报告
PracticeReportforTheC++ProgramminglanguageC++CourseReportCandidate:StudentNumber:Major:C++Supervisor:WurangzhongChinaUniversityofGeosciences(Wuhan)Wuhan,Hubei430074,P.R.ChinaApril13,2015ChinaUniversityofGeosciences,FacultyofMechanicsandElectronicInformation矩阵的操作一、设计要求(实现以下功能)要求用c++实现:矩阵的创建,输出,复制,转置,加法,减法,乘以一个数,通过行列坐标设置和获取矩阵该位置元素的值。//三个重载函数MatrixCreateMat(introws,intcols);MatrixCreateMat(introws,intcols,constintscalar);MatrixCreateMat(introws,intcols,constintdata[]);voidOutputMat(constMatrix&mat);//矩阵的输出voidCopyMat(constMatrix&source,Matrix&target);//把矩阵source复制到矩阵targetMatrixTransMat(constMatrix&mat);//矩阵的转置MatrixAddMat(constMatrix&mat1,constMatrix&mat2);//矩阵的加法MatrixSubMat(constMatrix&mat1,constMatrix&mat2);//矩阵的减法MatrixMulMat(constMatrix&mat,intscalar);//矩阵的数乘intGetMatValue(constMatrix&mat,introw,intcol);//获取行列坐标为row和col位置的矩阵元素的值intSetMatValue(constMatrix&mat,introw,intcol,intscalar);//将行列坐标为row和col位置的矩阵元素的值设置为scalarvoidReleaseMat(Matrix&m);//释放矩阵元素的空间二、算法分析1.建立结构体structMatrix{introws,cols;//矩阵的行数和列数int*data;//指向一个容纳矩阵的动态数组的指针变量,使用上等同于数组名。};二维数组的实质为一维数组,因此可以当做一维数组处理更简便。2.函数的实现⑴矩阵的创建(三个重载函数)MatrixCreateMat(introws,intcols){//分配内存空间Matrixm;m.rows=rows;m.cols=cols;m.data=newint[rows*cols];returnm;}MatrixCreateMat(introws,intcols,constintscalar){Matrixm;m.rows=rows;m.cols=cols;m.data=newint[rows*cols];for(inti=0;irows*cols;i++)m.data[i]=scalar;returnm;}MatrixCreateMat(introws,intcols,constintdata[]){Matrixm;m.rows=rows;m.cols=cols;m.data=newint[rows*cols];for(inti=0;irows*cols;i++)m.data[i]=data[i];returnm;}⑵矩阵的输出voidOutputMat(constMatrix&mat)//矩阵的输出{for(inti=0;imat.rows;i++){for(intj=0;jmat.cols;j++)coutmat.data[i*mat.cols+j];coutendl;}}⑶矩阵的复制voidCopyMat(constMatrix&source,Matrix&target)//把矩阵source复制到矩阵target{if(target.data==NULL){target.rows=source.rows;target.cols=source.cols;target.data=newint[source.rows*source.cols];for(inti=0;isource.rows*source.cols;i++){target.data[i]=source.data[i];}}else{delete[]target.data;target.data=NULL;target.rows=source.rows;target.cols=source.cols;target.data=newint[source.rows*source.cols];for(inti=0;isource.rows*source.cols;i++){target.data[i]=source.data[i];}}}⑷矩阵的转置MatrixTransMat(constMatrix&mat)//矩阵的转置{Matrixm;m.rows=mat.cols;m.cols=mat.rows;m.data=newint[mat.rows*mat.cols];inti,j;for(i=0;imat.rows;i++){for(j=0;jmat.cols;j++)m.data[i*mat.rows+j]=mat.data[j*mat.cols+i];}returnm;}⑸矩阵的加法MatrixAddMat(constMatrix&mat1,constMatrix&mat2)//矩阵的加法{Matrixm;m.rows=mat1.cols;m.cols=mat1.rows;m.data=newint[mat1.rows*mat1.cols];for(inti=0;imat1.rows*mat1.cols;i++)m.data[i]=mat1.data[i]+mat2.data[i];returnm;}⑹矩阵的减法MatrixSubMat(constMatrix&mat1,constMatrix&mat2)//矩阵的减法{Matrixm;m.rows=mat1.cols;m.cols=mat1.rows;m.data=newint[mat1.rows*mat1.cols];if((mat1.rows!=mat2.rows)||(mat1.cols!=mat2.cols))exit(1);else{for(inti=0;imat1.rows*mat1.cols;i++)m.data[i]=mat1.data[i]-mat2.data[i];}returnm;}⑺矩阵的数乘MatrixMulMat(constMatrix&mat,intscalar)//矩阵的数乘{Matrixm;m.rows=mat.cols;m.cols=mat.rows;m.data=newint[mat.rows*mat.cols];for(inti=0;imat.rows*mat.cols;i++)m.data[i]=mat.data[i]*scalar;returnm;}⑻获取指定行列的元素值intGetMatValue(constMatrix&mat,introw,intcol)//获取行列坐标为row和col位置的矩阵元素的值{returnmat.data[row*mat.cols+col];}⑼将指定行列的元素赋值intSetMatValue(Matrix&mat,introw,intcol,intscalar)//将行列坐标为row和col位置的矩阵元素的值设置为scalar{mat.data[row*mat.cols+col]=scalar;returnmat.data[row*mat.cols+col];}⑽释放元素空间voidReleaseMat(Matrix&m)//释放矩阵元素的空间{delete[]m.data;m.data=NULL;}三、程序运行图1.矩阵的创建(三种形式2.矩阵的转置3.矩阵的复制4.矩阵的加法5.矩阵的减法6.矩阵的乘数7.获取特定行列的值给特定行列赋值
本文标题:中国地质大学C++上机实习报告
链接地址:https://www.777doc.com/doc-2766023 .html