面试题1:下面的switch语句输出什么?
代码:
int n= 'C';
switch(n++)
{
default:printf("error"); break;
case‘a’:
case' A':
case'b':
case' B':
printf("ab");break;
case' c': case' C': printf("c");
case' d': case' D': printf("d");
}
A: cdd B cd C abcd D cderror
答案:B
面试题2:上机题目描述:选秀节目打分,分为专家评委和大众评委,score[]数组里面存储每个评委打的分数,judge_type[]里存储与score[]数组对应的评委类别,judge_type==1,表示专家评委,judge_type==2,表示大众评委,n表示评委总数。 打分规则如下:专家评委和大众评委的分数先分别取一个平均分(平均分取整),然后,总分=专家评委平均分 *0.6+大众评委* 0.4,总分取整。 函数最终返回选手得分。
函数接口: int score(int n, int score[], int judge_type[]);
解析: 上机题目都是很简单的,但是考的就是考虑问题全面与否。
int CallScore ( int N, int * Score , int * Judge _type)
{
int ret = 0, n =0, m=0;
double sum1 =0, sum2 = 0;//评分可能出现小数,所以要用双精度
if(N&&Score&&Judge_type)
{
for(int i =0; i<N; ++i)
{
switch(Judge_type[i])
{
case 1: sum1 + = Score[i]; ++n; break;
case 2: sum2+= Score[i]; ++m; break;
default:; //舍弃不符合要求数据
}
if(n) sum1 = int (sum1/n);//考虑到专家人数可能为0,务必确保除数不为0;
if(m) sum2 = int (sum2/m);//考虑到大众评委人数可能为0,务必确保除数不为0;
ret= m?sum1*0.6+sum2*0.4:sum1;// 最后总分数去整数,要把double转换成int
}
}
return ret;
}