凯H 2023-04-26 19:30 采纳率: 81%
浏览 65
已结题

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


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

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

  • 写回答

2条回答 默认 最新

  • 语言-逆行者 2023-04-26 22:06
    关注

    上一个问题还没解决吗?

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 5月4日
  • 已采纳回答 4月26日
  • 赞助了问题酬金15元 4月26日
  • 创建了问题 4月26日

悬赏问题

  • ¥15 系统 24h2 专业工作站版,浏览文件夹的图库,视频,图片之类的怎样删除?
  • ¥15 怎么把512还原为520格式
  • ¥15 MATLAB的动态模态分解出现错误,以CFX非定常模拟结果为快照
  • ¥15 求高通平台Softsim调试经验
  • ¥15 canal如何实现将mysql多张表(月表)采集入库到目标表中(一张表)?
  • ¥15 wpf ScrollViewer实现冻结左侧宽度w范围内的视图
  • ¥15 栅极驱动低侧烧毁MOSFET
  • ¥30 写segy数据时出错3
  • ¥100 linux下qt运行QCefView demo报错
  • ¥50 F1C100S下的红外解码IR_RX驱动问题