首页 > 题库 > 职业考证 > 软考 > 程序员 > 案例题
案例题

【说明】
在某单位举办的排球赛中,共有N(1<N≤10)支球队进行了单循环比赛,最后进行排名。比赛采用五局三胜制,胜三局的队算胜一场,最终排名按照以下规则确定:
(1)首先按照获胜场数降序排列,胜场多者排名在前。
(2)胜场数相同时,积分多者排名在前。计算积分规则如下:
比赛结果为 3:0 或3:1时,胜队积 3 分,负队积 0 分;
比赛结果为 3:2 时,胜队积 2 分,负队积 1分。
(3)胜场数和积分相同时,并列名次。为简化起见,按照队名的字典序显示排名。
以4个队为例,用矩阵形式给出4支名称分别为Nike、Paddy、Ackerma和Martin的赛队之间的比赛结果,3:2、3:1和3:0的比分分别用正整数5、4、3表示,对应地,2:3、1:3和0:3的比分分别用负整数-5、-4和-3表示,如表1所示。

因为Nike与Paddy队的比赛结果为3:2,所以在表1的第1行第2列用5表示,对应地,在第2行第1列用-5表示Paddy与Nike的比赛结果为2:3。同理,因为Nike与Ackerma队的比赛结果为1:3,所以在表1的第1行第3列用-4表示,对应地,在第3行第1列用4表示Ackerma与Nike队的比赛结果为3:1,其余类推。
下面程序根据比赛结果,按照上述规则计算并输出最终排名。程序运行时,首先输入队伍数和各队的队名,然后输入这些队伍的比赛结果矩阵(格式如表1所示)。示例如下:

对于以上示例输入,程序输出的最终排名(格式为队名、胜场数、积分)如下:


【问题1】(15分)
阅读试题说明和C代码,填补C代码中的空缺 (1)~ (6),将解答写入对应的答题栏内。
【C代码】

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

#define N 11
typedef struct {
char name[12]
int wins;
int score;
}INFO;

void sort(INFO*, int );
void read_count(INFO[], int);

int main()
{
int n;
INFO team[N];

memset(team,0,N*sizeof(INFO));

scanf("%d”,&n); //读入队伍数
for(int i=0; i<n; ++i)
scanf("%s”,team[i].name); //读入队名

read_count(team,n); //读入比赛结果并统计各队的胜场数和积分
sort( ( 1 )): //按照排名规则排序

for(int i=0; i<n; ++i) {
printf(“%s\t%d\t%d\n" , team[i].name, team[i].wins,team[i].score);
}

return 0;
}

void read_count(INFO team[], int n)
{
int t;
for(int i=0;i<n;++i){
for(int j=0; j<n; ++j)
{
scanf("%d",&t);
switch (t) {
case -5:team[i].score += 1 ; break ;
case 3:
case 4: (2); team[i].wins++; break;
case 5: (3); team[i].wins++; break;
}
}
}

void sort(INFO info[], int n)
int i,j;
INFO temp;

for(i=0; i<n-1; ++i)
for(j=0; j<n-1-i; ++j)
{
int winsLT = (info[j].wins < info[j+1].wins);
int winsEQ = ( ( 4 ) );
int scoreLT = (info[j].score < info[j+1].score);
int scoreEQ = ( ( 5 ) );
if (winsLT || (winsEQ && scoreLT) || (winsEQ && scoreEQ && (strcmp( ( 6 ) )>0)))
{
temp = info[j];
info[j] = info[j+1];
info[j+1] = temp;
}
}
}


参考答案: 查看答案 查看解析 下载APP畅快刷题

相关知识点试题

相关试卷