小羊爱吃小草 发表于 2023-12-15 01:42:26

C语言(不用链表)


用C语言对棋手信息进行排序,但是不能使用链表:
提示用户可按照两种方式进行排序:对所有棋手按等级分进行升序排序、对职业棋
手按段位进行降序排序(等级分或段位相同的棋手按照棋手编号后三位数字大小升序
排列)。根据输入信息进行排序,输出排序后的棋手信息。

例如:
A. 所有棋手按等级分进行降序排序
B. 职业棋手按段位进行降序排序
C. 退出当前功能
请选择(A-C): B
排序结果:
棋手编号 棋手姓名 棋手身份 棋手段位 等级分
P001 连笑 职业 九段 8900
P002 柯洁 职业 九段 9422

FishC 发表于 2023-12-15 01:42:57

可以使用结构体数组来存储棋手信息,并使用冒泡排序算法进行排序。以下是一个可能的实现:

#include <stdio.h>
#include <string.h>

// 定义棋手结构体
struct ChessPlayer {
    char id;      // 棋手编号
    char name;   // 棋手姓名
    char identity; // 棋手身份
    char rank;   // 棋手段位
    int score;         // 等级分
};

// 冒泡排序函数,按score升序排序
void bubbleSortByScore(struct ChessPlayer players[], int n) {
    for (int i = 0; i < n - 1; i++) {
      for (int j = 0; j < n - 1 - i; j++) {
            if (players.score > players.score) {
                // 交换两个棋手的信息
                struct ChessPlayer temp = players;
                players = players;
                players = temp;
            }
      }
    }
}

// 冒泡排序函数,按rank降序排序
void bubbleSortByRank(struct ChessPlayer players[], int n) {
    for (int i = 0; i < n - 1; i++) {
      for (int j = 0; j < n - 1 - i; j++) {
            // 先比较段位
            int cmpResult = strcmp(players.rank, players.rank);
            if (cmpResult < 0 || (cmpResult == 0 && strcmp(players.id + 1, players.id + 1) > 0)) {
                // 交换两个棋手的信息
                struct ChessPlayer temp = players;
                players = players;
                players = temp;
            }
      }
    }
}

int main() {
    struct ChessPlayer players[] = {
      { "P001", "连笑", "职业", "九段", 8900 },
      { "P002", "柯洁", "职业", "九段", 9422 },
      // 添加更多棋手信息...
    };

    int numPlayers = sizeof(players) / sizeof(struct ChessPlayer);

    while (1) {
      char choice;
      printf("请选择排序方式(A-按等级分升序排序 B-职业棋手按段位降序排序 C-退出): ");
      scanf("%c", &choice);
      getchar();// 读取并丢弃输入缓冲区中的换行符

      // 根据用户的选择进行排序并输出结果
      switch (choice) {
            case 'A':
                bubbleSortByScore(players, numPlayers);
                break;
            case 'B':
                bubbleSortByRank(players, numPlayers);
                break;
            case 'C':
                return 0;
            default:
                printf("无效选择,请重新输入。\n");
                continue;
      }

      // 输出排序结果
      printf("排序结果:\n");
      printf("棋手编号 棋手姓名 棋手身份 棋手段位 等级分\n");
      for (int i = 0; i < numPlayers; i++) {
            printf("%s %s %s %s %d\n", players.id, players.name, players.identity, players.rank, players.score);
      }

      printf("\n");
    }

    return 0;
}

该程序先定义了一个棋手结构体,然后使用该结构体数组存储棋手信息。冒泡排序函数`bubbleSortByScore`按照等级分升序排序,而`bubbleSortByRank`按照段位降序排序。通过不断接收用户的选择,并根据选择进行对应的排序和输出。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: C语言(不用链表)