矩阵转置与相加实验报告

上传人:l**** 文档编号:126651407 上传时间:2020-03-26 格式:DOC 页数:12 大小:108KB
返回 下载 相关 举报
矩阵转置与相加实验报告_第1页
第1页 / 共12页
矩阵转置与相加实验报告_第2页
第2页 / 共12页
矩阵转置与相加实验报告_第3页
第3页 / 共12页
矩阵转置与相加实验报告_第4页
第4页 / 共12页
矩阵转置与相加实验报告_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《矩阵转置与相加实验报告》由会员分享,可在线阅读,更多相关《矩阵转置与相加实验报告(12页珍藏版)》请在金锄头文库上搜索。

1、1、 实验内容和要求1、 稀疏矩阵A,B均采用三元组表示,验证实现矩阵A快速转置算法,设计并验证A,B相加得到矩阵C的算法。(1) 从键盘输入矩阵的行数和列数,随机生成稀疏矩阵。(2) 设计算法将随机生成的稀疏矩阵转换成三元组顺序表示形式存储。(3) 设计算法将快速转置得到的与相加得到的三元组顺序表分别转换成矩阵形式。(4) 输出随机生成的稀疏矩阵A,B及其三元组顺序表、快速转置得到的与相加得到的三元组顺序表及其矩阵形式。2、 实验过程及结果1、 需求分析1、将随机生成的数定义为int型(为方便起见设定范围为-20至20(不含0),可修改),三元组存储的元素分别为非零元的行下标、列下标及该位置

2、的元素值,零元不进行存储。实际上在生成稀疏矩阵时是随机选取一些位置生成非零元然后存入三元组中。2、从键盘输入矩阵的行数和列数后应能输出三元组顺序表及相应矩阵(按行和列排列形式输出)。3、 程序能实现的功能包括:随机产生稀疏矩阵;输出阵列形式的矩阵;输出三元组顺序表;将矩阵快速转置;将两个稀疏矩阵相加生成新的矩阵。 2、 概要设计1、稀疏矩阵的抽象数据类型定义:ADT TSMatrix数据对象:D= aij|i=1,2,m,j=1,2,n;Ai,jElemSet,m和n分别称为矩阵的行数和列数数据关系:R=Row,ColRow=|1im, 1jn-1Col =|1im-1, 1jn基本操作:Cr

3、eateTSMatrix(&M)操作结果:创建矩阵MPrintTSMatrix(M)初始条件:矩阵M已存在操作结果:输出矩阵M中三元组形式的非零元素PrintTSMatrix1(M)初始条件:矩阵M已存在操作结果:以阵列形式输出矩阵UnZore(M, row, col)初始条件:矩阵M已存在操作结果:若位置(row,col)处存在非零元素,则返回该元素存储在矩阵中的序号TSMatrix_Add(M, N,&Q)初始条件:矩阵M,N已存在操作结果:将矩阵M,N相加得到Q并返回矩阵QFastTransposeSMatrix(M,&N)初始条件:矩阵M已存在操作结果:将矩阵M快速转置得到转置矩阵N并

4、返回ADT TSMatrix; 本程序模块结构 主函数模块void main()初始化迷矩阵;创建矩阵并输出;将矩阵转置并输出;将矩阵相加并输出结果;三、详细设计1、基本数据类型操作typedef int ElemType; typedef struct int i,j; ElemType e; Triple;/数据类型 三元组 typedef struct Triple datamaxsize+1;/矩阵大小 int mu,nu,tu;/ TSMatrix;/矩阵抽象数据类型2、参数设置:#define maxsize 10000/-基本操作的算法描述-Status CreateTSMatr

5、ix(TSMatrix *M)/创建一个随机矩阵(data0未用)srand(int)time(NULL);printf(Please Input The Lines And Columns Of The Matrix:n);printf(.(矩阵的期望规格大于4*5(或5*4).n); scanf(M-mu,M-nu); for(m=0;mmu;m+) for(n=0;nnu;n+)kmn=rand()%20;if(kmn=0)if(rand()%2)M-datap.e=rand()%20+1;elseM-datap.e=rand()%20-20;M-datap.i=m+1;M-datap.

6、j=n+1;p+; M-tu=p-1;/p从1开始,非零元个数刚好等于p-1 return OK;void PrintTSMatrix(TSMatrix M)/输出矩阵的三元组顺序表if(M.tu=0)printf(无非零元!n);elseprintf(该矩阵的行数为%d、列数为%d、非零元素个数为%d.n非零元的坐标及值:nn,M.mu,M.nu,M.tu);printf( 行 列 元素值n);for(i=1;i=M.tu;i+)printf(%4d%4d%6dn,M.datai.i,M.datai.j,M.datai.e);printf(n);void PrintTSMatrix1(TSM

7、atrix M)/输出矩阵的阵列形式printf(阵列形式为:n); for(i=1;i=M.mu;i+) for(j=1;j=M.nu;j+) if (ki=i&p-j=j) printf(%4d,p-e); /data0未用,p从data1开始 p+; k+; else printf(%4d,0); printf(n); printf(n);int UnZore(TSMatrix M,int row,int col)while(order=M.tu)if(M.dataorder.i=row&M.dataorder.j=col)/order从1开始return order;order+;re

8、turn 0;Status TSMatrix_Add(TSMatrix M,TSMatrix N,TSMatrix *Q)/矩阵相加得到新的矩阵,order从1开始if(M.mu=N.mu&M.nu=N.nu)for(row=1;row=M.mu;row+)for(col=1;coldataorder.i=row;Q-dataorder.j=col;Q-dataorder.e=M.dataorder1.e+N.dataorder2.e;order+;else if(order1&(!order2)Q-dataorder.e=M.dataorder1.e;Q-dataorder.i=M.data

9、order1.i;Q-dataorder.j=M.dataorder1.j;order+;else if(!order1)&order2)Q-dataorder.e=N.dataorder2.e;Q-dataorder.i=N.dataorder2.i;Q-dataorder.j=N.dataorder2.j;order+;Q-mu=M.mu;Q-nu=M.nu;Q-tu=order-1;return OK;elseprintf(n不是同型矩阵不能进行相加!n);return ERROR;Status FastTransposeSMatrix(TSMatrix M,TSMatrix *N)/采

10、用三元组顺序表存储表示,求稀疏矩阵M的转置矩阵N N-mu=M.nu; N-nu=M.mu; N-tu=M.tu; if(N-tu) for(i=1;i=M.nu;+i) numi=0; for(t=1;t=M.tu;+t) +numM.datat.j;/求M中每一列非零元个数 cpot1=1;/求第col列中第一个元素在b.data中的序号 for(i=2;i=M.nu;+i) cpoti=cpoti-1+numi-1; for(p=1;pdataq.i=M.datap.j; N-dataq.j=M.datap.i; N-dataq.e=M.datap.e; +cpoti; return O

11、K; 主函数算法:void main()TSMatrix A,A1,B,C; printf(矩阵A:n); CreateTSMatrix(&A); PrintTSMatrix(A); PrintTSMatrix1(A); printf(由矩阵A转置得矩阵A1.n); FastTransposeSMatrix(A,&A1); PrintTSMatrix(A1); PrintTSMatrix1(A1); printf(矩阵B:n); CreateTSMatrix(&B); PrintTSMatrix(B); PrintTSMatrix1(B); printf(矩阵A加矩阵B得到矩阵C.n); if(TSMatrix_Add(A,B,&C)PrintTSMatrix(C);PrintTSMatrix1(C); 四、调试分析1、三元组顺序表的输出顺序应该是先按行排序再按列排序,即行主序,依次输出。2、生成的非零元应该有正数和负数,选取在-20到20之间的数(不包括0),生成随机数时同时随机生成其正负号,为正数时将rand()%20再加1,避免再产生0

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作范文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号