卡卡西曦 发表于 2020-10-21 23:13:08

稀疏矩阵转化成转置矩阵错误

#include<iostream>
using namespace std;
#define m 100
typedef struct element
{
        int val;
        int row,col;
}elem;
elem b,c;
void create(int row,int col,int &i){
        int p,q,a;
        i = 0;
        printf("请输入稀疏矩阵:\n");
        for(p = 0;p<row;p++)
                for(q =0;q<col;q++){
                        scanf("%d",&a);
                        if(a !=0){
                                b.row = p;
                                b.col = q;
                                b.val = a;
                                i++;
                        }
                }
}
void print(elem a[],int i,int j){
        int k = 0;
        for(int p = 0;p<i;p++){
                for(int q =0;q<j;q++){
                        if(a.row == p&&a.col == q){
                                printf("%d",a.val);
                                k++;
                        }
                        else printf("0");
                }
                printf("\n");
        }
}
void transpose(elem b[],elem c[],int n,int t)
{
        int i,j,k;
        int *num = new int,*pot = new int ;
        for(j = 0;j<n;j++)num = 0;
        for(i = 0;i<t;i++)num.col]++;
        for(pot = 0,j = 1;j<n;j++)pot = pot*num;
        for(i = 0;i<t;i++)
        {
                j = b.col;
                k = pot;
                c.row = j,c.col = b.row,c.val = b.val;
                pot++;
        }
}
void main(){
        int ro,co,a;
        printf("请输入稀疏矩阵的行和列数:");
        scanf("%d%d",&ro,&co);
        create(ro,co,a);
        transpose(b,c,co,a);
        printf("转置矩阵:\n");
        print(c,co,ro);
}
我用的是C++,怎么改?

xieglt 发表于 2020-10-22 08:41:33

//程序逻辑一时半会难以理顺,改了一下语法错误。
#include<iostream>
using namespace std;
#define m 100
typedef struct element
{
        int val;
        int row,col;
}elem;

elem b,c;

void create(int row,int col,int &i){
        int p,q,a;
        i = 0;
        printf("请输入稀疏矩阵:\n");
        for(p = 0;p<row;p++)
                for(q =0;q<col;q++)
                {
                        scanf("%d",&a);
                        if(a !=0)
                        {
                                //b是个全局数组,必须以数组下标的方式访问
                                b.row = p;
                                b.col = q;
                                b.val = a;
                                i++;
                        }
                }
}
void print(elem a[],int i,int j){
        int k = 0;
        for(int p = 0;p<i;p++){
                for(int q =0;q<j;q++){
                        if(a.row == p&&a.col == q){
                                printf("%d",a.val);
                                k++;
                        }
                        else printf("0");
                }
                printf("\n");
        }
}
void transpose(elem b[],elem c[],int n,int t)
{
        int i,j,k;
        int *num = new int,*pot = new int ;

        for(j = 0;j<n;j++)num = 0;
        //同样的错误
        for(i = 0;i<t;i++)num.col]++;

        for(pot = 0,j = 1;j<n;j++)        pot = pot*num;

        for(i = 0;i<t;i++)
        {
                //同样的错误
                j = b.col;
                k = pot;
                c.row = j,c.col = b.row,c.val = b.val;
                pot++;
        }
}

void main()
{
        int ro,co,a;
        printf("请输入稀疏矩阵的行和列数:");
        scanf("%d%d",&ro,&co);
        create(ro,co,a);
        transpose(b,c,co,a);
        printf("转置矩阵:\n");
        print(c,co,ro);
}

卡卡西曦 发表于 2020-10-22 18:52:43

xieglt 发表于 2020-10-22 08:41
//程序逻辑一时半会难以理顺,改了一下语法错误。

改了还是不行

卡卡西曦 发表于 2020-10-22 18:57:58

卡卡西曦 发表于 2020-10-22 18:52
改了还是不行

它是显示有scanf那两行错了

xieglt 发表于 2020-10-22 19:21:54

本帖最后由 xieglt 于 2020-10-22 19:33 编辑

卡卡西曦 发表于 2020-10-22 18:57
它是显示有scanf那两行错了

是vc20xx吗?如果是的话
scanf 错了就用 scanf_s

我用的vc6.0,没法给你测。

卡卡西曦 发表于 2020-10-22 23:59:29

xieglt 发表于 2020-10-22 19:21
是vc20xx吗?如果是的话
scanf 错了就用 scanf_s



已找人解决
页: [1]
查看完整版本: 稀疏矩阵转化成转置矩阵错误