#include<stdio.h>
struct tuple3tp /*稀疏矩阵的建立和转置*/
{
int i,j;
int v;
};
struct sparmattp
{
int mu,nu,tu;
struct tuple3tp data[31];
};
struct sparmattp a,b;
void creat_sparmat()//稀疏矩阵的建立
{
int i;
printf("输入稀疏矩阵行值,列值,非零元个数(以空格分开):\n");
scanf("%d%d%d",&a.mu,&a.nu,&a.tu);
for(i=1;i<=a.tu;i++)
{
printf("输入行坐标,列坐标,非零元素(以空格分开)\n");
scanf("%d%d%d",&a.data[i].i,&a.data[i].j,&a.data[i].v);
}
}
void trans_sparmat()
{
int col,p,q;
b.mu=a.nu;
b.nu=a.mu;
b.tu=a.tu;
if(b.tu!=0)
{
q=1;
for(col=1;col<=a.nu;col++)
for(p=1;p<=a.tu;p++)
if (a.data[p].j==col)
{
b.data[q].i=a.data[p].j;
b.data[q].j=a.data[p].i;
b.data[q].v=a.data[p].v;
q++;
}
}
}
void print(struct sparmattp x)//矩阵的输出
{
int i,j,k,flag;
for(i=1;i<=x.mu;i++)
{
for(j=1;j<=x.nu;j++)
{
flag=0;
for(k=1;k<=x.tu;k++)
{
if(((x.data[k].i)==i)&&((x.data[k].j)==j))
{
flag=1;
printf("%5d",x.data[k].v);
}
}
if(flag==0)printf(" 0");
}
printf("\n");
}
}
void main()
{int f=1;
while(f)
{
printf("稀疏矩阵的建立与转置\n");
creat_sparmat();
trans_sparmat();
printf("原矩阵为:\n");
print(a);
printf("转置矩阵为:\n");
print(b);
printf("是否继续:任意键数字键1-9继续/数字0结束\n");
scanf("%d",&f);
}
}
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。