一、题目描述
为向量1题目中实现的CVector类增加成员函数float Average(),计算n维向量的平均值并返回。
定义CStudent类,私有数据成员为:
string name; // 姓名
CVector score; // n个成绩
(1)添加构造函数,用虚参name1、n1、数组a1初始化CStudent类对象。
(2)添加输出函数,按样例格式输出CStudent对象值。
主函数输入数据,测试CStudent对象。
二、输入与输出
1.输入
输入多行,每行格式为:学生姓名 科目n n个成绩
wangwu 5 90 80 70 100 90
lisi 3 100 90 100
2.输出
对每行测试数据,生成学生对象,输出如下数据:
学生姓名 n个成绩 成绩的平均值(保留2位小数)
wangwu 90 80 70 100 90 86.00
lisi 100 90 100 96.67
三、参考代码
#include<iostream>
#include<string>
#include<iomanip>
using namespace std;
class cv
{
friend class stu;
private:
int num;
float *data;
public:
cv(){};
cv(int num1,float*data1 ){
num=num1;
int i=0;
data=new float[num];
for(i=0;i<num;i++)
{
data[i]=data1[i];
}
};
void set(int num1,float*data1)
{
num=num1;
int i=0;
data=new float[num];
for(i=0;i<num;i++)
{
data[i]=data1[i];
}
}
cv(cv&b)
{
num=b.num;
for(int i=0;i<b.num;i++)
{
data[i]=b.data[i];
}
};
friend float ave(cv&a)
{
float sum=0;
for(int i=0;i<a.num;i++)
{
sum+=a.data[i];
}
return sum/a.num;
};
};
class stu
{
private:
string name;
cv sco;
public:
stu(string name1,int n1,float*data1)
{
name=name1;
sco.set(n1,data1);
}
void pri()
{
cout<<name<<" ";
for(int i=0;i<sco.num;i++)
{
cout<<fixed<< setprecision(0)<<sco.data[i]<<" ";
}
float ave1=ave(sco);
cout<<fixed<< setprecision(2)<<ave1<<endl;
}
};
int main() {
string name;
int num;
while(cin>>name)
{
cin>>num;
float *data=new float[num];
for(int i=0;i<num;i++)
{
cin>>data[i];
}
stu stu1(name,num,data);
stu1.pri();
delete []data;
}
return 0;
}
四、题解思路
while(cin>>name)是可以保证只要还要名字这个循环就不会停止。
注意各个函数的书写!!!