我们称有许多值相同的元素或许多零元素,并且值相同的元素或零元素的分布有一定规律的矩阵为特殊矩阵。当矩阵的阶数比较大时,矩阵占据的内存空间相当多,这时,利用特殊矩阵元素的分布规律压缩矩阵的内存空间,对许多应用问题来说有重要的意义。特殊矩阵压缩存储的方法是,只存储特殊矩阵中数值不相同的元素。读取被压缩矩阵元素的方法是,利用特殊矩阵压缩存储的数学映射公式找到相应的矩阵元素。上三角矩阵就属于特殊矩阵。
(1)设矩阵A、矩阵B和矩阵C均为采用压缩存储方式的n阶上三角矩阵,矩阵元素均为int类型。
(2)编写实现矩阵加C=A+B的函数。
(3)编写矩阵元素显示函数。
(4)以下面的数据为测试例子,编写一个主函数进行测试。
1 2 3 10 20 30
A=0 4 5B= 0 40 50
0 0 6 0 0 60
注意:数学中,矩阵元素aij的下标满足条件:1<=i<=n,1<=j<=n.如果下标从0开始,那映射公式不同。
void add(int a[], int b[], int c[],int n){//n阶上三角矩阵加法int i;for (i = 0; i < n * (n + 1) / 2 ; i++){c[i] = a[i] + b[i];}}void print(int c[], int n){//n阶上三角矩阵按矩阵方式输出,其中矩阵采用压缩存储方式int i, j, k;c[n * (n + 1) / 2] = 0;for (i = 1; i <= n; i++){for (j = 1; j <= n; j++){if (i <= j)k = (i - 1) * (2 * n - i + 2)/2 + (j - i);else {k = n * (n + 1) / 2;}printf("%3d ", c[k]);}printf("\n");}}void main(){int a[] = { 1,2,3,4,5,6 }, b[] = { 10,20,30,40,50,60 }, c[7];int n = 3;add(a, b, c, n);print(c, n);}
运行结果:
11 22 33
0 44 55
0 0 66