#include<iostream.h>
#include<stdio.h>
#define n 5
#define m 20
int value(int a[],int i,int j)
{
if(i>=j)
returna[i*(i-1)/2+j];//一维坐标转化为二维地址坐标
else
return a[j*(j-1)/2+i];
}
void madd(int a[],int b[],int c1[n][n])//求压缩矩阵的和
{
int i,j;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
c1[i][j]=value(a,i,j)+value(b,i,j);
}
void mult(int a[],int b[],int c2[n][n])//求压缩矩阵的乘积
{
int i,j,k,s;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
s=0;
for(k=0;k<n;k++)
s+=value(a,i,k)*value(b,k,j);
c2[i][j]=s;
}
}
void disp1(int a[])//输出压缩矩阵(一维数组),输出形式为二维形式
{
int i,j;
for(i=0;i<n;i++)
{for(j=0;j<n;j++)
printf("M",value(a,i,j));
cout<<endl;
}
}
void disp2(int c[n][n])//输出对称矩阵c
{
int i,j;
for(i=0;i<n;i++)
{for(j=0;j<n;j++)
printf("M",c[i][j]);
cout<<endl;
}
}
void main()
{
int a[m]={1,2,3,4,5,6,7,8,9,10,11};
int b[m]={1,1,1,1,1,1,1,1,1,1};
int c1[n][n],c2[n][n];
madd(a,b,c1);
mult(a,b,c2);
cout<<endl;
cout<<"矩阵a:"<<endl;
disp1(a);
cout<<"矩阵b:"<<endl;
disp1(b);
cout<<"矩阵a+b:"<<endl;
disp2(c1);
cout<<"矩阵a*b:"<<endl;
disp2(c2);
cout<<endl;
}