Lab1-Matrix操作.doc_第1页
Lab1-Matrix操作.doc_第2页
Lab1-Matrix操作.doc_第3页
Lab1-Matrix操作.doc_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验一 矩阵操作要求实现:矩阵的创建,输出,复制,转置,加法,减法,乘以一个数,通过行列坐标设置和获取矩阵该位置元素的值。 通过该题目,掌握(1)动态数组和指针的使用,(2)二维数组和一维数组的关系,(3)传引用调用参数,(4)函数重载1. 首先建立矩阵结构体struct Matrixint rows, cols; /矩阵的行数和列数int* data; /指向一个容纳矩阵的动态数组的指针变量,使用上等同于数组名。;2. 要求实现以下函数:1. 矩阵的创建,写3个重载的函数CreateMat(1) 第1个函数,有2个参数,分别是矩阵的行数和列数,初始化矩阵,分配内存空间,不赋初值。Matrix CreateMat (int rows, int cols);(2) 第2个函数,有3个参数,分别是矩阵的行数,列数,和矩阵各元素的值(是一个定值,也就是用一个值对矩阵初始化)Matrix CreateMat (int rows, int cols, const int scalar); (3) 第3个函数,有3个参数,分别是矩阵的行数,列数,和矩阵各元素的值(用数组对矩阵初始化,采用数组参数)Matrix CreateMat (int rows, int cols, const int data); 2. 矩阵的输出,OutputMat函数,矩阵的引用作为参数。void OutputMat(const Matrix & mat);注意:要求输出为矩阵的形式,例如一个3*3矩阵的输出格式为(前后有中括号,数字对齐):3. 矩阵的复制,CopyMat函数。void CopyMat(const Matrix & source, Matrix & target);/把矩阵source复制到矩阵target4. 矩阵的转置,TransMat函数。Matrix TransMat (const Matrix & mat); 5. 矩阵的加法,AddMat函数。 Matrix AddMat (const Matrix & mat1, const Matrix & mat2); 注意,应该/首先判断mat1和mat2的大小是否一致,如果不一致,报错,终止。报错采用函数exit(1),需要#include 。6. 矩阵的减法,SubMat函数. Matrix SubMat (const Matrix & mat1, const Matrix & mat2); 7. 矩阵的数乘,MulMat函数,矩阵mat乘以一个数scalarMatrix MulMat (const Matrix & mat, int scalar);8. 获取一个位置的矩阵元素的值,GetMatValue函数int GetMatValue (const Matrix & mat, int row, int col); /获取行列坐标为row和col位置的矩阵元素的值。9. 设置一个位置的矩阵元素的值,SetMatValue函数int SetMatValue (const Matrix & mat, int row, int col, int scalar); /将行列坐标为row和col位置的矩阵元素的值设置为scalar。10. 释放矩阵元素做占的freestore的空间。void ReleaseMat(Matrix & m);3. main函数中,对以上函数进行使用。int main()/第一种创建方式coutCreate a 5*5 matrix mat1 without initialization:n; Matrix mat1 = CreateMat(5, 5); /创建5*5的矩阵mat1,不设初值。 OutputMat(mat1); /输出该矩阵 ReleaseMat(mat1);/释放mat1所占的freestore空间 /第二种创建方式 coutendl; coutCreate a 4*4 matrix mat2 with value being 7:n; Matrix mat2 = CreateMat(4, 4, 7); /创建4*4的矩阵mat2,各元素初值为7。 OutputMat (mat2); /输出该矩阵 ReleaseMat(mat2);/释放mat2所占的freestore空间 /第三种创建方式 coutendlCreate a 3*3 matrix mat3 being equal to data:n; int data = 1, 2, 3, 4, 5, 6, 7, 8, 9; Matrix mat3 = CreateMat (3, 3, data); /创建3*3的矩阵mat3,用data赋初值。 OutputMat (mat3);/将矩阵mat3的值复制给mat1,注意不能使用默认的等号运算符mat3=mat1,思考原因?/注意在copy之前,需要release矩阵mat1所占有的freestore空间(前面程序已经释放),否则mat3拷贝到mat1后,mat1原来所占有的freestore空间就一直无法释放了。【最好的方式是在CopyMat函数中单独考虑这个问题,判断一下mat1所占freestore空间是否释放了,如果没有释放,就要给出delete语句。】CopyMat(mat3, mat1);OutputMat (mat1); /输出该矩阵mat1,和mat3相同,3*3矩阵。/实现矩阵转置coutendlTranspose mat1: n;mat2=TransMat(mat1);OutputMat (mat2); /使用加法,减法,数乘Matrix mat4; coutendlAdd mat1 and mat3: n;mat4= AddMat(mat1, mat3);OutputMat (mat4);coutendlSubstract mat1 and mat3: n;mat4=SubMat(mat1, mat3);OutputMat (mat4);coutendlmat1 * 2 equals to: n;mat4=MulMat(mat1, 2);OutputMat (mat4);/设置和获取1个位置的矩阵元素值int value= GetMatValue(mat1,1,2);/得到mat1第2行第3列的元素值。cout nthe value of coordinates (2,3) is: valueendl;SetMatValue(mat1,1,2,100);value= GetMatValue(mat1,1,2);/得到mat1第2行第3列的新的元素值。cout n the value of coordinates (2,3) becomes: valueendl; ReleaseMat(mat1);/释放mat1所占的freestore空间 ReleaseMat(mat2);/释放mat2所占的freestore空间 ReleaseMat(mat3);/释放mat3所占的freestore空间 ReleaseMat(mat4);/释放mat4所占的freestore空间cout endl Hello world! endl;return 0;提示:给出1个函数的实现:Matrix CreateMat (int rows, int cols, const float data)Matrix m;m.rows = rows;m.cols = cols;m.data = new int rows * cols; for(int i = 0; i rows * cols; i+)m.datai = datai; return m; 4. 将上述内容写在三个函数中(1)结构体定义,预编译指令,以及函

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论