第九周项目2-对称矩阵压缩存储的实现与应用(1)

来源:互联网 发布:图像对比软件 编辑:程序博客网 时间:2024/06/05 19:56

问题及代码:

/*        Copyright (c)2016,烟台大学计算机与控制工程学院        All rights reserved.        文件名称:项目2 (1).cpp        作    者:李晓钰      完成日期:2016年10月27日        版 本 号:v1.0                问题描述:(1)用压缩形式存储对称矩阵,实现下面的操作并测试            void Init(int *&b);//为N阶对称矩阵初始化存储数据的一维数组B            int Value(int b[], int i, int j);//返回存储在b[M]中,对应二维数组A[i][j]的值            void Assign(int b[], int e, int i, int j);//将e赋值给对应二维数组元素A[i][j],要存储到B[M]中            void Disp(int b[]);//输出压缩存储在b中的对称矩阵            void Destroy(int b[]);//销毁存储空间  输入描述:下三角数据。  程序输出:矩阵的全体输出。  */    


代码:

#include <stdio.h>   #include <malloc.h>   #define N 4  void Init(int *&b);//为N阶对称矩阵初始化存储数据的一维数组B  int Value(int b[],int i,int j);//返回存储在b[M]中,对应二维数组A[i][j]的值  void Assign(int b[],int e,int i,int j);//将e赋值给对应数组元素A[i][j].要存储到B[M]中  void Disp(int b[]);//输出压缩存储在b中的对称矩阵  void Destroy(int b[]);//销毁存储空间    int main()  {      int *b1;//指向整型的指针,待初始化      int i,j;      int v;      Init(b1);       printf("请输入对称矩阵(只需要输入下三角部分即可)\n");       for(i=0;i<N;i++)       {           printf("输入第%d行的%d个数据元素: ", i+1, i+1);          for(j=0;j<=i;j++)          {              scanf("%d",&v);              Assign(b1,v,i,j);          }       }       Disp(b1);       Destroy(b1);      return 0;  }  void Init(int *&b)//为N阶对称矩阵初始化存储数据的一维数组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]中  {      int k;      if(i>j)      {          k=i*(i+1)/2+j;          b[k]=e;      }      else if(i<=j)      {          k=j*(j+1)/2+i;          b[k]=e;      }    }  void Disp(int b[])//输出压缩存储在b中的对称矩阵  {      int i=0;      int j=0;      while(i<N)      {          while(j<N)          {              printf("%4d",b[i*(i+1)/2+j]);              j++;          }          printf("\n");          j=0;          i++;      }    }  void Destroy(int b[])//销毁存储空间  {  free(b);  }  



运行结果:




知识点总结:

对称矩阵的操作。

学习心得:

对于这部分知识还比较陌生,要多加巩固。

0 0
原创粉丝点击