一.题目运动成绩排名
分数 20
某大学开田径运动会,现有12名选手参加100米比赛,对应的运动员号及成绩如表所示,请按照成绩排名并输出,要求每一行输出名次、运动员号及成绩。
运动员号 成绩(秒) 运动员号 成绩(秒)
001 13.6 031 14.9
002 14.8 036 12.6
010 12.0 037 13.4
011 12.7 102 12.5
023 15.6 325 15.3
025 13.4 438 12.7
####使用给定的类,完成数据的对象的定义,并按照成绩排序后输出(格式见输出样例)
类声明如下:
#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
class Sport
{
public:
Sport() { }
Sport(string n,double g)
{
num=n;
grade=g;
}
string num;
double grade;
};
输入样例:
无
输出样例:
在这里给出相应的输出。例如:
1 010 12
2 102 12.5
3 036 12.6
4 011 12.7
5 438 12.7
6 025 13.4
7 037 13.4
8 001 13.6
9 002 14.8
10 031 14.9
11 325 15.3
12 023 15.6
####注意:使用setw()进行宽度设置,每个输出项占6列
二.参考答案
// 声明selection_sort函数原型
void selection_sort(Sport ath[], int length);
int main() {
Sport ath[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)
};
// 调用selection_sort函数,并传递数组和长度作为参数
selection_sort(ath, 12);
return 0;
}
// 定义selection_sort函数
void selection_sort(Sport ath[], int length) {
for (int i = 0; i < length - 1; i++) {
int flag = i;
for (int j = i + 1; j < length; j++) {
if (ath[j].grade < ath[flag].grade) {
flag = j;
}
}
if (flag != i) {
// 交换成绩和编号
double tem = ath[flag].grade;
ath[flag].grade = ath[i].grade;
ath[i].grade = tem;
string temp = ath[flag].num;
ath[flag].num = ath[i].num;
ath[i].num = temp;
}
}
// 输出排序后的结果
for (int i = 0; i < length; i++) {
cout << setw(6) << i + 1 << setw(6) << ath[i].num << setw(6) << ath[i].grade << endl;
}
}
输出结果:
三.拆解知识说明
1.用来规范格式的函数setw()
通过头文件#include <iomanip>来说明
setw()函数作用,setw()用来规范格式,放在输出目标前面,使宽度不够的数用空格来说明
如setw(6)表示下一个输出的目标宽度为6,不够的用空格填充
2.对象数组
(1 定义类class Sport{};
(2 声明一个对象数组,Sport ath[10];//声明一个包含10个对象的数组
(3 通过循环
for (int i = 0; i < 10; ++i) {
ath[i] = Sport(传入的数据); // 使用构造函数初始化每个对象
}
或直接初始化
Sport ath[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)
};
(4 调用 对象[i].调用的数据成员或成员函数
如ath[j].grade
3.把对象数组传入外部函数
函数名(对象数组,数组大小)selection_sort(ath, 12);
4.选择排序法
交换的时候注意数据类型