数组(对称矩阵压缩存储)
设aij为n阶对称矩阵A中i行j列的数据元素,k为一维数组va的下标序号,则其数学映射关系为:
注意:数学中,n阶对称矩阵元素aij的下标满足条件:1≤i≤n和1≤j≤n
实践
具体代码如下:
#include <stdio.h>
/*
n阶对称矩阵 C = A+B,矩阵采用压缩存储
*/
void Add(int a[], int b[], int c[], int n){
int i;
for(i=0;i<=n*(n+1)/2-1;i++){
c[i] = a[i] + b[i]; //逐位相加
}
}
/*
n阶对称矩阵按矩阵方式输出
*/
void Print(int a[], int n){
int i,j,k;
for(i=1;i<=n;i++){
for(j=1;j<=n;j++){
if(i>=j){
k = i*(i-1)/2+j-1; //计算元素下标
}else{
k = j*(j-1)/2+i-1; //计算隐含元素下标
}
printf("%d ",a[k]);
}
printf("\n");
}
}
void main(void){
int a[] = {1,2,4,3,5,6},
b[] = {10,20,40,30,50,60},
c[6];
int n = 3;
Add(a,b,c,n);
Print(c,n);
getch();
}