【问题描述】
编写一个程序,定义一个安全、动态二维double型的数组类Matrix。
【输入形式】
【输出形式】
【样例输入1】
1 3
1 1 1
2 3
2 2 2 2 2 2
【样例输出1】
1
ERROR!
ERROR!
2 2 2
2 2 2
【样例输入2】
2 3
1 1 1 1 1 1
3 2
2 2 2 2 2 2
【样例输出2】
1
6 6
6 6
ERROR!
2 2
2 2
2 2
【样例输入3】
2 2
1 1 1 1
2 2
1 0 0 1
【样例输出3】
1
1 1
1 1
2 1
1 2
1 0
0 1
【样例说明】
【完整代码如下】
- #include
- #include
- using namespace std;
-
- class Matrix
- {
- public:
- int row;//数组行数
- int col;//数组列数
- int flag = 1;//当flag=1:可以输出;否则flag=0:出错,输出Error
-
- //用vector嵌套来存放动态二维数组
- //因为用的是嵌套,所以为二维数组
- vector< vector<double> >v;
-
- //输出对应行列的元素
- void table(const int i, const int j)
- {
- cout << v[i][j] << endl;
- }
-
- friend ostream& operator<<(ostream& output, Matrix &m);
- friend istream& operator>>(istream& input, Matrix &m);
- Matrix& operator+=(const Matrix&);
- Matrix& operator*=(const Matrix&);
- Matrix& operator=(const Matrix&);
- };
-
- istream& operator>>(istream& input, Matrix& m)
- {
- cin >> m.row >> m.col;
-
- double x=0.0;//x为即将输入的数组元素
-
- //vector作为顺序容器,长度是可以变化的
- vector<double> vv;
- m.v.clear();//先删除数组v中的所有元素(先清空,防止出错)
- for (int i=0; i
- {
- vv.clear();//清除vv里上一次存过的元素,方便多次使用
- for (int j=0; j
- {
- cin >> x;
- vv.push_back(x);
- }
- m.v.push_back(vv);//一行输入完后就整体存入v,即将此时的vv存入v
- }
- return input;
- }
- ostream& operator<<(ostream& output, Matrix& m)
- {
- if (m.flag != 0)
- {
- for (int i=0; i
-1; i++) - {
- for (int j=0; j
-1; j++) - {
- cout << m.v[i][j] << " ";
- }
- cout << m.v[i][m.col-1] << endl;
- }
-
- for (int j = 0; j < m.col - 1; j++)
- {
- cout << m.v[m.row-1][j] << " ";
- }
- cout << m.v[m.row-1][m.col-1];
- }
- //如果被标志过,即table1和table2不满足矩阵的加法和乘法运算规则,输出ERROR!;
- else
- {
- cout << "ERROR!";
- }
- return output;
- }
- Matrix& Matrix:: operator+=(const Matrix& m)
- {
- if (row==m.row && col==m.col)
- {
- for (int i=0; i
|
- {
- for (int j=0; j
- {
- v[i][j] += m.v[i][j];
- }
- }
- }
- else
- {
- flag = 0;
- }
- return *this;
- }
- Matrix& Matrix:: operator*=(const Matrix& m)
- {
- //注意矩阵相乘条件:前一个的列数=后一个的行数
- if (col == m.row )
- {
- for (int i=0; i
|
- {
- double sum=0;
- for (int j=0; j
- {
- for (int k=0; k
- {
- sum += v[i][k] * m.v[k][j];
- }
- v[i][j]=sum;
- }
- }
- }
- else
- {
- flag = 0;
- }
- return *this;
- }
- Matrix& Matrix::operator=(const Matrix& m)
- {
- flag = 1;
- row = m.row;
- col = m.col;
- vector<double> vv;
- v.clear();
- for (int i=0; i
- {
- vv.clear();
- for (int j=0; j
- {
- vv.push_back(m.v[i][j]);
- }
- v.push_back(vv);
- }
- return *this;
- }
- //测试程序
- int main()
- {
- Matrix table1,table2;
- cin >>table1>>table2;
-
- table1.table(table1.row / 2, table1.col / 2);
-
- table1 *= table2;
- cout << table1 << endl;
-
- table1 += table2;
- cout << table1 << endl;
-
- table1 = table2;
- cout << table1;
- return 0;
- }
-
相关阅读:
mac配置hdc
Java基础-----正则表达式
js实现PDF 预览和文件下载
Docker从入门到跑路
9月第1周榜单丨哔哩哔哩飞瓜数据B站UP主排行榜发布!
企业哪些项目可以参与CMMI的评估?
android studio 修改图标
JS常见的报错及异常捕获
浅析<router-view> v-slot事例
Zabbix原厂给中国用户的一封信,4大理由消除使用限制的担忧
-
原文地址:https://blog.csdn.net/weixin_74287172/article/details/134470154