-->
当前位置:首页 > 题库 > 正文内容

函数题:矩阵与向量的乘法

Luz3年前 (2022-04-12)题库1089
矩阵与向量相乘:当矩阵的列数与向量的行数相等时,用矩阵的第i行乘以向量,得到的结果作为最终结果的第i行,否则输出"Bad multiplying Matrix with Vector."。

### 函数接口定义:
c++
int& Matrix::operator()(int i,int j);
ostream& operator<<(ostream& out,const Vector& x);
Vector operator*(Matrix& mat,Vector& vex);


int& Matrix::operator()(int i,int j):返回第i行第j列的矩阵元素(可作左值),应有下标越界检查,如果越界则输出信息"Matrix index out of range.";
ostream& operator<<(ostream& out,const Vector& x):将向量x输出到输出流out对象。为能达到连续输入对象的效果,设置返回类型为引用;
Vector operator*(Matrix& mat,Vector& vex):参数为矩阵mat、向量vex,返回二者的乘积。
### 裁判测试程序样例:
c++
#include<iostream>
#include<cstring>
using namespace std;
class Matrix; //类的向前声明
class Vector {
private:
int* v;
int sz;
public:
Vector(int n) { v=new int[sz=n]; }
Vector(const Vector& t) {
v=new int[sz=t.sz];
memcpy(v,t.v,sz*sizeof(int)); //深拷贝
}
~Vector() { delete []v; }
int& operator[](int i) {
if(i>=0 &&i<sz) //下标越界检查
return v[i];
else {
cout<<"Vector index out of range.\n"; exit(0);
}
}
friend ostream& operator<<(ostream& out,const Vector& x);
friend Vector operator*(Matrix& m,Vector& v);//重载乘法运算符
};
class Matrix {
private:
int* m;
int szl,szr;
public:
Matrix(int a,int b) {
szl=a; szr=b;
m=new int[a*b]; //用一维数组模拟矩阵
}
~Matrix() { delete []m; }
int& operator()(int i,int j) ;
friend Vector operator*(Matrix& m,Vector& v);
};
int main() {
int n,m;
cin>>n>>m;
Matrix ma(n,m);
for(int i=0; i<n; i++)
for(int j=0; j<m; j++)
cin>>ma(i,j);
cin>>n;
Vector ve(n);
for(int i=0; i<n; i++) cin>>ve[i];
Vector va = ma * ve;
cout<<va<<endl;
return 0;
}

/* 请在这里填写答案 */


### 输入样例:

在这里给出一组输入。输入矩阵的行、列数n,m,其后输入矩阵的n*m个元素,接着输入向量的大小t,其后输入向量的t个元素,例如:

in
4 3
1 2 3
0 1 2
1 1 3
1 2 1
3
2 1 0


### 输出样例:

在这里给出相应的输出。例如:

out
4 1 3 4







答案:若无答案欢迎评论

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。