题目描述
为向量1题目中实现的CVector类增加成员函数float Average(),计算n维向量的平均值并返回。
定义CStudent类,私有数据成员为:
string name; // 姓名
CVector score; // n个成绩
(1)添加构造函数,用虚参name1、n1、数组a1初始化CStudent类对象。
(2)添加输出函数,按样例格式输出CStudent对象值。
主函数输入数据,测试CStudent对象。
输入
输入多行,每行格式为:学生姓名 科目n n个成绩
输出
对每行测试数据,生成学生对象,输出如下数据:
学生姓名 n个成绩 成绩的平均值(保留2位小数)
输入样例1
wangwu 5 90 80 70 100 90
lisi 3 100 90 100
输出样例1
wangwu 90 80 70 100 90 86.00
lisi 100 90 100 96.67
该题主要考察类的复合使用
#include<iostream>
#include<string>
#include<iomanip>
using namespace std;
class cvector
{
private:
static int sum;
int* data;
int n;
public:
float Average();
friend cvector add(const cvector v1, const cvector v2);
cvector() { ; }
cvector(int n1, int* a)
{
n = n1;
data = new int[n];
for (int i = 0; i < n1; i++)
{
data[i] = a[i];
}
}
//~cvector() { delete[]data; }
void print();
void init(int n1, int* a);
void init2()
{
sum = 0;
}
static int pr_sum()
{
return sum;
}
};
class student
{
private:
string name;
cvector score;
public:
student(string name, int n1, int* a1);
void print();
};
int cvector::sum = 0;
student::student(string name, int n1, int* a1)
{
score.init2();
this->name = name;
score.init(n1, a1);
}
void student::print()
{
cout << name<<' ';
score.print();
cout <<' ' << fixed << setprecision(2) << score.Average() << endl;
}
float cvector::Average()
{
float av = 1.0*sum / this->n;
return av;
}
void cvector::init(int n1, int* a)
{
n = n1;
data = new int[n];
for (int i = 0; i < n1; i++)
{
data[i] = a[i];
sum += data[i];
}
}
cvector add(const cvector v1, const cvector v2)
{
int sum=v1.n;
int num[100];
for (int i = 0; i < sum; i++)
{
num[i] = v1.data[i] + v2.data[i];
}
cvector c(sum, num);
return c;
}
void cvector::print()
{
cout << data[0];
for (int i = 1; i < n; i++)
{
cout << ' ' << data[i];
}
}
int main()
{
string name;
int n;
while (cin >> name)
{
cin >> n;
int* num = new int[n];
for (int i = 0; i < n; i++)
{
cin >> num[i];
}
student ev(name, n, num);
ev.print();
delete[]num;
}
return 0;
}