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