"华为2012年机试题C语言部分,主要涉及一道关于计算选手得分的编程问题,要求根据专家评委和大众评委的打分规则来计算总分。"
在给定的试题中,主要考察了C语言的基础知识以及算法设计能力。问题的核心是编写一个名为`cal_score`的函数,该函数接受三个参数:一个存储评委分数的数组`score[]`,一个存储评委类型的数组`judge_type[]`,以及评委总数`n`。`judge_type[]`中的值1表示专家评委,2表示大众评委。
函数的目标是计算选手的最终得分,遵循以下规则:
1. 分别计算专家评委和大众评委的平均分。如果所有评委都是专家,则总分等于专家评委的平均分。如果存在大众评委,则总分由专家评委平均分的60%加上大众评委平均分的40%组成。
2. 计算平均分时需要取整,总分也是取整后返回。
以下是问题中提供的函数实现:
```c
int cal_score(int score[], int judge_type[], int n) {
int expert = 0;
int publicJudge = 0;
int numOfExpert = 0;
int averageScore = 0;
int index;
for (index = 0; index < n; index++) {
if (judge_type[index] == 1) {
expert += score[index];
numOfExpert++;
} else {
publicJudge += score[index];
}
}
if (numOfExpert == n) {
averageScore = expert / n;
} else {
averageScore = 0.6 * expert / numOfExpert + 0.4 * publicJudge / (n - numOfExpert);
}
return averageScore;
}
```
在函数中,首先通过遍历数组计算专家评委和大众评委的总分,以及专家评委的数量。之后,根据专家评委数量是否等于总数来确定总分的计算方式。最后,返回经过规则计算后的平均分。
为了验证函数的正确性,代码还提供了一个`main`函数,用于创建一组测试数据并调用`cal_score`函数,打印出计算结果。
这道试题旨在测试应聘者对C语言基本语法的理解,数组操作的熟练程度,以及逻辑思维和问题解决能力。在实际面试或笔试中,这类问题可以帮助评估候选人在编程基础、数据处理和算法设计方面的技能。