数据结构课程设计-特殊矩阵计算器
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
特殊矩阵计算器
1、特殊矩阵计算器
问题描述:创建两个特殊矩阵 A 和 B,计算 A+B、A-B、A*B、B*A、A(或 B)的逆、A(或 B)的转置、A(或 B)的行列式等,具体要求如下:① A、B 均是压缩存储的特殊矩阵,如上/下三角矩阵、对称矩阵、对角矩阵、单位矩阵等。
② A、B 的矩阵类型、行列数、各位置的元素值等信息均在运行时指定(对于不同类型的矩阵,要求输入的数据也不尽相同)。③各运算若可行,则打印结果;若不可行,则给出提示信息。④各运算需自己实现,禁止调用语言内建或第三方类库的矩阵 API。
涉及算法及知识:特殊矩阵的压缩存储、矩阵相关运算。
#include<>
#include<>
#define max 100
typedef struct{
int row,col;//定义矩阵行数、列数
int a[max][max];
}Matrix; //存储结构
typedef struct{
int array[max];
int n; //定义矩阵的阶
}M;
Matrix A,B,C,D;
M p;
//*************矩阵的压缩存储*********************//
int CompressMatrix(int m,int i,int j,int n){
int k;
if(m==1){
if(i<=j)
k=(2*n-i+1)*i/2+(j-i)+1;
else
k=0;
return k;
}
if(m==2){
if(i>=j)
k=i*(i+1)/2+j+1;
else
k=0;
return k;
}
if(m==3){
if(i>=j)
k=i*(i+1)/2+j;
else
k=j*(j+1)/2+i;
return k;
}
if(m==4){
if(i!=j)
k=0;
else
k=i+1;
return k;
}
if(m==5){
if(i==j)
return 1;
else
return 0;
}
return 0;
}
//*************矩阵定义*********************//
//上三角矩阵 //
void CreateMatrixUppertri(M &a,Matrix &A)
{
int i,j,t,n;
printf("请输入上三角矩阵的行数和列数(行数与列数相同):");
scanf("%d%d",&,&;
n=;
=n;
printf("请输入%d个数:",n*(n+1)/2);
[0]=0;
for(i=1;i<=n*(n+1)/2;i++)
scanf("%d",&[i]);
for(i=0;i for(j=0;j t=CompressMatrix(1,i,j,n); [i][j]=[t]; } } //下三角矩阵 void CreateMatrixLowertri(M &a,Matrix &A){ int i,j,t,n; printf("请输入下三角矩阵的行数和列数(行数与列数相同):"); scanf("%d%d",&,&; n=; =n; printf("请输入%d个数:",n*(n+1)/2); [0]=0; for(i=1;i<=n*(n+1)/2;i++) scanf("%d",&[i]); for(i=0;i for(j=0;j t=CompressMatrix(2,i,j,n); [i][j]=[t]; } } //对称矩阵 void CreateMatrixSymmetry(M &a,Matrix &A){ int i,j,t,n; printf("请输入对称矩阵的行数和列数(行数与列数相同):"); scanf("%d%d",&,&; n=; =n; printf("请输入%d个数:",n*(n+1)/2); for(i=0;i scanf("%d",&[i]); for(i=0;i for(j=0;j t=CompressMatrix(3,i,j,n); [i][j]=[t]; } } //对角矩阵 void CreateMatrixDiagonal(M &a,Matrix &A){ int i,j,t,n; printf("请输入对角矩阵的行数和列数(行数与列数相同):"); scanf("%d%d",&,&; n=; =n; printf("请输入%d个数:",n); [0]=0; for(i=1;i<=n;i++) scanf("%d",&[i]); for(i=0;i for(j=0;j t=CompressMatrix(4,i,j,n); [i][j]=[t]; }