三元组保存稀疏矩阵的代码


#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);
}

这段代码中的求对角线元素之和哪里错了

上一个问题还没解决吗?