10_84.cpp
上传用户:zipjojo
上传日期:2009-07-20
资源大小:70k
文件大小:3k
源码类别:

文章/文档

开发平台:

C/C++

  1. #include<iostream.h>
  2. #include<iomanip.h>
  3. class matrix
  4. {  //定义矩阵类
  5. short rows,cols;  //矩阵的行、列
  6. double *elems;  //存放矩阵中各元素,按行存放
  7. public:
  8. matrix(){}
  9. matrix(short r,short c);
  10. double operator ()(short r,short c);
  11.   //重载运算符"()",用来返回元素值
  12. void setelem(short r,short c,double v);
  13.   //给元素赋值
  14. friend matrix operator +(matrix p,matrix q);
  15.   //重载"+",实现矩阵相加
  16. friend matrix operator -(matrix p,matrix q);
  17. friend matrix operator *(matrix p,matrix q);
  18. void print();
  19. };
  20. matrix::matrix(short r,short c)
  21. {  
  22. rows=r; 
  23. cols=c;
  24. elems=new double[r*c];
  25. }
  26. double matrix::operator()(short r,short c)
  27. {
  28. return (r>=1 && r<=rows && c>=1 && c<=cols)?
  29. elems[(r-1)*cols+(c-1)]:0.0;
  30. }
  31. void matrix::setelem(short r,short c,double v)
  32. {
  33. if(r>=1 && r<=rows && c>=1 && c<=cols)
  34. elems[(r-1)*cols+(c-1)]=v;
  35. //在内存中是按照行顺序存放矩阵元素的,所以应对行、列进行换算,
  36. //算出在elems中的下标
  37. }
  38. matrix operator +(matrix p,matrix q)
  39. {
  40. matrix m(p.rows,p.cols);
  41. if(p.rows!=q.rows || p.cols!=q.cols)
  42. return m;
  43. for(int r=1;r<=p.rows;r++)
  44. for(int c=1;c<=p.cols;++c)
  45. m.setelem(r,c,p(r,c)+q(r,c));
  46. return m;
  47. }
  48. matrix operator -(matrix p,matrix q)
  49. {
  50. matrix m(p.rows,p.cols);
  51. if(p.rows!=q.rows || p.cols!=q.cols)
  52. return m;
  53. for(int r=1;r<=p.rows;r++)
  54. for(int c=1;c<=p.cols;c++)
  55. m.setelem(r,c,p(r,c)-q(r,c));
  56. return m;
  57. }
  58. matrix operator *(matrix p,matrix q)
  59. {
  60. matrix m(p.rows,q.cols);
  61. if(p.cols!=q.rows)
  62. return m;
  63. for(int r=1;r<=p.rows;r++)
  64. for(int c=1;c<=q.cols;c++)
  65. {
  66. m.setelem(r,c,0.0);
  67. for(int i=1;i<=p.cols;i++)
  68. m.setelem(r,c,m(r,c)+p(r,i)*q(i,c));
  69. }
  70. return m;
  71. }
  72. void matrix::print()
  73. {
  74. for(int r=1;r<=rows;r++)
  75. {
  76. for(int c=1;c<=cols;c++)
  77. cout<<setw(7)<<(*this)(r,c);
  78.     //注意:this指针的用法,此句只能写成(*this)(r,c)形式,其它形式错误
  79. //使用*this标识被该重载函数成员正在操作的对象
  80. cout<<endl;
  81. }
  82. }
  83. void main()
  84. {
  85. matrix a(2,3),b(2,3),c(3,2),d(2,3),e(2,2);
  86. a.setelem(1,1,-1.1);
  87. a.setelem(1,2,2.2);
  88. a.setelem(1,3,-3.3);
  89. a.setelem(2,1,4.4);
  90. a.setelem(2,2,-5.5);
  91. a.setelem(2,3,6.6);
  92. b.setelem(1,1,-1.2);
  93. b.setelem(1,2,2.3);
  94. b.setelem(1,3,-3.4);
  95. b.setelem(2,1,4.5);
  96. b.setelem(2,2,-5.6);
  97. b.setelem(2,3,6.7);
  98. c.setelem(1,1,-1.8);
  99. c.setelem(1,2,4.9);
  100. c.setelem(2,1,-2.1);
  101. c.setelem(2,2,5.2);
  102. c.setelem(3,1,-3.3);
  103. c.setelem(3,2,6.4);
  104. cout<<"A矩阵:"<<endl; a.print();
  105. cout<<"B矩阵:"<<endl;  b.print();
  106. cout<<"C矩阵:"<<endl;  c.print();
  107. d=a+b;
  108. cout<<"A+B矩阵:"<<endl; d.print();
  109. d=a-b;
  110. cout<<"A-B矩阵:"<<endl; d.print();
  111. e=a*c;
  112. cout<<"A*C矩阵:"<<endl; e.print();
  113. }