第九周 任务四(改正版)

梦里梦外; 2022-06-13 12:49 437阅读 0赞
  1. /*
  2. 实验内容:完成矩阵的输入、输出、加、减、相等判断等操作
  3. * 程序的版权和版本声明部分
  4. * Copyright (c) 2011, 烟台大学计算机学院学生
  5. * All rights reserved.
  6. * 文件名称: 完成矩阵的输入、输出、加、减、相等判断等操作
  7. * 作 者: 薛广晨
  8. * 完成日期: 2012 年 4 月 16 日
  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. Douary::Douary(const Douary &d); //此处增加一个复制构造函数
  20. friend istream &operator>>(istream &input, Douary &d);//重载运算符“>>”输入二维数组,其中d为Dousry类对象;
  21. friend ostream &operator<<(ostream &output, Douary &d);//重载运算符“<<”以m行n列矩阵的形式输出二维数组,其中d为Douary类对象。
  22. friend Douary operator+(const Douary &d1,const Douary &d2);//两个矩阵相加,规则:对应位置上的元素相加
  23. friend Douary operator-(const Douary &d1,const Douary &d2);//两个矩阵相减,规则:对应位置上的元素相减
  24. bool operator==(const Douary &d);//判断两个矩阵是否相等,即对应位置上的所有元素是否相等
  25. private:
  26. int * Array; //Array 为动态数组指针。
  27. int row; //row 为二维数组的行数。
  28. int col; //col 为二维数组的列数。
  29. };
  30. Douary :: Douary(int m, int n)//构造函数:用于建立动态数组存放m行n列的二维数组(矩阵)元素,并将该数组元素初始化为
  31. {
  32. row = m;
  33. col = n;
  34. Array = new int [m * n];
  35. for(int i = 0; i < m; ++i)
  36. for(int j = 0; j < n; ++j)
  37. Array[i * col + j] = 0;
  38. }
  39. Douary :: Douary(const Douary &d)
  40. {
  41. row = d.row;
  42. col = d.col;
  43. Array = new int [row * col];
  44. for(int i = 0; i < row; ++i)
  45. for(int j = 0; j < col; ++j)
  46. Array[i * col + j] = d.Array[i * col + j];
  47. }
  48. Douary :: ~Douary() //析构函数:用于释放动态数组所占用的存储空间。
  49. {
  50. delete [] Array;
  51. }
  52. istream &operator>>(istream &input, Douary &d)//重载运算符“>>”输入二维数组,其中d为Dousry类对象;
  53. {
  54. for(int i = 0; i < d.row; ++i)
  55. for(int j = 0; j < d.col; ++j)
  56. input >> d.Array[i*d.col+j];
  57. return input;
  58. }
  59. ostream &operator<<(ostream &output, Douary &d)//重载运算符“<<”以m行n列矩阵的形式输出二维数组,其中d为Douary类对象。
  60. {
  61. for(int i = 0; i < d.row; ++i)
  62. {
  63. for(int j = 0; j < d.col; ++j)
  64. output << d.Array[i*d.col+j] << "\t";
  65. output << endl;
  66. }
  67. return output;
  68. }
  69. Douary operator + (const Douary &d1,const Douary &d2)//两个矩阵相加,规则:对应位置上的元素相加
  70. {
  71. Douary d(d1.row,d1.col);
  72. if(d1.row == d2.row && d1.col == d2.col)
  73. {
  74. for(int i = 0; i < d.row; ++i)
  75. for(int j = 0; j < d.col; ++j)
  76. d.Array[i*d.col+j] = d1.Array[i*d.col+j] + d2.Array[i*d.col+j];
  77. }
  78. else
  79. {
  80. cout << "不能运算";
  81. }
  82. return d;
  83. }
  84. Douary operator-(const Douary &d1,const Douary &d2)//两个矩阵相减,规则:对应位置上的元素相减
  85. {
  86. Douary d(d1.row,d1.col);
  87. if(d1.row == d2.row && d1.col == d2.col)
  88. {
  89. for(int i = 0; i < d.row; ++i)
  90. for(int j = 0; j < d.col; ++j)
  91. d.Array[i*d.col+j] = d1.Array[i*d.col+j] - d2.Array[i*d.col+j];
  92. }
  93. else
  94. {
  95. cout << "不能运算";
  96. }
  97. return d;
  98. }
  99. bool Douary :: operator==(const Douary &d)//判断两个矩阵是否相等,即对应位置上的所有元素是否相等
  100. {
  101. if(row == d.row && col == d.col)
  102. {
  103. for(int i = 0; i < d.row; ++i)
  104. for(int j = 0; j < d.col; ++j)
  105. if(Array[i*d.col+j] != d.Array[i*d.col+j]) return false;
  106. return true;
  107. }
  108. return false;
  109. }
  110. int main()
  111. {
  112. Douary d1(2,3), d2(2,3);
  113. cout << "输入d1:" << endl;
  114. cin >> d1;
  115. cout << "输入d2:" << endl;
  116. cin >> d2;
  117. cout << "d1=" <<endl;
  118. cout << d1;
  119. cout << "d2=" << endl;
  120. cout << d2;
  121. cout << "d1+d2=" << endl;
  122. cout <<(d1+d2);
  123. cout << "d1-d2=" << endl;
  124. cout << (d1-d2);
  125. cout << "d1" << ((d1 == d2) ? "==" : "!=") << "d2" << endl;
  126. system("pause");
  127. return 0;
  128. }

1334574141_8758.JPG
上机感言:把二维数组转化为一维数组,这种方法挺好,

发表评论

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

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

相关阅读

    相关 --题

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