通用函数的应用

【题目描述】

    为了提高信息管理效率,教练再次求助小民完成以下队员信息管理任务:输入球员人数, 再输入每个球员的姓名和号码,然后输入排序方式(输入 1 表示按球员号码升序排序,输入 2 表示按球员号码降序排序),最后输出排序后的球员姓名和号码。要求用结构体数组来存放球员的姓名和号码,分别用三个函数来实现结构体数组的输入、排序和输出,要求用结构体指针作为函数的形参,同时排序函数必须是通用函数,即该函数既能实现按球员号码升序排序,也能实现按球员号码降序排序。

【输入格式】

    第一行,1 个正整数 n,2≤n≤20,表示球员人数。 

    接下来 n 行,每行 1 个字符串 name 和 1 个正整数 num,分别表示球员的姓名和号码; 1≤name 的长度≤20,姓名中不会出现空格,1≤num≤100。 

    接下来一行,1 个正整数 c,c=1 表示按球员号码升序排序,c=2 表示按球员号码降序排序。

通用函数的应用_第1张图片

【输出格式】

    n 行,每行 1 个字符串和 1 个正整数,分别表示排序后的球员姓名和球员号码。

#include
#define m 100

typedef struct {
    char name[20];
    int num;
} Player;

// 函数声明
void inputPlayers(Player *players, int n);
void sortPlayers(Player *players, int n, int order);
void outputPlayers(Player *players, int n);

int main() {
    Player players[m];
    int n, c;

    scanf("%d", &n);
    inputPlayers(players, n); // 输入球员信息
    scanf("%d", &c);
    sortPlayers(players, n, c); // 排序球员信息
    outputPlayers(players, n); // 输出球员信息

    return 0;
}

// 输入球员信息的函数
void inputPlayers(Player *players, int n) {
    for (int i = 0; i < n; i++) {
        scanf("%s %d", players[i].name, &players[i].num);
    }
}

// 排序球员信息的函数,通用函数
void sortPlayers(Player *players, int n, int order) {
    for (int i = 0; i < n - 1; i++) {
        for (int j = 0; j < n - i - 1; j++) {
            int shouldSwap = (order == 1) ? (players[j].num > players[j + 1].num) : (players[j].num < players[j + 1].num);
            if (shouldSwap) {
                Player temp = players[j];
                players[j] = players[j + 1];
                players[j + 1] = temp;
            }
        }
    }
}

// 输出球员信息的函数
void outputPlayers(Player *players, int n) {
    for (int i = 0; i < n; i++) {
        printf("%s %d\n", players[i].name, players[i].num);
    }
}

你可能感兴趣的:(数据结构,算法)