- 相關(guān)推薦
搜狗2017C++筆試題
搜狗2017C++筆試題有哪些呢?以下是CN人才網(wǎng)小編為大家整理的搜狗2017C++筆試題,歡迎閱讀參考。
1.關(guān)于重載和多態(tài)正確的是?
A.如果父類和子類都有相同的方法,參數(shù)個數(shù)不同,將子類對象賦給父類后,由于子類繼承于父類,所以使用父類指針調(diào)用父類方法時,實際調(diào)用的是子類的方法;
B.選項全部都不正確
C.重載和多態(tài)在C++面向?qū)ο缶幊讨薪?jīng)常用到的方法,都只在實現(xiàn)子類的方法時才會使用
D.
class A{
void test(floata){cout<<"1";}
};
class B:public A{
void test(intb){cout<<"2";}
};
A *a=new A;
B *b=new B;
a=b;
a.test(1.1);
結(jié)果是1
解析:A中由于沒有說明使用虛函數(shù),使程序有多態(tài)性,所以實際是調(diào)用父類的方法;
C中重載在一般函數(shù)中也會使用;
D中,題目有2個錯誤,class A中,需添加成員函數(shù)的Public訪問屬性,否則在類外不能訪問成員函數(shù),并且指針對象的訪問方式只能使用間接訪問方式,即a->test(1.1)或者(*a).test(1.1),同樣,由于沒有多態(tài)性,輸出結(jié)果為1,若class A中test函數(shù)為virtual,則輸出2
2.現(xiàn)有兩堆硬幣,小明和小亮玩游戲,每次每人只能從其中一堆中取走1個或2個硬幣,最后將硬幣取完者算作勝利,當(dāng)兩堆硬幣的個數(shù)分別是12,13時,小明應(yīng)該如何安排策略才能必定獲得勝利?
A.安排小亮先取硬幣;
B.小明或小亮均一定必勝
C.安排自己先取硬幣
D.不可能必勝
解析:很好理解,小明先從13個里面取出一個,剩下12個,以后的取法就是:無論小亮每次取多少個,自己都從另外一堆中取相同的個數(shù),則可保證自己會取勝,因為兩堆都是12個。
3.不考慮任何編譯器優(yōu)化(如:NRVO),下述代碼的第10行會發(fā)生
#include //1
class B//2
{//3
};//4
B func(const B& rhs){//5
return rhs;//6
}//7
int main(int argc,char **argv){//8
B b1,b2;//9
b2=func(b1);//10
}//11
A.一次默認構(gòu)造函數(shù),一次拷貝構(gòu)造函數(shù),一次析構(gòu)函數(shù),一次(拷貝賦值運算符)operator=
B.二次拷貝構(gòu)造函數(shù),一次析構(gòu)函數(shù)
C.一次(拷貝賦值運算符)operator=,一次析構(gòu)函數(shù)
D.一次拷貝構(gòu)造函數(shù),一次析構(gòu)函數(shù),一次(拷貝賦值運算符)operator=
解析:b2=func(b1),首先b1作為形參傳遞到const B& rhs,會發(fā)生拷貝構(gòu)造函數(shù),然后fun函數(shù)結(jié)束時發(fā)生析構(gòu)函數(shù),最后是operator=,賦值給b2.
4.下面代碼的輸出結(jié)果是()
int main(){
int pid;
int num=1;
pid=fork();
if(pid>0){
num++;
printf("in parent:num:%daddr:%x\n",num,&num);
}
else if(pid==0){
printf("in child:num:%daddr:%x\n",num,&num);
}
A.父子進程中輸出的num相同,num地址不相同
B.父子進程中輸出的num不同,num地址相同
C.父子進程中輸出的num相同,num地址也相同
D.父子進程中輸出的num不同,num地址不相同
5.關(guān)于以下代碼中的變量在內(nèi)存中的存儲位置描述不正確的是()
int a=0;
class someClass{
int b;
static int c;
};
int main(){
int d=0;
someClass *p=new someClass();
return 0;
}
A.b存在堆區(qū)
B.c存在堆區(qū)
C.d存在棧區(qū)
D.a存在全局變量區(qū)
解析: C應(yīng)該在全局靜態(tài)區(qū)
6.以下代碼段有問題的是()
A.void func1(char *e){
char *p1;
p1=malloc(100);
sprintf(p1,error:"%s'.",e);
local_log(p1);
}
B. int func2(char *filename)
{
FILE *fp;
int key;
fp=fopen(filename,"r");
fscanf(fp,"%d",&key);
return key;
}
C.voidfunc3(char *info){
char *p,*pp;
p=malloc(100);
pp=p;
free(p);
sprintf(pp,*info:"%s'.",info);
free(pp);
}
D.選項全部都正確
解析:答案是ABC,答案是A申請了空間沒有釋放,答案B打開流沒有關(guān)閉,答案C其實指針都是一塊內(nèi)存空間,free了二次,程序會因為內(nèi)存錯誤崩潰.
7.請問該程序的輸出是多少?
#include
int main()
{
unsigned char i=7;
int j=0;
for(;i>0;i-=3)
{
++j;
}
printf("%d\n",j);
return 0;
}
A.2
B.死循環(huán)
C.173
D.172
解析:unsigned char 8位數(shù)據(jù)位,范圍0-255,
所以-2(11111110)時,溢出變成254;
同理-1(11111111)時,溢出變成255;
最后減到0時,不滿足循環(huán)條件,for停止。
剛好173次。
7 4 1 -2 ==>共4次
254 251 ... 5 2 -1 ==>共85次
255 252 ... 6 3 ==>共85-1=84次(因為3-3=0,不能進入循環(huán)了)
所以總共173次。(相減相除)
更快捷的計算方法:256*2+7=519=173*3
8.快速排序在下面哪種情況下優(yōu)勢最明顯()
A.數(shù)據(jù)有多個相同數(shù)值
B.數(shù)據(jù)基本有序
C.數(shù)據(jù)基本無序
D.數(shù)據(jù)無任何相同數(shù)值
9.下列各樹形結(jié)構(gòu)中,哪些是平衡二叉查找樹:
解析:二叉平衡查找樹:左子樹中所有節(jié)點的值小于根的值,右子樹中的所有節(jié)點的值大于根的值;左右子樹的高度之差的絕對值為0或1,選C
10.下面哪種數(shù)據(jù)結(jié)構(gòu)最適合創(chuàng)建一個優(yōu)先級隊列()
A.堆
B.雙向鏈表
C.單向鏈表
D.棧
11.某個大型的網(wǎng)絡(luò)游戲網(wǎng)站,現(xiàn)有幾億用戶,為了實時獲取前十名游戲分?jǐn)?shù)最高的玩家,使用以下哪個排序算法比較合理()
A.基數(shù)排序
B.快速排序
C.二叉排序
D.堆排序
12.有A,B,C,D,E五個字符,出現(xiàn)的頻率分別為2,5,3,3,4,由A,B,C,D,E生成的最優(yōu)二叉樹中,該樹的帶權(quán)路徑長是多少()
A35
B.49
C.39
D.45
13.從根開始按層次(第0層->第1層->第2層)遍歷一顆二叉樹,需要使用什么輔助數(shù)據(jù)結(jié)構(gòu)?()
A. heap
B.queue
C.binary tree
D.stack
14.假設(shè)MySQL數(shù)據(jù)庫表:
create table T{
k int unsigned not null auto_increment,
a date,
b varchar(24),
c int,d varchar(24),
primary key(k),unique key a_index (a DESC,b DESC),
key k1(b),key k2(c),key k3(d));
如下哪些sql語句查詢能較好的利用索引?()
A.select bfrom WHERE b like 'aaa%';
B.select a,bfrom T WHERE a='2015-10-25' ORDER BY b ASC,c ASC;
C.selecta,b,c from T WHERE a='2015-10-25' ORDER BY b ASC;
D.selecta,b,c from T WHERE a='2015-10-25' ORDER BY a,b;
15.在一個游戲的任務(wù)中,玩家需要進入1個山洞,取得寶石,之后回到入口.
山洞的地圖如下:
S--------------------T
S是入口
T處有寶箱,打開寶箱之后可能得到的物品有:
1)寶石,出現(xiàn)概率為5%.
2)魔法券.出現(xiàn)概率為50%.玩家每消耗一個魔法券,可以直接傳送到入口S.
3)什么也沒有,概率為45%.
S到T的距離為1.
每次玩家回到S之后,寶箱T的狀態(tài)會重置,再次進入山洞可以重新打開寶箱獲得物品.
玩家的任務(wù)是到達T獲取寶石之后回到入口S.如果到達T之后沒有獲得寶石,可以走出山洞之后再進入反復(fù)刷.
問題:玩家完成任務(wù)所走路程的數(shù)學(xué)期望是()
A.40
B.25
C.35
D.30
16.下面關(guān)于TCP的描述,錯誤的是()
A.TCP是一種面向連接的協(xié)議,給用戶進程提供可靠的全雙工的字節(jié)流
B.TCP客戶端和服務(wù)器之間建立連接需要經(jīng)過3次握手
C.只要有一方主動關(guān)閉連接后,這個TCP連接就結(jié)束了
D.只要有一方主動關(guān)閉連接后,這個TCP連接就結(jié)束了
17.關(guān)于進程和線程描述正確的是()
A.線程不擁有系統(tǒng)資源,但可以訪問隸屬于進程的資源
B.在創(chuàng)建或銷毀進程時,系統(tǒng)開銷明顯大于創(chuàng)建或銷毀線程時開銷
C.進程是調(diào)度和擁有資源的基本單位
D.不僅進程自檢可以并發(fā)執(zhí)行,同一個進程的多個進程之間也可以并發(fā)執(zhí)行
18.下面()哪個函數(shù)返回的有效句柄用完后不需要CloseHandle
A.CreateThread
B. GetCurrentProcess
C. OpenProcess
D. CreateFile
19. invalidateRect的作用是()
A.擦除一個矩形區(qū)域
B.刪除一個矩形
C.使一個矩形區(qū)域變?yōu)闊o效,從而釋放部分GDI資源
D.使一個矩形區(qū)域變?yōu)闊o效,從而可以重繪
20.典型的創(chuàng)建Windows窗口過程的流程為:()
A.注冊窗口類->創(chuàng)建窗口->更新窗口->顯示窗口->消息循環(huán)
B.創(chuàng)建窗口->注冊窗口類->顯示窗口->更新窗口->消息循環(huán)
C.注冊窗口類->創(chuàng)建窗口->顯示窗口->更新窗口->消息循環(huán)
D.創(chuàng)建窗口->注冊窗口類->更新窗口->顯示窗口->消息循環(huán)
參考答案:
1.B 2.C 3.D 4.B 5.B 6.ABC 7.C 8.C 9.C 10.A
11.D 12.C 13.B 14.AD 15.D 16.C 17.ABCD 18.B 19.D 20.C