鱼C论坛

 找回密码
 立即注册
查看: 800|回复: 1

[已解决]生成的全为0的二维数组,但里面有几个值不是0,求解

[复制链接]
发表于 2020-11-6 23:24:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
qq_pic_merged_1604675854075.jpg 数据结构的作业,生成的数组打印出来就出来这两个奇怪的数,求解
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef struct //矩阵中的非零元素
{
        int row, col; //定义的行和列
        int e;        //定义的元素
} Triple;
typedef struct //定义矩阵
{
        Triple data[MAXSIZE]; //一维数组
        int hang, lie, shu;   //矩阵的行数、列数和非零元个数
} TSMatrix;
int main()
{
        TSMatrix m, t;
        int i, j;           //随机生成的矩阵行列
        int k;              //随机生成随机数个数
        int l, o, n;        //打工用的
        int num[100] = {0}; //储存每一列的非零元个数
        int pos[100] = {0}; //每一列的起始地址
        k = (rand() % 10);  //生成随机数组
        i = (rand() % 10);
        j = (rand() % 10);
        printf("矩阵的行为:%d\n矩阵的列为:%d\n矩阵的随机数个数为:%d\n", i, j, k);
        int a[i][j] = {0};
        for (o = 0; o < i; o++)
        {
                for (n = 0; n < j; n++)
                {
                        printf("%16d", a[o][n]);
                }
                printf("\n");
        }
        int b[j][i] = {0}; //转置时使用的新数组
        for (l = 0; l < k; l++)
        {
                printf("输入随机数的行:"); //为随机数组赋值
                scanf("%d", &o);
                printf("输入随机数的列:");
                scanf("%d", &n);
                printf("输入随机数:");
                scanf("%d", &a[o - 1][n - 1]);
        }
        for (o = 0; o < i; o++)
        {
                for (n = 0; n < j; n++)
                {
                        printf("%16d", a[o][n]);
                }
                printf("\n");
        }
        m.hang = i;
        m.lie = j;
        m.shu = 0;
        for (o = 0; o < i; o++) //将非零元储存到三元组里面
        {
                for (n = 0; n < j; n++)
                {
                        if (a[o][n] != 0)
                        {
                                m.data[m.shu].row = i;
                                m.data[m.shu].col = j;
                                m.data[m.shu].e = a[o][n];
                                m.shu++;
                        }
                }
        }
        t.hang = m.lie; //快速转置
        t.lie = m.hang;
        t.shu = m.shu;
        for (l = 0; l < m.shu; l++)
        {
                num[m.data[l].col]++; //初始化num   num储存每一列的非零元个数
        }
        for (o = 1; o < m.lie; o++)
        {
                pos[o] = pos[o - 1] + num[o - 1]; //初始化pos   pos每一列的起始地址
        }
        for (l = 0; l < m.shu; l++)
        {
                Triple tr = m.data[l];
                n = pos[tr.col];
                t.data[l].row = tr.col;
                t.data[l].col = tr.row;
                t.data[l].e = tr.e;
                b[tr.col][tr.row] = tr.e;
                pos[tr.col]++; //计算该列下一非零元的位置
        }
        printf("\n\n\n");
        for (o = 0; o < j; o++)
        {
                for (n = 0; n < i; n++)
                {
                        printf("%4d", b[o][n]);
                }
                printf("\n");
        }
}
后面有问题,还没改,但想知道为什么会出现这些数。
最佳答案
2020-11-6 23:33:47
之前论坛就出现过动态数组置零出现问题的案例,不知道原因,暂时还是别用了吧。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-6 23:33:47 | 显示全部楼层    本楼为最佳答案   
之前论坛就出现过动态数组置零出现问题的案例,不知道原因,暂时还是别用了吧。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 17:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表