当前位置:文档之家› 矩阵转置及相加实验报告

矩阵转置及相加实验报告

order++;
}
return 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++){
Q->data[order].e=N.data[order2].e;
Q->data[order].i=N.data[order2].i;
Q->data[order].j=N.data[order2].j;
order++;
}
}
}
Q->mu=M.mu;
Q->nu=M.nu;
Q->tu=order-1;
return OK;
PrintTSMatrix(C);
PrintTSMatrix1(C);
}
}
四、调试分析
1、三元组顺序表的输出顺序应该是先按行排序再按列排序,即行主序,依次输出。
2、生成的非零元应该有正数和负数,选取在-20到20之间的数(不包括0),生成随机数时同时随机生成其正负号,为正数时将rand()%20再加1,避免再产生0,为负数时将rand()%20-20。
typedef int Status;
typedef struct{
int i,j;
ElemType e;
}Triple;//数据类型三元组
typedef struct{
Triple data[maxsize+1];//矩阵大小
int mu,nu,tu;//
}TSMatrix;//矩阵抽象数据类型
Status CreateTSMatrix(TSMatrix *M);//创建矩阵
order++;
}
else if(order1&&(!order2)){
Q->data[order].e=M.data[order1].e;
Q->data[order].i=M.data[order1].i;
Q->data[order].j=M.data[order1].j;
order++;
}
else if((!order1)&&order2){
(2)按enter键输出随机生成的矩阵三元组顺序表和整个矩阵
如图所示:
(3)程序自动完成第一个矩阵的转置并输出;
(4)提示输入矩阵B后,用户输入所需矩阵的行数和列数,然后程序将自动完成两个原始矩阵的相加,若不是同型矩阵则提示无法相加。
如图所示:
五、附录(源代码及注释)
#include <stdio.h>
cpot[i]=cpot[i-1]+num[i-1];
for(p=1;p<=M.tu;++p){
i=M.data[p].j;
q=cpot[i];
N->data[q].i=M.data[p].j;
N->data[q].j=M.data[p].i;
N->data[q].e=M.data[p].e;
++cpot[i];
#include <stdlib.h>
#include "time.h"
#define maxsize 10000
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define OVERFLOW -1
typedef int ElemType;
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;m<M->mu;m++){
N->tu=M.tu;
if(N->tu){
for(i=1;i<=M.nu;++i)
num[i]=0;
for(t=1;t<=M.tu;++t)
++num[M.data[t].j];//求M中每一列非零元个数
cpot[1]=1;
//求第col列中第一个元素在b.data中的序号
for(i=2;i<=M.nu;++i)
}
}
return OK;
}
⑶ 主函数算法:
void main(){
TSMatrix A,A1,B,C;
printf("矩阵A:\n");
CreateTSMatrix(&A);
PrintTSMatrix(A);
PrintTSMatrix1(A);
printf("由矩阵A转置得矩阵A1...\n");
FastTransposeSMatrix(A,&A1);
初始条件:矩阵M,N已存在
操作结果:将矩阵M,N相加得到Q并返回矩阵Q
FastTransposeSMatrix(M,&N)
初始条件:矩阵M已存在
操作结果:将矩阵M快速转置得到转置矩阵N并返回
}ADT TSMatrix;
⒊ 本程序模块结构
⑴ 主函数模块
void main(){
初始化迷矩阵;
创建矩阵并输出;
for(col=1;col<=M.nu;col++){
order1=UnZore(M,row,col);
order2=UnZore(N,row,col);
if(order1&&order2){
Q->data[order].i=row;
Q->data[order].j=col;
Q->data[order].e=M.data[order1].e+N.data[order2].e;
for(n=0;n<M->nu;n++){
k[m][n]=rand()%20;
if(k[m][n]==0){
if(rand()%2)
M->data[p].e=rand()%20+1;
else
M->data[p].e=rand()%20-20;
M->data[p].i=m+1;
M->data[p].j=n+1;
void PrintTSMatrix(TSMatrix M);//输出矩阵非零元素
void PrintTSMatrix1(TSMatrix M);//以阵列形式输出矩阵
int UnZore(TSMatrix M,int row,int col);//判断位置(row,col)是否存在非零元素
Status TSMatrix_Add(TSMatrix M,TSMatrix N,TSMatrix *Q);//将矩阵M,N相加得到Q
PrintTSMatrix(A1);
PrintTSMatrix1(A1);
printf("矩阵B:\n");
CreateTSMatrix(&B);
PrintTSMatrix(B);
PrintTSMatrix1(B);
printf("矩阵A加矩阵B得到矩阵C...\n");
if(TSMatrix_Add(A,B,&C)){
}
else{
printf("\n不是同型矩阵不能进行相加!\n");
return ERROR;
}
}
Status FastTransposeSMatrix(TSMatrix M,TSMatrix *N){
//采用三元组顺序表存储表示,求稀疏矩阵M的转置矩阵N
N->mu=M.nu;
N->nu=M.mu;
1、实验内容和要求
1、稀疏矩阵A,B均采用三元组表示,验证实现矩阵A快速转置算法,设计并验证A,B相加得到矩阵C的算法。
(1)从键盘输入矩阵的行数和列数,随机生成稀疏矩阵。
(2)设计算法将随机生成的稀疏矩阵转换成三元组顺序表示形式存储。
(3)设计算法将快速转置得到的与相加得到的三元组顺序表分别转换成矩阵形式。
int mu,nu,tu;//
}TSMatrix;//矩阵抽象数据类型
2、参数设置:
#define maxsize 10000
//----------基本操作的算法描述--------------------
Status CreateTSMatrix(TSMatrix *M){
//创建一个随机矩阵(data[0]未用)
(4)输出随机生成的稀疏矩阵A,B及其三元组顺序表、快速转置得到的与相加得到的三元组顺序表及其矩阵形式。
2、实验过程及结果
1、需求分析
1、将随机生成的数定义为int型(为方便起见设定范围为-20至20(不含0),可修改),三元组存储的元素分别为非零元的行下标、列下标及该位置的元素值,零元不进行存储。实际上在生成稀疏矩阵时是随机选取一些位置生成非零元然后存入三元组中。
初始条件:矩阵M已存在
操作结果:输出矩阵M中三元组形式的非零元素
相关主题