- 问题及代码:
- /*
- copyright (t) 2016,烟台大学计算机学院
- *All rights reserved.
- *文件名称:fangzhou.cpp
- *作者:吕方舟
- *完成日期:2016年10月27日
- *版本号:v1.0
- *问题描述:用压缩形式存储对称矩阵,实现下面的操作并测试
- void Init(int *&b); //为N阶对称矩阵初始化存储数据的一维数组B
- int Value(int b[], int i, int j); //返回存储在b[M]中,对应二维数组A[i][j]的值
- void Assign(int b[], int e, int i, int j); //将e赋值给对应二维数组元素A[i][j],要存储到B[M]中
- void Disp(int b[]); //输出压缩存储在b中的对称矩阵
- void Destroy(int b[]); //销毁存储空间
- *输入描述:矩阵下三角部分
- *程序输出:对称矩阵
- */
-
matrix.h:
-
#include <stdio.h> #include <malloc.h> #define N 4 //定义矩阵阶数为4 void Init(int *&b); //为N阶对称矩阵初始化存储数据的一维数组B int Value(int b[], int i, int j); //返回存储在b[M]中,对应二维数组A[i][j]的值 void Assign(int b[], int e, int i, int j); //将e赋值给对应二维数组元素A[i][j],要存储到B[M]中 void Disp(int b[]); //输出压缩存储在b中的对称矩阵 void Destroy(int b[]); //销毁存储空间
matrix.cpp: -
#include "matrix.h" void Init(int *&b) //为N阶对称矩阵初始化存储数据的一维数组B { b=(int *)malloc(sizeof(int)*(N*(N+1)/2)); } int Value(int b[], int i, int j) //返回存储在b[M]中,对应二维数组A[i][j]的值 { if(i>=j) return b[(i*(i+1))/2+j]; else return b[(j*(j+1))/2+i]; } void Assign(int b[], int e, int i, int j) //将e赋值给对应二维数组元素A[i][j],要存储到B[M]中 { if(i>=j) b[i*(i+1)/2+j]=e; else b[j*(j+1)/2+i]=e; return; } void Disp(int b[]) //输出压缩存储在b中的对称矩阵 { int i,j; for(i=0;i<N;i++) { for(j=0;j<N;j++) printf("%4d",Value(b,i,j)); printf("\n"); } } void Destroy(int b[]) //销毁存储空间 { free(b); }
- main.cpp:
-
运行结果:#include <stdio.h> #include "matrix.h" int main() { int *b1; int i,j,num; Init(b1); while(1) { printf("请输入对称矩阵(只需要输入下三角部分即可):\n"); for(i=0;i<N;i++) { printf("输入第%d行的%d个数据元素",i+1,i+1); for(j=0;j<=i;j++) { scanf("%d",&num); Assign(b1,num,i,j); } } Disp(b1); Destroy(b1); printf("\n"); } return 0; }
-
- 知识点总结:
-
对称矩阵压缩存储的基本运算实现。
- 学习心得:
- 通过此例加深了对矩阵压缩存储的理解。
-
-
-