| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
x
 
 
数据结构的作业,生成的数组打印出来就出来这两个奇怪的数,求解 
- #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");
 
 -         }
 
 - }
 
  复制代码 后面有问题,还没改,但想知道为什么会出现这些数。 
之前论坛就出现过动态数组置零出现问题的案例,不知道原因,暂时还是别用了吧。 
 
 
 |   
 
 
 
 |