资源描述:
《矩阵转置及相加实验报告》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、一、实验内容和要求1、稀疏矩阵A,B均采用三元组表示,验证实现矩阵A快速转置算法,设计并验证A,B相加得到矩阵C的算法。(1)从键盘输入矩阵的行数和列数,随机生成稀疏矩阵。(2)设计算法将随机生成的稀疏矩阵转换成三元组顺序表示形式存储。(3)设计算法将快速转置得到的与相加得到的三元组顺序表分别转换成矩阵形式。(4)输出随机生成的稀疏矩阵A,B及其三元组顺序表、快速转置得到的与相加得到的三元组顺序表及其矩阵形式。二、实验过程及结果一、需求分析1、将随机生成的数定义为int型(为方便起见设定范围为-20至20(不含0),可修改)
2、,三元组存储的元素分别为非零元的行下标、列下标及该位置的元素值,零元不进行存储。实际上在生成稀疏矩阵时是随机选取一些位置生成非零元然后存入三元组中。2、从键盘输入矩阵的行数和列数后应能输出三元组顺序表及相应矩阵(按行和列排列形式输出)。3、程序能实现的功能包括:①随机产生稀疏矩阵;②输出阵列形式的矩阵;③输出三元组顺序表;④将矩阵快速转置;⑤将两个稀疏矩阵相加生成新的矩阵。二、概要设计1、稀疏矩阵的抽象数据类型定义:ADTTSMatrix{数据对象:D={aij
3、i=1,2,…,m,j=1,2,…,n;Ai,j∈ElemSe
4、t,m和n分别称为矩阵的行数和列数}数据关系:R={Row,Col}Row={
5、1≤i≤m,1≤j≤n-1}Col={
6、1≤i≤m-1,1≤j≤n}基本操作:CreateTSMatrix(&M)操作结果:创建矩阵MPrintTSMatrix(M)初始条件:矩阵M已存在操作结果:输出矩阵M中三元组形式的非零元素PrintTSMatrix1(M)初始条件:矩阵M已存在操作结果:以阵列形式输出矩阵UnZore(M,row,col)初始条件:矩阵M已存在操作结果:若位置(row,c
7、ol)处存在非零元素,则返回该元素存储在矩阵中的序号TSMatrix_Add(M,N,&Q)初始条件:矩阵M,N已存在操作结果:将矩阵M,N相加得到Q并返回矩阵QFastTransposeSMatrix(M,&N)初始条件:矩阵M已存在操作结果:将矩阵M快速转置得到转置矩阵N并返回}ADTTSMatrix;⒊本程序模块结构⑴主函数模块voidmain(){初始化迷矩阵;创建矩阵并输出;将矩阵转置并输出;将矩阵相加并输出结果;}三、详细设计1、基本数据类型操作⑴typedefintElemType;typedefstruct{
8、inti,j;ElemTypee;}Triple;//数据类型三元组typedefstruct{Tripledata[maxsize+1];//矩阵大小intmu,nu,tu;//}TSMatrix;//矩阵抽象数据类型2、参数设置:#definemaxsize10000//----------基本操作的算法描述--------------------StatusCreateTSMatrix(TSMatrix*M){//创建一个随机矩阵(data[0]未用)srand((int)time(NULL));printf("Ple
9、aseInputTheLinesAndColumnsOfTheMatrix:");printf("...(矩阵的期望规格大于4*5(或5*4))...");scanf(M->mu,M->nu);for(m=0;mmu;m++){for(n=0;nnu;n++){k[m][n]=rand()%20;if(k[m][n]==0){if(rand()%2)M->data[p].e=rand()%20+1;elseM->data[p].e=rand()%20-20;M->data[p].i=m+1;M->da
10、ta[p].j=n+1;p++;}}}M->tu=p-1;//p从1开始,非零元个数刚好等于p-1returnOK;}voidPrintTSMatrix(TSMatrixM){//输出矩阵的三元组顺序表if(M.tu==0)printf("无非零元!");else{printf("该矩阵的行数为%d、列数为%d、非零元素个数为%d.非零元的坐标及值:",M.mu,M.nu,M.tu);printf("行列元素值");for(i=1;i<=M.tu;i++){printf("%4d%4d%6d",M.d
11、ata[i].i,M.data[i].j,M.data[i].e);}printf("");}}voidPrintTSMatrix1(TSMatrixM){//输出矩阵的阵列形式printf("阵列形式为:");for(i=1;i<=M.mu;i++){for(j=1;j<=M.n