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.懂得在宏中 小心地 把 參數用括號括起來。(負數的存在)
總結
以上是生活随笔為你收集整理的7-20上午上机题实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 7-20上午刷题未知点集合
- 下一篇: 7-20牛客网未知点集合