鱼C论坛

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

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

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

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

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

x
qq_pic_merged_1604675854075.jpg 数据结构的作业,生成的数组打印出来就出来这两个奇怪的数,求解
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define MAXSIZE 100
  4. typedef struct //矩阵中的非零元素
  5. {
  6.         int row, col; //定义的行和列
  7.         int e;        //定义的元素
  8. } Triple;
  9. typedef struct //定义矩阵
  10. {
  11.         Triple data[MAXSIZE]; //一维数组
  12.         int hang, lie, shu;   //矩阵的行数、列数和非零元个数
  13. } TSMatrix;
  14. int main()
  15. {
  16.         TSMatrix m, t;
  17.         int i, j;           //随机生成的矩阵行列
  18.         int k;              //随机生成随机数个数
  19.         int l, o, n;        //打工用的
  20.         int num[100] = {0}; //储存每一列的非零元个数
  21.         int pos[100] = {0}; //每一列的起始地址
  22.         k = (rand() % 10);  //生成随机数组
  23.         i = (rand() % 10);
  24.         j = (rand() % 10);
  25.         printf("矩阵的行为:%d\n矩阵的列为:%d\n矩阵的随机数个数为:%d\n", i, j, k);
  26.         int a[i][j] = {0};
  27.         for (o = 0; o < i; o++)
  28.         {
  29.                 for (n = 0; n < j; n++)
  30.                 {
  31.                         printf("%16d", a[o][n]);
  32.                 }
  33.                 printf("\n");
  34.         }
  35.         int b[j][i] = {0}; //转置时使用的新数组
  36.         for (l = 0; l < k; l++)
  37.         {
  38.                 printf("输入随机数的行:"); //为随机数组赋值
  39.                 scanf("%d", &o);
  40.                 printf("输入随机数的列:");
  41.                 scanf("%d", &n);
  42.                 printf("输入随机数:");
  43.                 scanf("%d", &a[o - 1][n - 1]);
  44.         }
  45.         for (o = 0; o < i; o++)
  46.         {
  47.                 for (n = 0; n < j; n++)
  48.                 {
  49.                         printf("%16d", a[o][n]);
  50.                 }
  51.                 printf("\n");
  52.         }
  53.         m.hang = i;
  54.         m.lie = j;
  55.         m.shu = 0;
  56.         for (o = 0; o < i; o++) //将非零元储存到三元组里面
  57.         {
  58.                 for (n = 0; n < j; n++)
  59.                 {
  60.                         if (a[o][n] != 0)
  61.                         {
  62.                                 m.data[m.shu].row = i;
  63.                                 m.data[m.shu].col = j;
  64.                                 m.data[m.shu].e = a[o][n];
  65.                                 m.shu++;
  66.                         }
  67.                 }
  68.         }
  69.         t.hang = m.lie; //快速转置
  70.         t.lie = m.hang;
  71.         t.shu = m.shu;
  72.         for (l = 0; l < m.shu; l++)
  73.         {
  74.                 num[m.data[l].col]++; //初始化num   num储存每一列的非零元个数
  75.         }
  76.         for (o = 1; o < m.lie; o++)
  77.         {
  78.                 pos[o] = pos[o - 1] + num[o - 1]; //初始化pos   pos每一列的起始地址
  79.         }
  80.         for (l = 0; l < m.shu; l++)
  81.         {
  82.                 Triple tr = m.data[l];
  83.                 n = pos[tr.col];
  84.                 t.data[l].row = tr.col;
  85.                 t.data[l].col = tr.row;
  86.                 t.data[l].e = tr.e;
  87.                 b[tr.col][tr.row] = tr.e;
  88.                 pos[tr.col]++; //计算该列下一非零元的位置
  89.         }
  90.         printf("\n\n\n");
  91.         for (o = 0; o < j; o++)
  92.         {
  93.                 for (n = 0; n < i; n++)
  94.                 {
  95.                         printf("%4d", b[o][n]);
  96.                 }
  97.                 printf("\n");
  98.         }
  99. }
复制代码
后面有问题,还没改,但想知道为什么会出现这些数。
最佳答案
2020-11-6 23:33:47
之前论坛就出现过动态数组置零出现问题的案例,不知道原因,暂时还是别用了吧。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-12 21:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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