生成的全为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");
}
}后面有问题,还没改,但想知道为什么会出现这些数。
之前论坛就出现过动态数组置零出现问题的案例,不知道原因,暂时还是别用了吧。
页:
[1]