📄 jz.c
字号:
#include<stdio.h>
#define MAXN 100
#define MAXM 100
int a[MAXN][MAXM],b[][3];
int row,colu,k;
void mat_transpose(a,b) //转置矩阵的函数
int a[][3],b[][3];
{
int m,n,t,p,q,col;
m=a[0][0];
n=a[0][1];
t=a[0][2];
b[0][0]=n;
b[0][1]=m;
b[0][2]=t;
if(t>0)
{
q=1;
for(col=0;col<n;col++)
for(p=1;p<=t;p++)
if(a[p][1]==col)
{
b[q][0]=a[p][1];
b[q][1]=a[p][0];
b[q][2]=a[p][2];
q++;
}
}
}
int change(a,b) //将一个稀疏矩阵压缩存贮到一个三元组数组中
int a[][MAXM],b[][3];
{
int i,j;
int k=1;
for(i=0;i<row;i++)
for(j=0;j<colu;j++)
if(a[i][j]!=0)
{
b[k][0]=i;
b[k][1]=j;
b[k][2]=a[i][j];
k++;
}
b[0][0]=row;
b[0][1]=colu;
b[0][2]=k-1;
return(k-1);
}
void nchange(b,a) //将一个三元组数组还原为稀疏矩阵
int b[][3],a[][MAXM];
{
int i;
for(i=1;i<=k;i++)
a[b[i][0]][b[i][1]]=b[i][2];
}
void main()
{
int n,m;
int i,j;
int o,d;
int a[MAXN][MAXM]={{0}}; //用来存放原稀疏矩阵
int c[MAXN][MAXM]={{0}}; //用来存放转置后的矩阵
int e[100][3]={{0}}; //用来存贮原稀疏矩阵的三元组数组
int f[100][3]={{0}}; //用来存贮转置后矩阵的三元组数组
printf("please input n and m:"); //n,m分别表示原稀疏矩阵的行数和烈数
scanf("%d,%d",&n,&m);
row=n;
colu=m;
printf("Please input the member of the array:\n"); //输入非零元素
while(1)
{
printf("o=(1,-1)"); //o标志输入的结束与否
scanf("%d",&o);
if(o==1)
{
printf("行号:i=");
scanf("%d",&i);
printf("列号:j=");
scanf("%d",&j);
printf("Please input the number:");
scanf("%d",&d);
a[i][j]=d;
}
if(o==-1)
{
printf("\n");
break;
}
}
printf("原矩阵为:\n");
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
printf("%-4d",a[i][j]);
printf("\n");
}
printf("压缩存贮后的数组为:\n");
k=change(a,e);
for(i=0;i<=k;i++)
{
for(j=0;j<3;j++)
printf("%-4d",e[i][j]);
printf("\n");
}
mat_transpose(e,f);
nchange(f,c);
printf("转置后的矩阵为:\n");
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
printf("%-4d",c[i][j]);
printf("\n");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -