6-3 运动成绩排名 (10分)
某大学开田径运动会,现有12名选手参加100米比赛,对应的运动员号及成绩如表所示,请按照成绩排名并输出,要求每一行输出名次、运动员号及成绩。
使用给定的类,完成数据的对象的定义,并按照成绩排序后输出(格式见输出样例)
类声明如下:
输入样例:
无
输出样例:
注意:使用setw()进行宽度设置,每个输出项占6列。
----------------------------------------------------分割线---------------------------------------------------
题目分析
1.由于要对已有的12组数据进行排序,所以我们需要定义一个对象数组来存储这些数据.
2.为了使主函数内更为简洁,我们定义一个排序函数void px(Sport * p)
在该排序函数中,我们使用了冒泡排序。
int main()
{
Sport s[12] = {
Sport("001", 13.6), Sport("002", 14.8), Sport("010", 12.0),
Sport("011", 12.7), Sport("023", 15.6), Sport("025", 13.4),
Sport("031", 14.9), Sport("036", 12.6), Sport("037", 13.4),
Sport("102", 12.5), Sport("325", 15.3), Sport("438", 12.7)
};
void px(Sport* p);
Sport *p = s;
px(p);
return 0;
}
void px(Sport* p)
{
Sport *i, *j;
for(i = p; i < p+11; i++)
for(j = p+11; j > i; j--)
if(j->grade < (j-1)->grade){
string s1;
double n;
n = j->grade;
s1 = j->num;
j->grade = (j-1)->grade;
j->num = (j-1)->num;
(j-1)->grade = n;
(j-1)->num = s1;
}
int n=1;
for(i = p; i < p+12; i++){
cout << setw(6) << n << setw(6) << i->num
<< setw(6) << i->grade << endl;
n++;
}
}