這是我在寫矩陣的轉置的時候 ,出現的一種類型的小問題,應該是挺簡單的一個問題 。但是我不知道怎麼改 哪位大神可以幫忙看
一看 謝謝~~~~~#include
#include
#define maxsize 100
typedef int elemtype;
typedef struct
{
int i,j;
elemtype e;
}triple;
typedef struct
{
triple data[maxsize+1];
int mu,nu,tu;
}tsmatrix;
void createsmatrix(tsmatrix *M)//創建稀疏矩陣
{
int i,m,n;
elemtype e;
int k,j;
printf("請輸入矩陣的行數 列數 非零元個數");
scanf("%d %d %d",&M->mu,&M->nu,&M->tu);
M->data[0].i=0;//為以下比較順序做准備
for(i=1;i<=M->tu;i++)
{
j=0;
do{
j++;
if(j>3){
printf("本次輸入失敗!");
exit(-1);
}
printf("按行序輸入第%d個非零元素所在的行(1~%d)列(1~%d)值:",i,M->mu,M->nu);
scanf("%d %d %d",&m,&n,&e);
k=0;
if(m<1||m>M->mu||n<1||n>M->nu) //行和列超過范圍
k=1;
if(m<M->data[i-1].i||m==M->data[i-1].i&&n<=M->data[i-1].j) k=1;//行或列的順序有錯
}while(k);
M->data[i].i=m;
M->data[i].j=n;
M->data[i].e=e;
}
printf("\n");
}
void destorysmatrix(tsmatrix *M)//銷毀稀疏矩陣
{
M->mu=0;
M->nu=0;
M->tu=0;
}
void printsmatrix(tsmatrix M)
{
int i;
printf("稀疏矩陣對應的三元組表為:\n\n");
printf("行 列 元素值\n\n");
for(i=1;i<=M.tu;i++)
printf("%2d%4d%8d\n",M.data[i].i,M.data[i].j,M.data[i].e);
printf("\n\n");
}
void transposematrix(tsmatrix *M,tsmatrix *T)
{
int p,q,col;
T->mu=M->mu;
T->nu=M->nu;
T->tu=M->tu;
if(T->tu)
{
q=1;
for(col=1;col<=M->nu;++col)//按列序求轉置
for(p=1;ptu;++p)
if(M->data[p].j==col)
{
T->data[q].i=M->data[p].j;
T->data[q].j=M->data[p].i;
T->data[q].e=M->data[p].e;
++q;
}
}
}
int main()
{
tsmatrix A,B;
printf("創建矩陣A:\n");
createsmatrix(A);
printsmatrix(A);
printf("求A的轉置矩陣B:\n");
transposesmatrix(A,B);
printsmatrix(B);
destorysmatrix(A);
destorysmatrix(B);
return 0;
}
很明顯的錯誤,你定義的是 struct tsmatrix結構體,而你的creatematrix函數的參數是是tsmatrix.