问题:输出A这个结构体数组的第一行为啥是一串奇怪的数据,还有为啥子少了一个非零的元素?
编译软件是Code::Blocks 20.03的版本,VC++6.0我也试了_(:з」∠)_也不行,所以就是某个地方不对劲,但是我找不出来。
代码如下。
#include<stdio.h>
#define M 4
typedef struct
{
int i;
int j;
int k;
}DataType;
typedef struct
{
int md;
int nd;
int td;
}TriType;
// 压缩矩阵
void Cut_Maxtri(DataType A[], TriType *T , int a[M][M])
{
int i, j , temp=0;
for(i=0 ; i<M ; i++)
for(j=0 ; j<M ; j++)
{
if(a[i][j] == 0) continue;
else
{
temp ++;
A[temp].i = i;
A[temp].j = j;
A[temp].k= a[i][j];
}
}
T->td = temp;
}
//输出矩阵
void Show_Matri(int a[M][M])
{
int i, j;
for(i=0 ; i<M ; i++)
{
for(j=0 ; j<M ; j++)
printf("%4d",a[i][j]);
printf("\n");
}
}
//输出线性表
void Show_List(DataType A[], TriType T)
{
int i;
for(i=0 ; i<T.td ; i++)
{
printf("%d",A[i].i+1);
printf("\t%d",A[i].j+1);
printf("\t%d\n",A[i].k);
}
printf("\n");
}
int main()
{
int a[M][M]={0,1,0,5,4,0,0,0,0,0,7,0,8,0,9,0};
int b[M][M]={2,0,0,7,0,0,6,0,9,0,1,0,0,0,0,0};
DataType A[M*M], B[M*M], C[M*M], D[M*M];
TriType T1, T2 , S;
printf("矩阵a:\n");
Show_Matri(a);
printf("矩阵b:\n");
Show_Matri(b);
//压缩
Cut_Maxtri(A, &T1, a);
Cut_Maxtri(B, &T2, b);
printf("矩阵a压缩后的线性表:\n");
printf("i\tj\tk\n");
Show_List(A, T1);
printf("\n");
printf("矩阵b压缩后的线性表:\n");
printf("i\tj\tk\n");
Show_List(B, T2);
return 0;
}
运行结果如下。