|
发表于 2023-12-15 00:48:55
|
显示全部楼层
首先,我们需要定义一个结构体来表示棋手的信息:
- #include <stdio.h>
- // 定义棋手结构体
- typedef struct {
- char id[5]; // 棋手编号
- char name[20]; // 棋手姓名
- char type[10]; // 棋手身份(职业或业余)
- char rank[10]; // 棋手段位
- int score; // 等级分
- } Player;
复制代码
然后,我们需要实现两个比较函数,用于排序。一个用于按等级分进行升序排序,一个用于按段位进行降序排序。
- // 按等级分进行升序排序的比较函数
- int compareByScore(const void *a, const void *b) {
- Player *playerA = (Player *)a;
- Player *playerB = (Player *)b;
-
- return playerA->score - playerB->score;
- }
- // 按段位进行降序排序的比较函数
- int compareByRank(const void *a, const void *b) {
- Player *playerA = (Player *)a;
- Player *playerB = (Player *)b;
-
- // 先按段位进行排序
- int rankCompare = strcmp(playerB->rank, playerA->rank);
- if (rankCompare != 0) {
- return rankCompare;
- }
-
- // 如果段位相同,则按棋手编号的后三位数字进行排序
- int idA = atoi(playerA->id + 1); // 提取编号后三位数字
- int idB = atoi(playerB->id + 1);
-
- return idA - idB;
- }
复制代码
接下来,我们需要读取用户输入的棋手信息,并进行排序。
- int main() {
- Player players[100]; // 假设最多有100个棋手
- int count = 0; // 棋手数量
-
- // 读取用户输入的棋手信息
- printf("请输入棋手信息(输入0结束输入):\n");
- while (1) {
- printf("棋手编号:");
- scanf("%s", players[count].id);
- if (players[count].id[0] == '0') {
- break;
- }
-
- printf("棋手姓名:");
- scanf("%s", players[count].name);
- printf("棋手身份:");
- scanf("%s", players[count].type);
- printf("棋手段位:");
- scanf("%s", players[count].rank);
- printf("等级分:");
- scanf("%d", &players[count].score);
-
- count++;
- }
-
- // 提示用户选择排序方式
- printf("请选择排序方式(A-按等级分升序排序,B-按段位降序排序,C-退出):");
- char choice;
- scanf(" %c", &choice);
-
- // 根据用户选择进行排序并输出结果
- switch (choice) {
- case 'A':
- case 'a':
- qsort(players, count, sizeof(Player), compareByScore);
- break;
- case 'B':
- case 'b':
- qsort(players, count, sizeof(Player), compareByRank);
- break;
- default:
- return 0;
- }
-
- // 输出排序后的结果
- printf("排序结果:\n");
- printf("棋手编号 棋手姓名 棋手身份 棋手段位 等级分\n");
- for (int i = 0; i < count; i++) {
- printf("%s %s %s %s %d\n", players[i].id, players[i].name, players[i].type, players[i].rank, players[i].score);
- }
-
- return 0;
- }
复制代码
这样,我们就完成了对棋手信息进行排序的程序。用户可以选择按等级分进行升序排序,或者按职业棋手的段位进行降序排序。最后,程序会输出排序后的棋手信息。注意,我们使用了`qsort`函数进行数组的快速排序,需要包含`stdlib.h`头文件。另外,代码中有一些简化处理,例如没有对用户的输入进行错误检查,请根据实际情况进行修改和完善。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|