7-20上午上机题实现
上机题目描述:
1.
选秀节目打分,分为专家评委和大众评委,
score[]数组里面存储每个评委打的分数,judge_type[]里存储与score[]数组对应的评委类别,
judge_type==1,表示专家评委,
judge_type==2,表示大众评委,
n表示评委总数。
打分规则如下:
专家评委和大众评委的分数先分别取一个平均分(平均分取整),然后,
总分=专家评委平均分*0.6+大众评委* 0.4,总分取整。函数最终返回选手得分。
#include <iostream>
using namespace std;
int result(int *score, int * type , int n)
{
int i;
double sum1 = 0.0 ,sum2 = 0.0;//记录专家总分和大众总分
int ty1 = 0, ty2 = 0;//记录专家人数 和 大众 人数
if (n)
{
for (i = 0; i < n; i++)
{
switch (*type)
{
case 1:
sum1 += score[i]; ty1++;
break;
case 2:
sum2 += score[i]; ty2++;
break;
default:
break;
}
type++;
}
sum1 = (int)sum1 / ty1;
sum2 = (int)sum2 / ty2;
}
int ret = 0;
ret = (sum1 * 0.6 + sum2 * 0.4);
return ret;
}
int main()
{
int score[5] = {77,89,65,78,90};
int type[5] = {1,2,1,2,1};
int n = 5;
//你也可以自己读入数据,这里我简单实现一下
cout << result(score, type, n) << endl;;
cin.get();
return 0;
}
2.
用预处理指令#define声明一个常数,用以表明1年中有多少秒(忽略闰年问题)
#include <iostream>
#define SECONDS_PER_YEAR 365 * 24 * 60 * 60
using namespace std;
int main()
{
cout << SECONDS_PER_YEAR << endl;
cin.get();
return 0;
}
解析:
通过这道题面试官想考以下几个知识点:
●#define语法的基本知识(例如,不能以分号结束,括号的使用,等等)。
●要懂得预处理器将为你计算常数表达式的值,因此,写出你是如何计算一年中有多少秒而不是计算出实际的值,会更有意义。
●意识到这个表达式将使一个16位机的整型数溢出,因此要用到长整型符号L,告诉编译器这个常数是长整型数。
如果在表达式中用到UL(表示无符号长整型),那么你就有了一个好的起点。记住, 第一印象很重要。
#define SECONDS_PER_YEAR (365 * 24 * 60 * 60)UL
但是在vs中这样会报错,无法输出SECONDS_PER_YEAR
原因呢?
来到VM测试一下
1.
#define SECONDS_PER_YEAR 365 * 24 * 60 * 60
那用这个会报错吗?试一下
#define SECONDS_PER_YEAR (365 * 24 * 60 * 60)UL
这解析有误吧,绝望。 还是老老实实用 365 * 24 * 60 * 60 啊哈哈
3.
写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个。
#include <iostream>
#define MIN(x,y) ((x) > (y) ? (y) : (x))
using namespace std;
int main()
{
cout << MIN(-3, 5) << endl;
cin.get();
return 0;
}
解析:
1.三重条件操作符的知识。这个操作符存在C语言中的原因是它使得编译器能产生比
if-then-else更优化的代码,了解这个用法是很重要的。
2.懂得在宏中 小心地 把 参数用括号括起来。(负数的存在)