大家帮忙看看我写的矩阵求和,看看是不是对所有的情况都符合,或者有什么改进的!
#include"stdio.h"typedef struct{
int data[50][50];
int m,n;
}matrix;
typedef int thmatrix[50][3];
void creat(matrix *s)
{
int i,j,x;
printf("请输入矩阵!\n");
for(i=0;i<s->m;i++)
for(j=0;j<s->n;j++)
{
scanf("%d",&x);
s->data[i][j]=x;
}
}
void print1(matrix *s)
{
int i,j;
printf("输出矩阵!\n");
for(i=0;i<s->m;i++)
{
for(j=0;j<s->n;j++)
printf("%-3d",s->data[i][j]);
printf("\n");
}
}
void print2(thmatrix A)
{
int i,j;
printf("输出转化为三元组的矩阵!\n");
for(i=0;i<=A[0][2];i++)
{
for(j=0;j<3;j++)
printf("%3d",A[i][j]);
printf("\n");
}
}
void change(matrix *s,thmatrix r)
{
int i,j,k;
k=1;
for(i=0;i<s->m;i++)
for(j=0;j<s->n;j++)
{
if(s->data[i][j]!=0)
{
r[k][0]=i;
r[k][1]=j;
r[k][2]=s->data[i][j];
k++;
}
r[0][0]=s->m;
r[0][1]=s->n;
r[0][2]=k-1;
}
}
void add(thmatrix B,thmatrix C,thmatrix A)
{
int i,r,k,t;
i=r=k=1;
while(i<=B[0][2]&&r<=C[0][2])
{
if(B[i][0]==C[r][0])
{
if(B[i][1]==C[r][1])
{
t=B[i][2]+C[r][2];
if(t!=0)
{
A[k][0]=C[i][0];
A[k][1]=C[i][1];
A[k][2]=t;
k++;
}
i++;r++;
}
else
if(B[i][1]>C[r][1])
{
A[k][0]=C[r][0];
A[k][1]=C[r][1];
A[k][2]=C[r][2];
r++;k++;
}
else
{
A[k][0]=B[i][0];
A[k][1]=B[i][1];
A[k][2]=B[i][2];
i++;k++;
}
}
else
if(B[i][0]>C[r][0])
{
A[k][0]=C[r][0];
A[k][1]=C[r][1];
A[k][2]=C[r][2];
r++;k++;
}
else
{
A[k][0]=B[i][0];
A[k][1]=B[i][1];
A[k][2]=B[i][2];
i++;k++;
}
}
if(i>B[0][2])
while(r<=C[0][2])
{
A[k][0]=C[r][0];
A[k][1]=C[r][1];
A[k][2]=C[r][2];
r++;k++;
}
else
while(i<=B[0][2])
{
A[k][0]=B[i][0];
A[k][1]=B[i][1];
A[k][2]=B[i][2];
i++;k++;
}
A[0][0]=B[0][0];
A[0][1]=B[0][1];
A[0][2]=k-1;
}
void main()
{
matrix b,c;
thmatrix A,B,C;
int h,l;
printf("输入矩阵的行和列!\n");
scanf("%d%d",&h,&l);
printf("行为%-2d列为%-2d\n",h,l);
b.m=h;
b.n=l;
creat(&b);
print1(&b);
change(&b,B);
print2(B);
printf("**********************************************************\n");
c.m=h;
c.n=l;
creat(&c);
print1(&c);
change(&c,C);
print2(C);
printf("*********************************************************\n");
add(B,C,A);
printf("矩阵A与B的和");
print2(A);
}