//scanf()中变量 要加 地址符 & ; E[m][n] ->E[i][j] C[k]=-1
#include "stdio.h"
#define m 6
#define n 8
#define max 50
// 稀疏矩阵存储在数组中
void creatematrix(int A[m][n],int B[50])
{
int i,j,k=0;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
if (A[i][j]!=0)
{
B[k]=i;
k++;
B[k]=j;
k++;
B[k]=A[i][j];
k++;
}
B[k]=-1;
}
//两个稀疏矩阵存储到两个数组中后相加存储到另一个数组中
void matrixadd(int A[max],int B[max],int C[max])
{
int i=0,j=0,k=0;
while (A[i]!=-1&&B[j]!=-1)
{
if (A[i]==B[j])
{
if (A[i+1]==B[j+1])
{
C[k]=A[i];
C[k+1]=A[i+1];
C[k+2]=A[i+2]+B[j+2];
k=k+3;
i=i+3;
j=j+3;
}
else if (A[i+1]<B[j+1])
{
C[k]=A[i];
C[k+1]=A[i+1];
C[k+2]=A[i+2];
k=k+3;
i=i+3;
}
else
{
C[k]=B[j];
C[k+1]=B[j+1];
C[k+2]=B[j+2];
k=k+3;
j=j+3;
}
}
else if (A[i]<B[j])
{
C[k]=A[i];
C[k+1]=A[i+1];
C[k+2]=A[i+2]+B[j+2];
k=k+3;
i=i+3;
}
else
{
C[k]=B[j];
C[k+1]=B[j+1];
C[k+2]=B[j+2];
k=k+3;
j=j+3;
}
}
if (A[i]==-1)
{
while (B[j]!=-1)
{
C[k]=B[j];
C[k+1]=B[j+1];
C[k+2]=B[j+2];
k=k+3;
j=j+3;
}
}
else
{
while(A[i]!=-1)
{
C[k]=A[i];
C[k+1]=A[i+1];
C[k+2]=A[i+2];
k=k+3;
i=i+3;
}
}
C[k]=-1;
}
//主函数
void main()
{
int E[m][n],F[m][n],A[max],B[max],C[max];
int i,j,k;
printf("输入稀疏矩阵E(%d,%d):\n",m,n);
for(i=0;i<m;i++) //输入稀疏矩阵E
{
for(j=0;j<n;j++)
{
scanf("%d",&E[i][j]);
}
}
printf("输入稀疏矩阵F(%d,%d):\n",m,n);
for(i=0;i<m;i++)//输入稀疏矩阵F
{
for(j=0;j<n;j++)
{
scanf("%d",&F[i][j]);
}
}
creatematrix(E,A);// E稀疏矩阵存储在数组A中
creatematrix(F,B);// F稀疏矩阵存储在数组B中
matrixadd(A,B,C);//相加
i=0;j=0;k=0;
printf("A数组内容如下:\n");
while(A[i]!=-1)
{
printf("%5d,%5d,%5d\n",A[i],A[i+1],A[i+2]);
i=i+3;
}
printf("B数组内容如下:\n");
while(B[j]!=-1)
{
printf("%5d,%5d,%5d\n",B[j],B[j+1],B[j+2]);
j=j+3;
}
printf("C数组内容如下:\n");
while(C[k]!=-1)
{
printf("%5d,%5d,%5d\n",C[k],C[k+1],C[k+2]);
k=k+3;
}
}
温馨提示:答案为网友推荐,仅供参考