标题:稀疏矩阵三元组存储,转置矩阵输出的最后一组原生不对,求各位帮帮忙。
取消只看楼主
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
结帖率:95.37%
已结贴  问题点数:20 回复次数:9 
稀疏矩阵三元组存储,转置矩阵输出的最后一组原生不对,求各位帮帮忙。
#include <stdio.h>
#define max 3

typedef struct Triple
{
    int row, col, e;
}Triple;

typedef struct TSMarix
{
    Triple data[max + 1];
    int m, n, len;
}TSMarix;

void CreateTSMarix(TSMarix *T)
{
    int i;
    printf("请输入行数列数,非零元素个数:\n");
    scanf_s("%d%d%d", T->m, T->n, T->len);
    printf("请输入非零元素的行下标,列下标,值(空格分开输入):\n");
    for (i = 1; i< T->len; i++)
    {
        scanf_s("%d%d%d", T->data[i].row, T->data[i].col, T->data[i].e);
    }
}

void Print(TSMarix T)
{
    int i;
    printf("元素的行下标,列下标,值为:\n");
    for (i = 1; i<max + 1; i++)
    {
        printf("\t%d\t%d\t%d", T.data[i].row, T.data[i].col, T.data[i].e);
    }
}
int main()
{
    TSMarix T;
    printf("创建三元组表:\n");
    CreateTSMarix(&T);
    printf("输出三元组表:\n");
    Print(T);
    return 0;
}

[此贴子已经被作者于2017-11-2 22:33编辑过]

搜索更多相关主题的帖子: 矩阵 三元 int data printf 
2017-11-02 20:52
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
得分:0 
回复 2楼 炎天
我调试半天也没调出来,这样可以不?for(i=0;i<T->len;i++)
2017-11-02 21:26
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
得分:0 
回复 4楼 炎天
好的谢谢你。
2017-11-02 21:54
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
得分:0 
回复 4楼 炎天
#include <stdio.h>
#include <stdlib.h>
#define max 3

typedef struct Triple
{
    int row,col,e;
}Triple;

typedef struct TSMarix
{
    Triple data[max+1];
    int m,n,len;
}TSMarix;

void CreateTSMarix(TSMarix *T)
{
    int i;
    printf("请输入行数列数,非零元素个数:\n") ;
    scanf("%d%d%d",&T->m,&T->n,&T->len);
    if(T->m<1||T->n<1||T->len<1||T->len>max+1)
    {
        printf("输入的数据有误!\n");
        exit(0);
    }
    printf("请输入非零元素的行下标,列下标,值(空格分开输入):\n");
    for(i=1;i<T->len+1;i++)
        scanf("%d%d%d",&T->data[i].row,&T->data[i].col,&T->data[i].e);
}

void TransposeTSMarix(TSMarix T,TSMarix *B)
{
    B->n=T.m;
    B->m=T.n;
    B->len=T.len;
    int i,j,k;
    if(B->len>0)
    {
        j=1;
        for(k=1;k<=T.n;k++)
        {
            for(i=1;i<=T.len+1;i++)
            {
                if(T.data[i].col==k)
                {
                    
                    B->data[j].row=T.data[i].col;
                    B->data[j].col=T.data[i].row;
                    B->data[j].e=T.data[i].e;
                    j++;
                }
            }
        }
    }
}

void Print(TSMarix T)
{
    int i;
    printf("元素的行下标,列下标,值为:\n");
    for(i=1;i<T.len+1;i++)
    {
        printf("\t%d\t%d\t%d\n",T.data[i].row,T.data[i].col,T.data[i].e);
    }
}
int main()
{
    TSMarix T,B;
    printf("创建三元组表:\n");
    CreateTSMarix(&T);
    printf("输出三元组表:\n");
    Print(T);
    TransposeTSMarix(T,&B);
    printf("转置后的矩阵B为:\n");
    Print(B);
    return 0;
}


输出转转置厚点矩阵最后一个元素怎么不对?哪里出错了。。

[此贴子已经被作者于2017-11-2 22:21编辑过]

2017-11-02 22:19
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
得分:0 
回复 7楼 zbjzbj
我理解的三行三列指的非零元素总共有三行三列,然后非零元素所在的行列的下标值可以超过三,
什么是形象输入,文字表征输入?
2017-11-02 23:24
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
得分:0 
回复 11楼 不孤独的鲸鱼
时间复杂度有点高。
2017-11-03 16:09
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
得分:0 
回复 9楼 zbjzbj
那样写时间复杂度有点高。
2017-11-03 16:09
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
得分:0 
以下是引用炎天在2017-11-3 10:49:09的发言:



非零元素共三行三列, 那么这九个数都是要输入的了, 可是按你写的-----你自己再重新规定需要输入的个数。

你自己再重新规定需要输入的个数。 [/quote这句话什么意思?
2017-11-03 16:12
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
得分:0 
回复 15楼 炎天
转置的矩阵是三行三列的矩阵,其中有三个非零元素,转置过的矩阵也是三行三列。
不知道程序的逻辑哪里出了问题,,
2017-11-03 21:28
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
得分:0 
回复 17楼 炎天
请问 你这个矩阵是怎么转的,,我现在学的
2017-11-03 22:47



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-482067-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.791257 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved