7-20上午上机题实现

上机题目描述:

1.

选秀节目打分,分为专家评委和大众评委,

score[]数组里面存储每个评委打的分数,judge_type[]里存储与score[]数组对应的评委类别,

judge_type==1,表示专家评委,

judge_type==2,表示大众评委,

n表示评委总数。

打分规则如下:

专家评委和大众评委的分数先分别取一个平均分(平均分取整),然后,

总分=专家评委平均分*0.6+大众评委* 0.4,总分取整。函数最终返回选手得分。

 

扫描二维码关注公众号,回复: 2264880 查看本文章

#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.懂得在宏中 小心地 把 参数用括号括起来。(负数的存在)

猜你喜欢

转载自blog.csdn.net/qq_38313246/article/details/81129147