3.3.1 对对称矩阵进行压缩存储代码
int CompMatrix(Array &s)//对对称矩阵进行压缩存储 {
int i,j,k=0;
for(i=1;i<=n;i++) for(j=1;j<=i;j++) {
s.m[k]=s.M[i][j]; k++; }
printf(\压缩后的矩阵存入一维数组后各元素为:\\n\ printf(\
for(k=0;k 3.4 将存储后的矩阵按照数学形式输出 矩阵的数学形式即为一个二维数组,我们将矩阵进行压缩存储后,其原来的形式被改变,变为一维数组,而所存储的元素个数也少于原矩阵,因此需要编辑函数将矩阵按数学形式输出。 OutputMatrix()函数:此函数的功能是:将压缩后的矩阵按照矩阵的数学形式输出,通过公式:当i>=j时,k=i*(i-1)/2+j-1;当i 赋值流程图如图3.7所示,输出流程图如图3.8所示。 8 开始 开始 i=1 初始化i=1 N N 判断i值与 i<=n 判断i值与 i<=n 行下标n值 i=1 初始化i=1 行下标n值的 Y 关系 初始化j=1 j=1 N 判断列下 j<=i 标j值 j<=n 与行下标 值得大小 结束 图3.7 赋值流程图 的关系 Y 初始化 判断列下标j 与n值的 大小关系 Y 输出矩阵 i++ 结束 图3.8 输出流程图 9 j=1 j=1 Y i k=i*(i-1)/2+j-1 k=j*(j-1)/2+i-1 j++ s.M[i][j]=s.m[k] i++ j++ 3.4.1 将存储后的矩阵按照数学形式输出的代码 int OutputMatrix(Array s)//按照数学形式输出矩阵 { int i,j,k=0; for(i=1;i<=n;i++) for(j=1;j<=n;j++) if(i>=j) { k=i*(i-1)/2+j-1; s.M[i][j]=s.m[k]; } else { k=j*(j-1)/2+i-1; s.M[i][j]=s.m[k]; } printf(\您压缩存储的矩阵按照数学形式输出为:\\n\ printf(\ for(i=1;i<=n;i++) { for(j=1;j<=n;j++) printf(\ printf(\ } return ok; } 10 4 详细代码 #include typedef struct { int M[100][100]; int m[100]; }Array; Array s; int n; int CreatMatrix(Array &s)//构建任意矩阵 { int i,j; //printf(\请输入数组中各元素,输入时请注意:s.M[i][j]=s.M[j][i]\\n\ printf(\请输入您需要构建n阶矩阵中的n值\\n\ scanf(\ if(n<=0) { fflush(stdin); printf(\值为非法输入,请您重新输入n值,n>0\\n\ scanf(\ } fflush(stdin); printf(\请输入数组中各元素,输入时请注意:s.M[i][j]=s.M[j][i]\\n\ for(i=1;i<=n;i++) { for(j=1;j<=n;j++) scanf(\ } printf(\您构建的矩阵为:\\n\ printf(\ 11