第九周 任务四

﹏ヽ暗。殇╰゛Y 2022-06-13 12:40 286阅读 0赞
  1. /*
  2. 实验内容:建立一个二维数组类Douary,使该类中有以下数据成员、成员函数及友员函数,完成矩阵的输入、输出、加、减、相等判断等操作。
  3. * 程序的版权和版本声明部分
  4. * Copyright (c) 2011, 烟台大学计算机学院学生
  5. * All rights reserved.
  6. * 文件名称:矩阵的输入、输出、加、减、相等判断
  7. * 作 者: 薛广晨
  8. * 完成日期: 2012 年 4 月 15 日
  9. * 版 本号: x1.0
  10. */
  11. //【任务4】建立一个二维数组类Douary,使该类中有以下数据成员、成员函数及友员函数,完成矩阵的输入、输出、加、减、相等判断等操作。
  12. #include <iostream>
  13. using namespace std;
  14. class Douary
  15. {
  16. public:
  17. Douary(int m, int n);//构造函数:用于建立动态数组存放m行n列的二维数组(矩阵)元素,并将该数组元素初始化为
  18. ~Douary(); //析构函数:用于释放动态数组所占用的存储空间。
  19. friend istream &operator>>(istream &input, Douary &d);//重载运算符“>>”输入二维数组,其中d为Dousry类对象;
  20. friend ostream &operator<<(ostream &output, Douary &d);//重载运算符“<<”以m行n列矩阵的形式输出二维数组,其中d为Douary类对象。
  21. friend Douary &operator+(const Douary &d1,const Douary &d2);//两个矩阵相加,规则:对应位置上的元素相加
  22. friend Douary &operator-(const Douary &d1,const Douary &d2);//两个矩阵相减,规则:对应位置上的元素相减
  23. bool operator==(const Douary &d);//判断两个矩阵是否相等,即对应位置上的所有元素是否相等
  24. private:
  25. int ** Array; //Array 为动态数组指针。
  26. int row; //row 为二维数组的行数。
  27. int col; //col 为二维数组的列数。
  28. };
  29. Douary :: Douary(int m, int n) //构造函数:用于建立动态数组存放m行n列的二维数组(矩阵)元素,并将该数组元素初始化为;
  30. {
  31. row = m;
  32. col = n;
  33. if(m != 0 && n!= 0)
  34. {
  35. Array = new int *[row];
  36. for (int i = 0; i < row; i++)
  37. {
  38. Array[i] = new int[col];
  39. }
  40. }
  41. else
  42. Array = NULL;
  43. }
  44. Douary :: ~Douary()
  45. {
  46. if (Array != NULL)
  47. {
  48. for (int i = 0; i < row; i++)
  49. {
  50. delete Array[i];
  51. }
  52. delete[] Array;
  53. Array = NULL;
  54. }
  55. }
  56. istream &operator>>(istream &input, Douary &d)//重载运算符“>>”输入二维数组,其中d为Douary类对象;
  57. {
  58. //input >> d.row >> d.col;
  59. if(d.row != 0 && d.col != 0)
  60. {
  61. int i,j;
  62. d.Array = new int *[d.row];
  63. for (i = 0; i < d.row; i++)
  64. {
  65. d.Array[i] = new int[d.col];
  66. }
  67. for (i = 0; i < d.row; ++i)
  68. for(j = 0; j < d.col; ++j)
  69. {
  70. input >> d.Array[i][j];
  71. }
  72. }
  73. else
  74. d.Array = NULL;
  75. return input;
  76. }
  77. ostream &operator<<(ostream &output, Douary &d)//重载运算符“<<”以m行n列矩阵的形式输出二维数组,其中d为Douary类对象。
  78. {
  79. output << d.row << '/' << d.col << endl;
  80. if (d.row != 0 && d.col != 0)
  81. {
  82. int i,j;
  83. for(i = 0; i < d.row; ++i)
  84. {
  85. for (j = 0; j < d.col; ++j)
  86. output << d.Array[i][j] << " ";
  87. output << endl;
  88. }
  89. }
  90. return output;
  91. }
  92. Douary &operator +(const Douary &d1, const Douary &d2)//两个矩阵相加,规则:对应位置上的元素相加
  93. {
  94. Douary *p = new Douary(0,0);
  95. if (d1.row == d2.row && d1.col == d2.col)
  96. {
  97. int i, j;
  98. p -> row = d2.row;
  99. p -> col = d2.col;
  100. p -> Array = new int *[d1.row];
  101. for (i = 0; i < d1.row; i++)
  102. {
  103. p -> Array[i] = new int[d1.col];
  104. }
  105. for (i = 0; i < d2.row; ++i)
  106. for(j = 0; j < d2.col; ++j)
  107. {
  108. p -> Array[i][j] = d1.Array[i][j] + d2.Array[i][j];
  109. }
  110. }
  111. else
  112. {
  113. cout << "不能构成矩阵!" << endl;
  114. }
  115. return *p;
  116. }
  117. Douary &operator-(const Douary &d1, const Douary &d2)//两个矩阵相减,规则:对应位置上的元素相减
  118. {
  119. Douary *p = new Douary(0, 0);
  120. if (d1.row == d2.row && d1.col == d2.col)
  121. {
  122. int i, j;
  123. p -> row = d2.row;
  124. p -> col = d2.col;
  125. p -> Array = new int *[d1.row];
  126. for (i = 0; i < d1.row; i++)
  127. {
  128. p -> Array[i] = new int[d1.col];
  129. }
  130. for (i = 0; i < d2.row; ++i)
  131. for(j = 0; j < d2.col; ++j)
  132. {
  133. p -> Array[i][j] = d1.Array[i][j] - d2.Array[i][j];
  134. }
  135. }
  136. else
  137. {
  138. cout << "不能构成矩阵!" << endl;
  139. }
  140. return *p;
  141. }
  142. bool Douary::operator==(const Douary &d)//判断两个矩阵是否相等,即对应位置上的所有元素是否相等
  143. {
  144. bool b = false;
  145. if (row == d.row && col == d.col)
  146. {
  147. int i,j;
  148. for(i = 0; i < row;++i)
  149. for(j = 0; j < col; ++j)
  150. if(d.Array[i][j] != Array[i][j])
  151. return false;
  152. b = true;
  153. }
  154. return b;
  155. }
  156. int main()
  157. {
  158. Douary d1(2, 3), d2(2, 3);
  159. cout << "输入d1:" << endl;
  160. cin >> d1;
  161. cout << "输入d2:"<<endl;
  162. cin >> d2;
  163. cout << "d1=" << endl << d1;
  164. cout << "d2=" << endl << d2;
  165. cout << "d1+d2=" << endl << (d1 + d2);
  166. cout << "d1-d2=" << endl << (d1 - d2);
  167. cout << "d1" << ((d1 == d2) ? "==" : "!=") << "d2" << endl;
  168. system("pause");
  169. return 0;
  170. }

1334492970_5433.jpg

上机感言:这个题有难度,有挑战性,就是数组的地方比较难

发表评论

表情:
评论列表 (有 0 条评论,286人围观)

还没有评论,来说两句吧...

相关阅读

    相关 --题

    对象实际操作 - 自我介绍 > 任务描述 > > > 现代社会,单位面试都会要求做一个自我介绍,介绍个人的名字、年龄、学历、职位等等。这可让某些人犯了难,聪明的你可以帮