问答题 已知A和B为两个n×n阶的对称矩阵,输入时,对称矩阵只输入下三角形元素,存入一维数组,如图所示(对称矩阵M存储在一维数组A中),设计一个算法求对称矩阵A和B的乘积。
【正确答案】对称矩阵第i行和第j列元素的数据在一维数组中的位置是: i×(i-i)/2+j (当i≥j时) j×(j-1)/2+i (当i<j时) 本题实现代码如下: int value(int a[],int i,int j) { if (i>=j) return a[(i*(i-1))/2+j]; else return a[(j*(j-1))/2+i]; } void mult(int a[],int b[],int c[n][n]) { int i,j,k,s; for(i=0;i<n;++i) for(j=0;j<n;++j) { s=0; for(k=0;k<n;++k) s=s+value(a,i,k)*value(b,k,j); c[i][j]=s; } } void disp(int a[]) { int i,j; for(i=0;i<n;++i) { for(j=0;j<n;++j) cout<<setw(3)<<value(a,i,j); cout<<endl; } }
【答案解析】