hhhsm 发表于 2020-11-6 23:24:27

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

数据结构的作业,生成的数组打印出来就出来这两个奇怪的数,求解
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef struct //矩阵中的非零元素
{
      int row, col; //定义的行和列
      int e;      //定义的元素
} Triple;
typedef struct //定义矩阵
{
      Triple data; //一维数组
      int hang, lie, shu;   //矩阵的行数、列数和非零元个数
} TSMatrix;
int main()
{
      TSMatrix m, t;
      int i, j;         //随机生成的矩阵行列
      int k;            //随机生成随机数个数
      int l, o, n;      //打工用的
      int num = {0}; //储存每一列的非零元个数
      int pos = {0}; //每一列的起始地址
      k = (rand() % 10);//生成随机数组
      i = (rand() % 10);
      j = (rand() % 10);
      printf("矩阵的行为:%d\n矩阵的列为:%d\n矩阵的随机数个数为:%d\n", i, j, k);
      int a = {0};
      for (o = 0; o < i; o++)
      {
                for (n = 0; n < j; n++)
                {
                        printf("%16d", a);
                }
                printf("\n");
      }
      int b = {0}; //转置时使用的新数组
      for (l = 0; l < k; l++)
      {
                printf("输入随机数的行:"); //为随机数组赋值
                scanf("%d", &o);
                printf("输入随机数的列:");
                scanf("%d", &n);
                printf("输入随机数:");
                scanf("%d", &a);
      }
      for (o = 0; o < i; o++)
      {
                for (n = 0; n < j; n++)
                {
                        printf("%16d", a);
                }
                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 != 0)
                        {
                              m.data.row = i;
                              m.data.col = j;
                              m.data.e = a;
                              m.shu++;
                        }
                }
      }
      t.hang = m.lie; //快速转置
      t.lie = m.hang;
      t.shu = m.shu;
      for (l = 0; l < m.shu; l++)
      {
                num.col]++; //初始化num   num储存每一列的非零元个数
      }
      for (o = 1; o < m.lie; o++)
      {
                pos = pos + num; //初始化pos   pos每一列的起始地址
      }
      for (l = 0; l < m.shu; l++)
      {
                Triple tr = m.data;
                n = pos;
                t.data.row = tr.col;
                t.data.col = tr.row;
                t.data.e = tr.e;
                b = tr.e;
                pos++; //计算该列下一非零元的位置
      }
      printf("\n\n\n");
      for (o = 0; o < j; o++)
      {
                for (n = 0; n < i; n++)
                {
                        printf("%4d", b);
                }
                printf("\n");
      }
}后面有问题,还没改,但想知道为什么会出现这些数。

永恒的蓝色梦想 发表于 2020-11-6 23:33:47

之前论坛就出现过动态数组置零出现问题的案例,不知道原因,暂时还是别用了吧。
页: [1]
查看完整版本: 生成的全为0的二维数组,但里面有几个值不是0,求解