C做的矩阵相加的程序,用的三元矩阵保存,以图形输出矩阵。
经过调试,两个矩阵相加之后,三元矩阵中保存的数据是正确的,但是图形输出相加矩阵的时候矩阵却不对,而且两个初始矩阵用图形输出的方法时却是正确的,找不到我的display2函数中存在的问题,求解决!
代码如下:
#include "stdio.h"
#define maxsize 20
typedef struct matrix
{
int line[maxsize];
int column[maxsize];
int data[maxsize];
int size;
}matrix;
void matrix_init(matrix* l)
{
l->size = 0;
}
void matrix_display1(matrix* l)
{
printf("data\tline\tcolumn\n");
for (int i = 0; i < l->size; i++)
{
printf("%d\t%d\t%d\n", l->data[i], l->line[i], l->column[i]);
}
}
int find_the_maxline(matrix* l)
{
int max = l->line[0];
for (int i = 1; i < l->size; i++)
{
if (l->line[i] > max)
max = l->line[i];
}
return max;
}
int find_the_maxcolumn(matrix* l)
{
int max = l->column[0];
for (int i = 1; i < l->size; i++)
{
if (l->column[i] > max)
max = l->column[i];
}
return max;
}
void matrix_display2(matrix* l)
{
int i, j, t;
int maxline = find_the_maxline(l);
int maxcolumn = find_the_maxcolumn(l);
for (i = 0; i <= maxline; i++)
{
for (j = 0; j <= maxcolumn; j++)
{
for (t = 0; t < l->size; t++)
{
if (l->line[t] == i && l->column[t] == j)
{
printf("%d ", l->data[t]);
break;
}
if (t == l->size - 1)
{
printf("0 ");
}
}
}
printf("\n");
}
}
void data_add(matrix* l, int x, int y, int z)
{
l->data[l->size] = x;
l->line[l->size] = y;
l->column[l->size] = z;
l->size++;
}
void matrix_add(matrix* l1, matrix* l2)
{
int status;
for (int i = 0; i < l2->size; i++)
{
status = 1;
for (int t = 0; t < l1->size; t++)
{
if (l2->line[i] == l1->line[t] && l2->column[i] == l1->column[t])
{
l1->data[t] = l1->data[t] + l2->data[i];
status = 0;
}
if (status == 0)
break;
if (t == l1->size - 1)
{
data_add(l1, l2->data[i], l2->line[i], l2->column[i]);
}
}
}
}
int main()
{
matrix l1,l2;
matrix_init(&l1);
matrix_init(&l2);
data_add(&l1, 1, 2, 3);
data_add(&l1, 1, 2, 4);
data_add(&l1, 1, 3, 3);
data_add(&l1, 3, 5, 3);
data_add(&l1, 4, 6, 3);
data_add(&l2, 1, 3, 1);
data_add(&l2, 1, 2, 4);
data_add(&l2, 1, 6, 4);
data_add(&l2, 3, 5, 2);
data_add(&l2, 4, 1, 3);
matrix_display2(&l1);
printf("\n");
matrix_display2(&l2);
printf("\n");
matrix_add(&l1, &l2);
matrix_display2(&l1);
return 0;
}
#include "stdio.h"
#define maxsize 20
typedef struct matrix
{
int line[maxsize];
int column[maxsize];
int data[maxsize];
int size;
}matrix;
void matrix_init(matrix* l)
{
for (int i = 0; i < maxsize; i++)
{
l->data[i] = 0;
}
l->size = 0;
}
void matrix_display1(matrix* l)
{
printf("data\tline\tcolumn\n");
for (int i = 0; i < l->size; i++)
{
printf("%d\t%d\t%d\n", l->data[i], l->line[i], l->column[i]);
}
}
int find_the_maxline(matrix* l)
{
int max = l->line[0];
for (int i = 1; i < l->size; i++)
{
if (l->line[i] > max)
max = l->line[i];
}
return max;
}
int find_the_maxcolumn(matrix* l)
{
int max = l->column[0];
for (int i = 1; i < l->size; i++)
{
if (l->column[i] > max)
max = l->column[i];
}
return max;
}
void matrix_display2(matrix* l)
{
int i, j, t;
int maxline = find_the_maxline(l);
int maxcolumn = find_the_maxcolumn(l);
for (i = 0; i <= maxline; i++)
{
for (j = 0; j <= maxcolumn; j++)
{
for (t = 0; t < l->size; t++)
{
if (l->line[t] == i && l->column[t] == j)
{
printf("%d ", l->data[t]);
break;
}
if (t == l->size - 1)
{
printf("0 ");
}
}
}
printf("\n");
}
}
void data_add(matrix* l, int x, int y, int z)
{
l->data[l->size] = l->data[l->size] + x;
l->line[l->size] = y;
l->column[l->size] = z;
l->size++;
}
void matrix_add(matrix* l1, matrix* l2)
{
for (int i = 0; i < l2->size; i++)
{
data_add(l1, l2->data[i], l2->line[i], l2->column[i]);
}
}
int main()
{
matrix l1, l2;
matrix_init(&l1);
matrix_init(&l2);
data_add(&l1, 1, 2, 3);
data_add(&l1, 1, 2, 4);
data_add(&l1, 1, 3, 3);
data_add(&l1, 3, 5, 3);
data_add(&l1, 4, 6, 3);
data_add(&l2, 1, 3, 1);
data_add(&l2, 1, 2, 4);
data_add(&l2, 1, 6, 4);
data_add(&l2, 3, 5, 2);
data_add(&l2, 4, 1, 3);
matrix_display2(&l1);
printf("\n");
matrix_display2(&l2);
printf("\n");
matrix_add(&l1, &l2);
matrix_display2(&l1);
return 0;
}