数据结构课程设计-特殊矩阵计算器

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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];

}

相关文档
最新文档