|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
解释这段代码,并说出用哪些函数实现的,函数的输入和输出是什么
- int SortByScore(const void* a, const void* b)
- {
- Player* playerA = (Player*)a;
- Player* playerB = (Player*)b;
- return playerA -> score - playerB -> score;
- }
-
-
- int SortByRank(const void* a, const void* b)
- {
- const Player* playerA = (const Player*)a;
- const Player* playerB = (const Player*)b;
- if(strcmp(playerA -> identity, "职业") == 0 && strcmp(playerB -> identity, "职业") == 0)
- {
- int Comp = strcmp(playerB -> rank, playerA -> rank);
- if(Comp == 0)
- {
- return strcmp(playerA -> id, playerB -> id);
- }
- return Comp;
- }
- return strcmp(playerA -> identity, "职业") == 0 ? -1 : 1;
- }
-
-
-
- void SortPlayer(Player players[], int num_players)
- {
- int i = 0;
- char sort_choice;
- printf("A. 所有棋手按等级分进行降序排序\n");
- printf("B. 职业棋手按段位进行降序排序\n");
- printf("C. 退出当前功能\n");
- printf("请选择(A-C):");
- getchar();
- scanf("%c", &sort_choice);
- switch(sort_choice)
- {
- case 'A':
- qsort(players, num_players, sizeof(Player), SortByScore);
- break;
- case 'B':
- qsort(players, num_players, sizeof(Player), SortByRank);
- break;
- case 'C':
- return;
- }
- getchar();
- printf("排序结果:\n");
- printf("%20s\t%20s\t%10s\t%12s\t%20s\n", "编号","姓名","身份","段位","等级分\n");
- for(i = 0; i < num_players; i++)
- {
- printf("%20s\t%21s\t%10s\t%12s\t%18s\n", players[i].id, players[i].name, players[i].identity, players[i].rank, players[i].score);
- }
- }
-
复制代码
这段代码定义了三个函数,分别是:SortByScore,SortByRank,以及SortPlayer。
SortByScore函数通过比较两个Player类型对象的score属性值来给对象进行排序。它接收的输入是两个void指针,指针中应包含指向Player对象的地址。函数返回的是两个Player对象的score属性值的差。如果第一个Player的score大于第二个Player的score,则返回正数;如果等于,则返回零;如果小于,则返回负数。
SortByRank函数通过比较两个Player类型对象的rank属性值来给对象进行排序。它同样接收的输入是两个void指针,指针中应包含指向Player对象的地址。函数中首先判断两个Player对象的identity属性值是否都是"职业", 如果都是,则先潮比两者的rank属性值。如果rank相同,则比较他们id的字符串顺序;否则返回rank比较的结果。如果identity值并非都是"职业",则直接通过比较identity值来判断排序。
SortPlayer函数对输入的Player对象数组进行排序。首先输入一个表示排序选项的字符,然后根据输入的字符调用相应的比较函数,使用qsort函数对Player对象数组进行排序。之后输出排序后的结果。
qsort函数是C标准库中的一个排序函数,需要传入数组指针,数组中元素的数量,每个元素的大小,以及一个用于比较两个元素的函数指针。在这个代码中,qsort函数使用了SortByScore或SortByRank函数进行Player对象的排序。
求最佳答案 
|
|