第八周——“对称矩阵压缩存储的实现与应用”

来源:互联网 发布:淘宝保暖卫衣长款 编辑:程序博客网 时间:2024/06/07 06:24
/*烟台大学计算机学院  文件名称:yasuojuzhen 作者:董玉祥 完成日期: 2017 11 04  */(1)#include <stdio.h>#include <malloc.h>#define N 5void 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 10void 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;}结果截图:

阅读全文
0 0
原创粉丝点击