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