**一道包含对象数组和排序的问题

一.题目运动成绩排名

分数 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.选择排序法

交换的时候注意数据类型

相关推荐

  1. 在浏览器中存储对象(js问题

    2024-03-31 21:04:11       62 阅读
  2. 排序算法

    2024-03-31 21:04:11       23 阅读
  3. 遍历里面对象

    2024-03-31 21:04:11       58 阅读
  4. vue--检测对象改变

    2024-03-31 21:04:11       40 阅读
  5. lodash库中函数处理嵌套对象函数

    2024-03-31 21:04:11       50 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-31 21:04:11       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-31 21:04:11       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-31 21:04:11       82 阅读
  4. Python语言-面向对象

    2024-03-31 21:04:11       91 阅读

热门阅读

  1. 队列的基本概念

    2024-03-31 21:04:11       38 阅读
  2. Android TV 应用中的遥控器按键事件处理

    2024-03-31 21:04:11       42 阅读
  3. FastAPI+React全栈开发11 开始使用FastAPI

    2024-03-31 21:04:11       40 阅读
  4. 5.FPGA运算符详解

    2024-03-31 21:04:11       35 阅读
  5. C# 系统学习(事件与委托 )

    2024-03-31 21:04:11       37 阅读
  6. 【n个n相加求和,从1~n,金币】

    2024-03-31 21:04:11       32 阅读
  7. 专升本-人工智能(AI)

    2024-03-31 21:04:11       43 阅读
  8. Solidity全局变量完全测试

    2024-03-31 21:04:11       37 阅读
  9. 2024蓝桥杯每日一题(区间DP)

    2024-03-31 21:04:11       38 阅读
  10. C# 委托与事件

    2024-03-31 21:04:11       43 阅读