#include"stdio.h"
#define MAXSIZE 100
typedef struct
{
int i, j;
int e;
} Triple;
typedef struct
{
Triple data[MAXSIZE + 1];
int m, n, t;
} TSMatrix;
void CreateMatrix(TSMatrix *M)
{
printf("请输入矩阵的行数、列数、非零元素个数:");
scanf("%d %d %d", &M->m, &M->n, &M->t);
while (M->t>M->m*M->n)
{
printf("非零元素个数过多,请重新输入:");
scanf("%d", &M->t);
}
printf("请按行优先顺序输入每个非零元素的行列下标及值:\n");
int k;
for (k =0; k<M->t; ++k)
{
scanf("%d %d %d", &M->data[k].i,&M->data[k].j,&M->data[k].e);
}
}
void PrintMatrix(TSMatrix M)
{
int k=0;
int i,j;
for (i = 1;i<=M.m; ++i)
{
for (j = 1; j <= M.n; ++j)
{
if (M.data[k].i == i && M.data[k].j == j)
{
printf("%d ", M.data[k++].e);
} else
{
printf("0 ");
}
}
printf("\n");
}
}
int SumDiagonal(TSMatrix M)
{
int sum = 0, k=0;
int i;
for (i = 1; i <= M.m; ++i)
{
if (M.data[k].i==i&&M.data[k].j==i)
{
sum += M.data[k++].e;
}
}
return sum;
}
TSMatrix Transpose(TSMatrix M)
{
TSMatrix T;
T.m = M.n;
T.n = M.m;
T.t = M.t;
if (T.t > 0) {
int q=0;
int col;
for (col = 1; col <= M.n; ++col)
{
int k;
for (k = 0; k <= M.t; ++k)
{
if (M.data[k].j == col)
{
T.data[q].i = M.data[k].j;
T.data[q].j = M.data[k].i;
T.data[q].e = M.data[k].e;
++q;
}
}
}
}
return T;
}
int main()
{
int choice;
TSMatrix M, T;
do
{
printf("**************************************\n");
printf("* 三元组表数据结构 *\n");
printf("* 1. 输入稀疏矩阵 *\n");
printf("* 2. 输出稀疏矩阵 *\n");
printf("* 3. 求稀疏矩阵对角线元素之和*\n");
printf("* 4. 转置稀疏矩阵 *\n");
printf("* 0. 退出程序 *\n");
printf("**************************************\n");
printf("请选择功能(0-4):");
scanf("%d", &choice);
switch (choice)
{
case 1:
CreateMatrix(&M);
break;
case 2:
printf("稀疏矩阵为:\n");
PrintMatrix(M);
break;
case 3:
printf("对角线元素之和为:%d\n", SumDiagonal(M));
break;
case 4:
T = Transpose(M);
printf("转置后的稀疏矩阵为:\n");
PrintMatrix(T);
break;
case 0:
printf("感谢使用!\n");
return 0;
default:
printf("输入错误,请重新输入功能选项!\n");
}
}while(1);
}
这段代码中的求对角线元素之和哪里错了