#include<stdio.h>
#include<stdlib.h>
static int N,M;
void Out(int a[N][N]) //对称矩阵输出
{int j,i;printf("矩阵为:\n");for(i=0;i<N;i++)for(j=0;j<N;j++){printf("%-8d",a[i][j]);if(j==N-1) printf("\n");}
}
int *Compress(int a[N][N]) //压缩对称矩阵
{int i,j,p[100],t=0;for(i=0;i<N;i++)for(j=i;j<N;j++){p[t]=a[i][j];t++;}return p;
}
int main()
{printf("请输入矩阵阶数n:");scanf("%d",&N);int a[N][N],i=0,j=0,t=0,b[N][N],M;M=(1+N)*N/2;int *k;A: for(i=0;i<N;i++) //生成矩阵{printf("第%d行请输入%d个元素\n",i+1,N);for(j=0;j<N;j++){scanf("%d",&a[i][j]);}}for(i=0;i<N;i++) //生成矩阵{for(j=i;j<N;j++){if(a[i][j]!=a[j][i]){printf("输入矩阵不是对称矩阵,请重新输入\n");goto A;}}}Out(a);k=Compress(a);t=0;printf("压缩矩阵b为:\n");for(i=0;i<M;i++){printf("%d ",*(k+t));t++;}printf("\n");t=0;for(i=0;i<N;i++)for(j=i;j<N;j++){b[i][j]=k[t];b[j][i]=b[i][j];t++;}printf("释放矩阵b为:\n");Out(b);return 0;
}