目录
- 题目背景
- 错误C语言代码:
- 正确C语言代码:
- 注意点
题目背景
高校团委组织校园歌手比赛,进入决赛的校园歌手有10位,歌手编号从1到10进行编号。组委会随机抽取方式产生了决赛次序为:3,1,9,10,2,7,5,8,4,6。比赛现场有5个评委为参赛的10位决赛歌手打分,分数为0~10分。歌手最后得分为去掉1个最高分和1个最低分后,剩余的3个分数的平均值。计算输出10位歌手的得分。
输入格式:
输入5个评委的评分
输出格式:
输出10位歌手的得分(保留小数点后两位)
printf(“%2d号歌手得分:%.2f\n”,/输出列表/);
输入样例:
9.0 9.1 9.5 9.6 8.8
9.3 9.2 9.6 9.4 9.0
8.9 9.4 9.7 9.3 9.0
9.4 9.2 9.6 9.9 9.8
9.6 9.0 9.5 9.3 9.6
8.8 9.4 9.2 9.7 9.2
9.1 9.5 9.5 9.3 9.3
9.3 9.2 9.6 9.4 9.0
9.7 9.1 9.5 9.4 9.5
9.5 9.2 9.6 9.2 9.5
输出样例:
1号歌手得分:9.30
2号歌手得分:9.47
3号歌手得分:9.20
4号歌手得分:9.47
5号歌手得分:9.37
6号歌手得分:9.40
7号歌手得分:9.27
8号歌手得分:9.30
9号歌手得分:9.23
10号歌手得分:9.60
参考文档
文档示例代码
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
int compare_ints(const void* a, const void* b)
{
int arg1 = *(const int*)a;
int arg2 = *(const int*)b;
if (arg1 < arg2) return -1;
if (arg1 > arg2) return 1;
return 0;
// return (arg1 > arg2) - (arg1 < arg2); // 可行的简写
// return arg1 - arg2; // 错误的简写(若给出 INT_MIN 则会失败)
}
int main(void)
{
int ints[] = { -2, 99, 0, -743, 2, INT_MIN, 4 };
int size = sizeof ints / sizeof *ints;
qsort(ints, size, sizeof(int), compare_ints);
for (int i = 0; i < size; i++) {
printf("%d ", ints[i]);
}
printf("\n");
}
错误C语言代码:
#include <stdio.h>
#include <cstdlib>
int compare_ints(const void* a, const void* b)
{
int arg1 = *(const int*)a;
int arg2 = *(const int*)b;
if (arg1 < arg2) return -1;
if (arg1 > arg2) return 1;
return 0;
// return (arg1 > arg2) - (arg1 < arg2); // 可行的简写
// return arg1 - arg2; // 错误的简写(若给出 INT_MIN 则会失败)
}
int main() {
int order[11]={0,3,1,9,10,2,7,5,8,4,6};
double ans[11];
double score[11][5];
for(int i=1;i<=10;++i)
{
for(int j=0;j<5;++j)
{
scanf("%lf",&score[i][j]);
}
}
for(int i=1;i<=10;++i)
{
qsort(score[i],5,sizeof(int),compare_ints);
ans[order[i]]=(score[i][1]+score[i][2]+score[i][3])/3;
printf("%lf\n",score[order[i]][1]);
printf("%lf\n",score[order[i]][2]);
printf("%lf\n",score[order[i]][3]);
}
for(int i=1;i<=10;++i)
{
printf("%d号歌手得分:%.2lf\n",i,ans[i]);
}
return 0;
}
正确C语言代码:
#include <stdio.h>
#include <cstdlib>
int compare_doubles(const void* a, const void* b)
{
double arg1 = *(const double*)a;
double arg2 = *(const double*)b;
if (arg1 < arg2) return -1;
if (arg1 > arg2) return 1;
return 0;
// return (arg1 > arg2) - (arg1 < arg2); // 可行的简写
// return arg1 - arg2; // 错误的简写(若给出 INT_MIN 则会失败)
}
int main() {
int order[11]={0,3,1,9,10,2,7,5,8,4,6};
double ans[11];
double score[11][5];
for(int i=1;i<=10;++i)
{
for(int j=0;j<5;++j)
{
scanf("%lf",&score[i][j]);
}
}
for(int i=1;i<=10;++i)
{
qsort(score[i],5,sizeof(double),compare_doubles);
ans[order[i]]=(score[i][1]+score[i][2]+score[i][3])/3;
// printf("%lf\n",score[order[i]][1]);
// printf("%lf\n",score[order[i]][2]);
// printf("%lf\n",score[order[i]][3]);
}
for(int i=1;i<=10;++i)
{
printf("%d号歌手得分:%.2lf\n",i,ans[i]);
}
return 0;
}
注意点
注意写的函数中出现的类型
int compare_ints(const void* a, const void* b) {
int arg1 = (const int)a;
int arg2 = (const int)b;
if (arg1 < arg2) return -1;
if (arg1 > arg2) return 1;
return 0;
// return (arg1 > arg2) - (arg1 < arg2); // 可行的简写
// return arg1 - arg2; // 错误的简写(若给出 INT_MIN 则会失败) }
qsort(ints, size, sizeof(int), compare_ints);