voidmain(void)
{personp1("张三");
personp2=p1;
cout<<"姓名:
";p1.print_name();
cout<<"姓名:
";p2.print_name();
}
问题:
⑾程序中①处应为person;
②处应为newchar[strlen(pn)+1];;
③处应为strcpy(name,pn);;
④处应为newchar[strlen(ob.name)+1];;
⑤处应为strcpy(name,ob.name);;
程序5(exp_102.cpp)
//头文件“hscore.h”内容:
定义一个成绩类:
最多可以处理10科成绩及平均成绩
constintM=10;
classscore
{private:
floatsc[M],aver;//表示M科成绩的数组及平均成绩
intm;//表示实际考试科数
public:
score(void);//无参构造函数
score(floatx[],intn);//构造函数重载——初始化成绩
voidset_score(floatx[],intn);//提供成绩
floatget_score(inti)//得到第i科成绩
{returnsc[i];}
floatget_aver(void)//得到平均成绩
{returnaver;}
voidprint_score(void);
};
score:
:
score(void)//无参构造函数
{inti;
m=M;
for(i=0;isc[i]=0;
aver=0;
}
score:
:
score(floatx[],intn)//构造函数重载——初始化成绩
{inti;floatsum=0;
m=n;
①;
aver=sum/m;
}
voidscore:
:
set_score(floatx[],intn)//提供成绩
{inti;floatsum=0;
m=n;
②;
aver=sum/m;
}
voidscore:
:
print_score(void)//输出成绩、平均成绩
{inti;
for(i=0;icout<<""<cout<<""<}
问题:
⑿完善类的定义,程序中,①处应改为:
for(i=0,i{sc[i]=x[i];
sum+=sc[i];}
②处应改为:
for(i=0,i{sc[i]=x[i];
sum+=sc[i];}
//程序“exp_205.cpp”:
用成绩类“score”处理成绩:
任意个学生,任意科(不超过10科)
#include
#include"hscore.h"//调入成绩score类的定义头文件
voidinput(score*p,intn,intm);//普通函数:
输入学生成绩
voidprint(score*p,intn,intm);//普通函数:
输出学生成绩
score&average(score*p,intn,intm);//普通函数:
平均成绩计算
voidsort(score*p,intn,intm);//普通函数:
按平均成绩排序
voidmain(void)
{intn,m;
cout<<"学生人数:
";cin>>n;
cout<<"考试科数:
";cin>>m;
score*p,aver;
p=①;//动态数组:
用于处理n个学生成绩
if(p==NULL)
{cout<<"内存分配失败!
"<return;
}
input(②);//调用输入成绩函数
print(②);//调用输出成绩函数
aver=average(②);//调用平均值计算函数
aver.print_score();//输出各科平均成绩
sort②);//成绩排序
print(②);//调用输出成绩函数
③;//释放内存
}
voidinput(score*p,intn,intm)
{inti,j;floatx[M];
for(i=0;i{cout<<"第"<
"<for(j=0;j{cout<<"第"<";
cin>>x[j];
}
④;//为某个学生对象提供成绩
}
}
voidprint(score*p,intn,intm)//成绩输出函数
{inti;
for(i=0;i⑤;//输出某学生的成绩
}
score&average(score*p,intn,intm)//用返回引用的方法
{inti,j;floats[M]={0};
staticscoreaver;//返回的对象必须是静态的
for(j=0;j{for(i=0;is[j]=s[j]+p[i].get_score(j);
s[j]=s[j]/n;
}
⑥;//对平均成绩对象提供值
returnaver;
}
voidsort(score*p,intn,intm)//选择法排序:
按平均成绩由高到低排列
{scoret;floata;
inti,j,k;
for(i=0;i{a=p[i].get_aver();k=i;
for(j=i+1;jif(a
{⑦}
if(k!
=i)
{⑧}
}
}
⒀完善main()函数,程序中
①处应为newscore[n];
②处应为p,n,m;
③处应为delete[]p;;
④处应为p->set_score(x,j);
⑤处应为cout<get_score(i)<⑥处应为p->set_score(s,n);
⑦处应为a=p[j].get_aver();
⑧处应为cout<<""<㈢程序设计实验
模拟一个裁判给比赛选手打分。
1.要求如下:
⑴裁判人数为UMPIRE;
⑵参赛选手为任意人;
⑶裁判给选手打分;
⑷去掉一个最高分,一个最低分,取其平均分为选手得分;
⑸按参赛选手的序号显示选手得分;
⑹按名次显示参赛选手得分(用插入法排序)。
2.提示:
⑴定义一个类名为Result的记分类为选手记分,数据成员至少包括选手编号(用整型)、姓名(用字符数组)、裁判为选手的打分及得分(用实型数组)等,成员函数自定(必须有构造函数),将类的定义保存在“result.h”中;
⑵测试程序(保存在exp_206.cpp中)采用交互方式:
①提示输入参赛选手人数;
②提示输入所有参赛选手的编号及姓名;
③显示比赛开始,请为选手打分;
④显示:
去掉的最高分、最低分,选手得分;
⑤比赛结束,按编号显示选手的得分;
⑥按名次显示选手得分。
#include
#include
#include
usingnamespacestd;
classresult
{
private:
intid;
stringname;
floatscore[5];
floatave;
public:
result(inti,stringn,floats[5])
{
floatsum=0,max=s[0],min=s[0];
intj;
id=i;
name.assign(n);
for(j=0;j<5;j++)
{
score[j]=s[j];
if(max
max=s[j];
if(min>s[j])
min=s[j];
sum+=s[j];
}
ave=(sum-max-min)/5;
}
floatget_ave()
{
returnave;
}
intget_id()
{
returnid;
}
stringget_name()
{
returnname;
}
voiddisplay()
{
inti;
cout<<"编号:
"<"<cout<<"最终得分="<cout<<"评委打分:
";
for(i=0;i<5;i++)
cout<cout<}
};
voidmain()
{
inti,j;
intm;
intidsize;
cout<<"请输入参赛选手人数"<cin>>m;
idsize=m;
int*id;//用指针指向一个数组
id=newint[idsize];//动态内存分配
vectoraver;
vectorname;
vector>x(m,vector(5));
cout<<"请输入所有参赛选手信息"<for(i=0;i{
stringna;
cout<<"第"<
cin>>id[i];
cout<<"第"<
cin>>na;
name.push_back(na);
}
cout<for(i=0;i{
cout<<"为第"<
for(j=0;j<5;j++)
{
cout<<"第"<cin>>x[i][j];
}
}
cout<for(i=0;i{
floats[5];
for(j=0;j<5;j++)
s[j]=x[i][j];
resulta(id[i],name[i],s);
a.display();
aver.push_back(a.get_ave());
}
for(i=1;ifor(j=i;j>0;j--)
{
if(aver[j]{
floattemp=aver[j];
aver[j]=aver[j-1];
aver[j-1]=temp;
intsum