定义一个Matrix类,用于存储一个矩阵。重载其+、*运算符,分别用于计算两个矩阵的和、乘积;重载其<<和>>运算符,用于输出和输入一个矩阵。要求当两个矩阵不能进行加法或乘法运算时,应该输出Error。
标签:
Home | Web Board | ProblemSet | Standing | Status | Statistics |
定义一个Matrix类,用于存储一个矩阵。重载其+、*运算符,分别用于计算两个矩阵的和、乘积;重载其<<和>>运算符,用于输出和输入一个矩阵。要求当两个矩阵不能进行加法或乘法运算时,应该输出Error。
输入第1行N>0,表示有N组测试用例,共2N个矩阵。
每组测试用例包括2个矩阵。每个矩阵首先输入行数、列数,之后是该矩阵的所有元素。
每个测试用例产生一组输出。具体格式见样例。注意:当不能进行加法或乘法运算时,应输出Error。
#include<iostream> #define MAX 102 using namespace std; class Matrix { public: int r,c,error; int m[MAX][MAX]; Matrix():error(0) {} Matrix operator+(const Matrix &M) { Matrix tmp; tmp.r=M.r; tmp.c=M.c; /*for(int i=0;i<tmp.r;i++) for(int j=0;j<tmp.c;j++) tmp.m[i][j]=0;*/ if(r!=M.r||c!=M.c) { tmp.error=1; return tmp; } for(int i=0; i<r; i++) for(int j=0; j<c; j++) { tmp.m[i][j]=m[i][j]+M.m[i][j]; } return tmp; } Matrix operator*(const Matrix &M) { Matrix tmp; tmp.r=r; tmp.c=M.c; for(int i=0;i<tmp.r;i++) for(int j=0;j<tmp.c;j++) tmp.m[i][j]=0; if(c!=M.r) { tmp.error=1; return tmp; } for(int i=0; i<r; i++) { for(int j=0; j<M.c; j++) { int sum = 0; for(int k=0; k<M.r; k++) { sum += m[i][k] * M.m[k][j]; } tmp.m[i][j] = sum; } } return tmp; } friend istream &operator>>(istream &is,Matrix &M); friend ostream &operator<<(ostream &os,Matrix &M); }; istream &operator>>(istream &is,Matrix &M) { is>>M.r>>M.c; for(int i=0; i<M.r; i++) for(int j=0; j<M.c; j++) { is>>M.m[i][j]; } return is; } ostream &operator<<(ostream &os,Matrix &M) { if(M.error==1) { os<<"Error"<<endl; return os; } for(int i=0; i<M.r; i++) for(int j=0; j<M.c; j++) { if(j!=M.c-1) os<<M.m[i][j]<<" "; else os<<M.m[i][j]<<endl; } ///os<<endl; return os; } int main() { int cases, i; cin>>cases; for (i = 0; i < cases; i++) { Matrix A, B, C, D; cin>>A>>B; C = A + B; D = A * B; cout<<"Case "<<i + 1<<":"<<endl; cout<<C<<endl; cout<<D; } return 0; }
标签:
原文地址:http://www.cnblogs.com/auto1945837845/p/5516527.html