题目内容
输入一个对称矩阵,将其下三角数据压缩存入一维数组中,输出一维数组数据;
再将此一维数组数据解压为二维数组(原对称矩阵),输出二维数组数据。
个人解法
#include#include #include #define MaxLength 9 //然而并没有用到:) typedef struct { int *array_B = NULL; int length; } Matrix; //初始化对称矩阵 void MatrixInit(Matrix &M) { printf("请输入对称矩阵的边长:n"); scanf("%d", &M.length); M.array_B = (int *)malloc(sizeof(int) * (M.length * (M.length + 1) / 2)); //由于仅输入下三角数据元素,故申请(下)三角区域的存储空间即可 if (M.array_B == NULL) //确定矩阵的压缩存储方式 exit(0); } //压缩矩阵 void MatrixCompress(Matrix &M) { int i, j; printf("现开始输入对称矩阵下三角部分。n"); for (i = 0; i < M.length; i++) { printf("第%d行的%d个数据元素: ", i + 1, i + 1); for (j = 0; j <= i; j++) { if (i >= j) //存储下三角的数据元素到一维数组B中 scanf("%d", &M.array_B[i * (i + 1) / 2 + j]); else //存储上三角的数据元素到一维数组B中 scanf("%d", &M.array_B[j * (j + 1) / 2 + i]); } } printf("下三角数据压缩成的一维数组:"); for (int x = 0; x < M.length * (M.length + 1) / 2; x++) printf("%d", M.array_B[x]); printf("n"); } //输出矩阵 void MatrixDisplay(Matrix M) { int i, j; printf("对称矩阵输出结果;n"); for (i = 0; i < M.length; i++) { for (j = 0; j < M.length; j++) { //返回存储在一维数组B中的二维数组A[i][j]值 if (i >= j) printf("%3d", M.array_B[i * (i + 1) / 2 + j]); else printf("%3d", M.array_B[j * (j + 1) / 2 + i]); } printf("n"); } } //销毁矩阵 void MatrixDestroy(Matrix &M) { free(M.array_B); M.array_B = NULL; } int main() { Matrix M; MatrixInit(M); MatrixCompress(M); MatrixDisplay(M); MatrixDestroy(M); system("pause"); return 0; }
运行结果:
本人拙作,请大佬们点评。



