/*烟台大学计算机学院
文件名称:yasuojuzhen
作者:董玉祥
完成日期: 2017 11 04
*/
(1)#include <stdio.h>
#include <malloc.h>
#define N 5
void Init(int *&b) //初始化
{
b=(int *)malloc(sizeof(int)*(N*(N+1))/2);
}
void Assign(int b[],int e,int i,int j) //将e赋值给对应数组元素A[i][j],存储到b[M]中
{
if(i>=j)
b[((i+1)*i)/2+j]=e;
else
b[(j*(j+1))/2+i]=e;
}
int Value(int b[],int i,int j) //返回存储在b[M]中的值
{
if(i>=j)
return b[((i+1)*i)/2+j];
else
return b[(j*(j+1))/2+i];
}
void Disp(int 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);
}
(2)设计算法,实现两个用压缩形式存储的对称矩阵A和B的加法和乘法。实现中请使用好前面设计的基本运算。
#include <stdio.h>
#define N 4
#define M 10
void add(int a[],int b[],int c[][N])
{
int i,j;
for(i=0;i<N;i++)
for(j=0;j<N;j++)
c[i][j]=Value(a,i,j)+Value(b,i,j);
}
void mult(int a[],int b[],int c[][N])
{
int i,j;
for(i=0;i<N;i++)
for(j=0;j<N;j++)
c[i][j]=Value(a,i,j)*Value(b,i,j);
}
int main()
{
int a[M]= {1,2,3,4,5,6,7,8,9,10};
int b[M]= {1,1,1,1,1,1,1,1,1,1};
int c1[N][N];
int c2[N][N];
printf("+:\n");
add(a,b,c1);
Disp1(c1);
printf("*:\n");
mult(a,b,c2);
Disp1(c2);
return 0;
}
结果截图:
