#include<stdio.h> #define MAXSIZE 100 typedef struct { int hang,lie; int zhi; }SAN; typedef struct { SAN data[MAXSIZE]; int mu,nu,tu; }SANYUAN; void zhuanzhi(SANYUAN M,SANYUAN *T) { int col,p,q,t; int num[MAXSIZE],cpot[MAXSIZE]; T->mu=M.nu; T->nu=M.mu; T->tu=M.tu; if(T->tu) { for(col=1;col<=M.nu;++col) num[col]=0; for(t=1;t<=M.tu;++t) ++num[M.data[t].lie]; cpot[1]=1; for(col=2;col<=M.nu;++col) cpot[col]=cpot[col-1]+num[col-1]; for(p=1;p<=M.tu;++p) { col=M.data[p].lie; q=cpot[col]; T->data[q].hang=M.data[p].lie; T->data[q].lie=M.data[q].hang; T->data[q].zhi=M.data[p].zhi; ++cpot[col]; } } } void output(SANYUAN *M) { int i,j; int t=1; for(i=1;i<=M->mu;i++) { for(j=1;j<=M->nu;j++) { if(M->data[t].hang==i&&M->data[t].lie==j) { printf("%d ",M->data[t].zhi); t++; } else printf("0 "); } printf("\n"); } } int main() { SANYUAN A,T;int k; printf("输入矩阵大小\n"); printf("行:");scanf("%d",&A.mu); printf("列:");scanf("%d",&A.nu); printf("非零元素个数:");scanf("%d",&A.tu); printf("输入三元组表:\n"); for(k=1;k<=A.tu;k++) { scanf("%d %d %d",&A.data[k].hang,&A.data[k].lie,&A.data[k].zhi); } printf("原矩阵\n"); output(&A); zhuanzhi(A,&T); printf("转置后的矩阵:\n"); output(&T); return 0; }帮我看看哪里有问题
时间: 2024-03-03 18:53:51 浏览: 22
您在转置函数中的第16行出现了错误,应该是 `T->data[q].lie=M.data[p].hang;`,而不是 `T->data[q].lie=M.data[q].hang;`,因为转置后的矩阵中每个元素的行号等于它在原矩阵中的列号,列号等于它在原矩阵中的行号。
下面是修改后的代码:
```
void zhuanzhi(SANYUAN M,SANYUAN *T) {
int col,p,q,t;
int num[MAXSIZE],cpot[MAXSIZE];
T->mu=M.nu;
T->nu=M.mu;
T->tu=M.tu;
if(T->tu)
{
for(col=1;col<=M.nu;++col)
num[col]=0;
for(t=1;t<=M.tu;++t)
++num[M.data[t].lie];
cpot[1]=1;
for(col=2;col<=M.nu;++col)
cpot[col]=cpot[col-1]+num[col-1];
for(p=1;p<=M.tu;++p)
{
col=M.data[p].lie;
q=cpot[col];
T->data[q].hang=M.data[p].lie;
T->data[q].lie=M.data[p].hang;
T->data[q].zhi=M.data[p].zhi;
++cpot[col];
}
}
}
```
请您尝试修改后再运行程序。