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

  1. /*  
  2. Copyright (c)2016,烟台大学计算机与控制工程学院  
  3. All rights reserved.  
  4. 文件名称:第9周项目2 - 对称矩阵压缩存储的实现与应用(2).cpp  
  5. 作    者:陈晓琳  
  6. 完成日期:2016年10月27日  
  7. 版 本 号:v1.0  
  8.   
  9. 问题描述: (2)设计算法,实现两个用压缩形式存储的对称矩阵A和B的加法和乘法。实现中请使用好前面设计的基本运算。   
  10. 输入描述:a,b对称矩阵的全部数据。  
  11. 程序输出:矩阵a,b,a+b与a*b的结果。  
  12. */    

代码:

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. #include <stdio.h>    
  2. #define N 4    
  3. #define M 10    
  4. int value(int a[],int i,int j);    
  5. void madd(int a[],int b[],int c[][N]);    
  6. void mult(int a[],int b[],int c[][N]);    
  7. void disp1(int a[]);    
  8. void disp2(int c[][N]);    
  9. int main()    
  10. {    
  11.     int a[M]= {1,2,3,4,5,6,7,8,9,10};  //a表示压缩存储的对称矩阵    
  12.     int b[M]= {1,1,1,1,1,1,1,1,1,1};    
  13.     int c1[N][N],c2[N][N];    
  14.     madd(a,b,c1);    
  15.     mult(a,b,c2);    
  16.     printf("a矩阵:\n");    
  17.     disp1(a);    
  18.     printf("b矩阵:\n");    
  19.     disp1(b);    
  20.     printf("a+b:\n");    
  21.     disp2(c1);    
  22.     printf("a×b:\n");    
  23.     disp2(c2);    
  24.     printf("\n");    
  25.     return 0;    
  26. }    
  27. int value(int a[],int i,int j)    
  28. {    
  29.     if(i>j)    
  30.     {    
  31.         return a[i*(i+1)/2+j];    
  32.     }    
  33.     else return a[j*(j+1)/2+i];    
  34. }    
  35.     
  36.     
  37. void madd(int a[],int b[],int c[][N])    
  38. {    
  39.     
  40.     int i=0,j=0;    
  41.     while(i<N)    
  42.     {    
  43.         while(j<N)    
  44.         {    
  45.             c[i][j]=value(a,i,j)+value(b,i,j);    
  46.             j++;    
  47.         }    
  48.         j=0;    
  49.         i++;    
  50.     
  51.     }    
  52. }    
  53. void disp2(int c[][N])    
  54. {    
  55.     
  56.     int i=0,j=0;    
  57.     while(i<N)    
  58.     {    
  59.     
  60.         while(j<N)    
  61.         {    
  62.             printf("%4d",c[i][j]);    
  63.             j++;    
  64.         }    
  65.         j=0;    
  66.         i++;    
  67.         printf("\n");    
  68.     
  69.     }    
  70. }    
  71. void disp1(int a[])    
  72. {    
  73.     int i=0,j=0;    
  74.     while(i<N)    
  75.     {    
  76.     
  77.         while(j<N)    
  78.         {    
  79.             printf("%4d",value(a,i,j));    
  80.             j++;    
  81.     
  82.         }    
  83.         j=0;    
  84.         i++;    
  85.         printf("\n");    
  86.     }    
  87.     
  88. }    
  89. void mult(int a[],int b[],int c[][N])    
  90. {    
  91.     int i,j,k,s;    
  92.     for (i=0; i<N; i++)    
  93.         for (j=0; j<N; j++)    
  94.         {    
  95.             s=0;    
  96.             for (k=0; k<N; k++)    
  97.                 s=s+value(a,i,k)*value(b,k,j);    
  98.             c[i][j]=s;    
  99.         }    
  100. }    
运行结果:


知识点总结:

矩阵的加法和乘法运算。

学习心得:

需要学的知识很多,要努力

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值