Problem C: 向量的运算 求助!!!依旧是引用 请看代码注释处
Problem C: 向量的运算
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 841 Solved: 457
[Submit][Status][Web Board]
Description
编写类Vector,用于表示一个向量。显然:
1. 它有三个数据成员,假定均为int类型的量,表示3个方向上的分量。
2. 定义其无参构造函数,初始化三个分量为0。
3.定义带参构造函数,用于初始化向量。
4. 重载+、-、*、<<和>>运算符。其中“+”和“-”不改变操作数的值,只是返回运算结果;“*”实现两种乘法,包括数乘及叉积。
Input
输入有多行,第一行M>0,表示有M个测试用例,之后有M行。
每行包括7个部分:前3个表示一个向量的三个分量,中间3个表示另一个向量的三个分量,最后一个为一个int类型的数。
分量的顺序按照i、j、k给出。
Output
输出见样例。其中:如果某个分量为0,则不输出该数量,除非所有分量均为0,则输出0。如果某个分量为负数,则不应输出其前面的“+”号。
Sample Input
Sample Output
HINT
Append Code
#include <iostream>
using namespace std;
class Vector
{
private:
int x, y, z;
public:
Vector():x(0), y(0), z(0) {}
Vector(int a, int b, int c):x(a), y(b), z(c) {}
Vector operator+(Vector &v)//****返回引用吗?Vector后面不能加引用!!!
{
Vector q;
q.x=x+v.x;
q.y=y+v.y;
q.z=z+v.z;
return q;
}
Vector operator-(Vector &v)//****返回引用吗?
{
Vector q;
q.x=x-v.x;
q.y=y-v.y;
q.z=z-v.z;
return q;
}
Vector operator*(int n)//****返回引用吗?
{
Vector q;
q.x=x*n;
q.y=y*n;
q.z=z*n;
return q;
}
Vector operator*(Vector &v)//****返回引用吗?
{
Vector q;
q.x=y*v.z-z*v.y;
q.y=z*v.x-x*v.z;
q.z=x*v.y-y*v.x;
return q;
}
friend ostream& operator<<(ostream& os, Vector& v)
{
if(v.x==0&&v.y==0&&v.z==0) os<<0;
else
{
int flag1=0, flag2=0;
if(v.x==0) flag1=1;
else
os<<v.x<<'i';
if(v.y==0) flag2=1;
else
if(v.y<0) os<<v.y<<'j';
else
if(v.y>0)
{
if(flag1==1)
os<<v.y<<'j';
else
os<<'+'<<v.y<<'j';
}
if(v.z==0) ;
else
if(v.z<0) os<<v.z<<'k';
else
if(v.z>0)
{
if(flag1==0||flag2==0)
os<<'+'<<v.z<<'k';
else
os<<v.z<<'k';
}
}
return os;
}
friend istream& operator>>(istream& is, Vector& v)
{
is>>v.x>>v.y>>v.z;
}
};
int main()
{
Vector vec1, vec2, vec3;
int cases, n;
cin>>cases;
cout<<"vect+vec2\tn*vec1\tvec1*vec2\n";
for (int i = 0; i < cases; i++)
{
cin>>vec1>>vec2>>n;
vec3 = vec1 + vec2;
cout<<vec3<<"\t";
vec3 = vec1 * n;
cout<<vec3<<"\t";
vec3 = vec1 * vec2;
cout<<vec3<<endl;
}
return 0;
}