【id:115】【20分】D. 向量4(类复合)

题目描述

为向量1题目中实现的CVector类增加成员函数float Average(),计算n维向量的平均值并返回。

定义CStudent类,私有数据成员为:

string name; // 姓名

CVector score; // n个成绩

(1)添加构造函数,用虚参name1、n1、数组a1初始化CStudent类对象。

(2)添加输出函数,按样例格式输出CStudent对象值。

主函数输入数据,测试CStudent对象。

输入

输入多行,每行格式为:学生姓名 科目n n个成绩

输出

对每行测试数据,生成学生对象,输出如下数据:

学生姓名 n个成绩 成绩的平均值(保留2位小数)

样例查看模式

正常显示查看格式

输入样例1 <-复制

输出样例1

#include<iostream>
#include<string>
#include<iomanip>
using namespace std;
class CStudent;//最好都声明一下,避免遇到其他的麻烦
class CVector
{
private:
    int* data;//存储n维向量
    int n; //向量维数。
    //添加私有静态成员sum,在初始化对象的同时,统计所有对象的n维向量和sum。
    static int sum;
public:
    //(1)无参构造函数,设置n=5,data的数据分别为0,1,2,3,4;
    CVector()
    {
        n = 5;
        data = new int[5];
        for (int i = 0; i < 5; i++)
        {
            data[i] = i;
        }
    }
    //(2)构造函数,用虚参n1和数组a初始化n和data的数据;
    CVector(int n1, int* a)
    {
        n = n1;
        data = new int[n];
        for (int i = 0; i < n; i++)
        {
            data[i] = a[i];
            sum += a[i];
        }
    }
    //(3)输出函数,按格式输出n维向量的值;
    void print()
    {
        for (int i = 0; i < n-1; i++)
        {
            cout << data[i] << " ";
        }
        cout << data[n - 1];
    }
    //(4)析构函数。
    ~CVector()
    {
        delete[] data; 
    }
    friend CVector add(const CVector v1, const CVector v2);
    CVector(CVector& c)
    {
        this->n = c.n;
        data = new int[n];
        for (int i = 0; i < n; i++)
        {
            data[i] = c.data[i];
        }
    }
    static int getsum();
    static void setsum();
    //增加成员函数float Average(),计算n维向量的平均值并返回。
    float Average()
    {
        float av = 1.0 * sum / this->n;
        return av;
    }
    void set(int n1, int* a)
    {
        n = n1;
        data = new int[n];
        for (int i = 0; i < n; i++)
        {
            data[i] = a[i];
            sum += a[i];
        }
    }
};
int CVector::sum = 0;
int CVector::getsum()
{
    return sum;
}
void CVector::setsum()
{
    sum = 0;
}
CVector add(const CVector v1, const CVector v2)
{
    int* a = new int[v1.n];
    for (int i = 0; i < v1.n; i++)
    {
        a[i] = v1.data[i] + v2.data[i];
    }
    CVector v3(v1.n, a);
    return v3;
}
//在题目向量1的代码上添加类CVector的友元函数add,计算两个向量的和(对应分量相加)。
//定义CStudent类,私有数据成员为:
class CStudent
{
private:
    string name;
    CVector score;
public:
    CStudent() {};
    CStudent(string name1, int n1, int* a)
    {
        name = name1;
        score.set(n1, a);
    }
    void print()
    {
        cout << name << " ";
        score.print();
        cout << ' ' << fixed << setprecision(2) << score.Average() << endl;
        score.setsum();
    }
};
//string name;  // 姓名
//CVector score;  // n个成绩
int main()
{
    string name;
    while (cin >> name)
    {
        int n;
        cin >> n;
        int* a = new int[n];
        for (int i = 0; i < n; i++)
        {
            cin >> a[i];
        }
        CStudent c(name, n, a);
        c.print();
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值