编程:五元向量的运算

编程:五元向量的运算

时间: 1ms        内存:128M

描述:

用习惯了的运算符操作新定义的类对象,这是OO方法给我们带来的便利。下面要为的五元向量(每个向量有5个元素)装备加法、数乘和输入输出的运算功能,请在begin至end部分,写上需要的代码并提交。
#include <iostream>
using namespace std;
const int N=5;   //向量中存储的数据个数,这里确定为5元向量
class MyVector
{
public:
    MyVector(){};    //构造函数
    MyVector(const MyVector &v);  //复制构造函数
    friend istream &operator>>(istream &input, MyVector &d);   //输入向量
    friend ostream &operator<<(ostream &output, const MyVector &d);  //输出向量
    MyVector operator+(const MyVector &d);  //向量相加,当前对象与d对应位置上的元素相加
    MyVector operator*(int n);   //向量数乘,当前对象的每个元素与n相乘
private:
    int data[N];      //在data数组中存储数据
};

MyVector::MyVector(const MyVector &d)
{
    for(int i=0; i<N; ++i)
        data[i]=d.data[i];
}
//**********begin*****************

//**********end*****************
int main()
{
    MyVector d1,d2;
    int n;
    cin>>d1;
    cin>>d2;
    cin>>n;
    cout<<"+: "<<d1+d2<<endl;
    cout<<"*: "<<d1*n<<endl;
    return 0;
}

输入:

第一个五元向量,五个数之间用空格隔开
第二个五元向量,五个数之间用空格隔开
一个整数

输出:

两个五元向量的和: 格式:前后加括号,两数之间用加逗号和一个空格
第一个五元向量与整数的数乘结果,格式同前
(运算规则:和运算为向量对应位置元素相加,数乘运算为各元素分别乘以给定的数。)

示例输入:

1 25 41 16 98
5 67 9 55 121
3

示例输出:

+: (6, 92, 50, 71, 219)
*: (3, 75, 123, 48, 294)

提示:

参考答案(内存最优[1504]):


#include <iostream>
using namespace std;
const int N=5;   //向量中存储的数据个数
class MyVector
{
public:
    MyVector(){};    //构造函数
    MyVector(const MyVector &v);  //复制构造函数
    friend istream &operator>>(istream &input, MyVector &d);
    friend ostream &operator<<(ostream &output, const MyVector &d);
    MyVector operator+(const MyVector &d2);  //向量相加,当前对象与d2对应位置上的元素相加
    MyVector operator*(int n);   //向量数乘,当前对象的每个元素与n相乘
private:
    int data[N];      //在data数组中存储数据
};

MyVector::MyVector(const MyVector &d)
{
    for(int i=0; i<N; ++i)
        data[i]=d.data[i];
}istream &operator>>(istream &input, MyVector &d)
{
    for(int i=0; i<N; ++i)
        cin>>d.data[i];
    return input;
}

ostream &operator<<(ostream &output, const MyVector &d)
{
    output<<"(";
        output<<d.data[0];
    for(int i=1; i<N; ++i)
        output<<", "<<d.data[i];
    output<<")";
    return output;
}

MyVector MyVector::operator+(const MyVector &d)
{
    //在此可以先判断d1和d2的元素数是否相同,如果不相同可以报错退出,不做运算。本参考解答忽略了这一前提
    MyVector dd;
    for(int i=0; i<N; ++i)
    {
        dd.data[i]=data[i]+d.data[i];
    }
    return dd;
}

MyVector MyVector::operator*(int n)
{
    MyVector dd;
    for(int i=0; i<N; ++i)
    {
        dd.data[i]=data[i]*n;
    }
    return dd;
}
int main()
{
    MyVector d1,d2;
    int n;
    cin>>d1;
    cin>>d2;
    cin>>n;
    cout<<"+: "<<d1+d2<<endl;
    cout<<"*: "<<d1*n<<endl;
    return 0;
}

参考答案(时间最优[0]):


#include <iostream>
using namespace std;
const int N=5;   //向量中存储的数据个数
class MyVector
{
public:
    MyVector(){};    //构造函数
    MyVector(const MyVector &v);  //复制构造函数
    friend istream &operator>>(istream &input, MyVector &d);
    friend ostream &operator<<(ostream &output, const MyVector &d);
    MyVector operator+(const MyVector &d2);  //向量相加,当前对象与d2对应位置上的元素相加
    MyVector operator*(int n);   //向量数乘,当前对象的每个元素与n相乘
private:
    int data[N];      //在data数组中存储数据
};

MyVector::MyVector(const MyVector &d)
{
    for(int i=0; i<N; ++i)
        data[i]=d.data[i];
}istream &operator>>(istream &input, MyVector &d)
{
    for(int i=0; i<N; ++i)
        cin>>d.data[i];
    return input;
}

ostream &operator<<(ostream &output, const MyVector &d)
{
    output<<"(";
        output<<d.data[0];
    for(int i=1; i<N; ++i)
        output<<", "<<d.data[i];
    output<<")";
    return output;
}

MyVector MyVector::operator+(const MyVector &d)
{
    //在此可以先判断d1和d2的元素数是否相同,如果不相同可以报错退出,不做运算。本参考解答忽略了这一前提
    MyVector dd;
    for(int i=0; i<N; ++i)
    {
        dd.data[i]=data[i]+d.data[i];
    }
    return dd;
}

MyVector MyVector::operator*(int n)
{
    MyVector dd;
    for(int i=0; i<N; ++i)
    {
        dd.data[i]=data[i]*n;
    }
    return dd;
}
int main()
{
    MyVector d1,d2;
    int n;
    cin>>d1;
    cin>>d2;
    cin>>n;
    cout<<"+: "<<d1+d2<<endl;
    cout<<"*: "<<d1*n<<endl;
    return 0;
}

题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注