搜狗2012.9.23校园招聘会笔试题
生活随笔
收集整理的這篇文章主要介紹了
搜狗2012.9.23校园招聘会笔试题
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
轉(zhuǎn)載請(qǐng)標(biāo)明出處,原文地址:http://blog.csdn.net/hackbuteer1/article/details/8016173
C/C++類
1、以下程序的輸出是(12)
class Base { public:Base(int j) : i(j) { } virtual ~Base() { }void func1(){i *= 10;func2();}int getValue(){return i;} protected:virtual void func2(){i++;} protected:int i; };class Child : public Base { public:Child(int j) : Base(j) { }void func1(){i *= 100;func2();} protected:void func2(){i += 2;} };int main(void) {Base *pb = new Child(1);pb->func1();cout<<pb->getValue()<<endl;delete pb;return 0; } 2、請(qǐng)問程序的輸出結(jié)果是(30)
#define DOUBLE(x) x+x // x*2
int i = DOUBLE(5)*5;
cout<<i<<endl;
3、寫出一下程序的輸出(死循環(huán))
int main(void) {char num;for(num = 0; num < 255; )num += num;printf("%d\n",num);return 0; } 4、程序出錯(cuò)在什么階段?()
int main(void) {http://www.sogou.comcout<<"welcome to sogou"<<endl;return 0; } A、編譯階段出錯(cuò)???? B、運(yùn)行階段出錯(cuò)???? C、編譯和運(yùn)行都出錯(cuò)????D、程序運(yùn)行正常
因?yàn)閔ttp://www.sogou.com中//后面是注釋,前面的http:是標(biāo)簽(類似于goto語句中的標(biāo)簽)。(這個(gè)題目碉堡了)
5、下面程序執(zhí)行結(jié)果為【說明:X86_64環(huán)境】(D)
int main(void) {int a[4][4] = {{1,2,3,4},{50,60,70,80},{900,1000,1100,1200},{13000,14000,15000,16000} };int (*p1)[4] = a;int (*p2)[4] = &a[0];int *p3 = &a[0][0];printf("%d %d %d %d\n",*(*(a+1)-1),*(*(p1+3)-2)+1,*(*(p2-1)+16)+2,*(p3+sizeof(p1)-3));return 0; } A、16000 1101? 13002 2
B、4? 2? 3? 60
C、16000? 2? 3? 2
D、4? 1101? 13002? 60
p1為指向一維數(shù)組的指針,所以a + 1指向{50,60,70,80}這一維的地址。減一則為4的地址;同理第二個(gè)輸出1101。同理,由于數(shù)組的列是4,所以*(p2 - 1) + 16就相當(dāng)于*(p2) + 12,所以第三個(gè)輸出13002。
第四個(gè)由于p1是指針,所以sizeof(p1)為8(68位的系統(tǒng)),所以第四個(gè)輸出60。
6、在32位操作系統(tǒng)gcc編譯器環(huán)境下,下面的程序的運(yùn)行結(jié)果是(A)
class A { public:int b;char c;virtual void print(){cout<<"this is father's function!"<<endl;} };class B : A { public:virtual void print(){cout<<"this is children's function!"<<endl;} }; int main(void) {cout<<sizeof(A)<<" "<<sizeof(A)<<endl;return 0; } A、12? 12
B、8? 8
C、9? 9
D、12? 16
7、以下哪些做法是不正確或者應(yīng)該極力避免的:【多選】(ACD)
A、構(gòu)造函數(shù)聲明為虛函數(shù)
B、派生關(guān)系中的基類析構(gòu)函數(shù)聲明為虛函數(shù)
C、構(gòu)造函數(shù)調(diào)用虛函數(shù)
D、析構(gòu)函數(shù)調(diào)用虛函數(shù)
8、關(guān)于C++標(biāo)準(zhǔn)模板庫,下列說法錯(cuò)誤的有哪些:【多選】(AD)
A、std::auto_ptr<Class A>類型的對(duì)象,可以放到std::vector<std::auto_ptr<Class A>>容器中
B、std::shared_ptr<Class A>類型的對(duì)象,可以放到std::vector<std::shared_ptr<Class A>>容器中
C、對(duì)于復(fù)雜類型T的對(duì)象tObj,++tObj和tObj++的執(zhí)行效率相比,前者更高
D、采用new操作符創(chuàng)建對(duì)象時(shí),如果沒有足夠內(nèi)存空間而導(dǎo)致創(chuàng)建失敗,則new操作符會(huì)返回NULL
A中auto是給別人東西而自己沒有了。所以不符合vector的要求。而B可以。C不解釋。new在失敗后拋出標(biāo)準(zhǔn)異常std::bad_alloc而不是返回NULL。
9、有如下幾個(gè)類和函數(shù)定義,選項(xiàng)中描述正確的是:【多選】(B)
class A { public:virtual void foo() { } };class B { public:virtual void foo() { } };class C : public A , public B { public:virtual void foo() { } };void bar1(A *pa) {B *pc = dynamic_cast<B*>(pa); }void bar2(A *pa) {B *pc = static_cast<B*>(pa); }void bar3() {C c;A *pa = &c;B *pb = static_cast<B*>(static_cast<C*>(pa)); } A、bar1無法通過編譯
B、bar2無法通過編譯
C、bar3無法通過編譯
D、bar1可以正常運(yùn)行,但是采用了錯(cuò)誤的cast方法
選B。dynamic_cast是在運(yùn)行時(shí)遍歷繼承樹,所以,在編譯時(shí)不會(huì)報(bào)錯(cuò)。但是因?yàn)锳和B沒啥關(guān)系,所以運(yùn)行時(shí)報(bào)錯(cuò)(所以A和D都是錯(cuò)誤的)。static_cast:編譯器隱式執(zhí)行的任何類型轉(zhuǎn)換都可由它顯示完成。其中對(duì)于:(1)基本類型。如可以將int轉(zhuǎn)換為double(編譯器會(huì)執(zhí)行隱式轉(zhuǎn)換),但是不能將int*用它轉(zhuǎn)換到double*(沒有此隱式轉(zhuǎn)換)。(2)對(duì)于用戶自定義類型,如果兩個(gè)類無關(guān),則會(huì)出錯(cuò)(所以B正確),如果存在繼承關(guān)系,則可以在基類和派生類之間進(jìn)行任何轉(zhuǎn)型,在編譯期間不會(huì)出錯(cuò)。所以bar3可以通過編譯(C選項(xiàng)是錯(cuò)誤的)。
10、在Intel CPU上,以下多線程對(duì)int型變量x的操作,哪幾個(gè)不是原子操作,假定變量的地址都是對(duì)齊的。【多選】(ABC)
A、x = y?? B、x++???? C、++x???? D、x = 1
看下在VC++6.0下的匯編命令即可:從圖可以看出本題只有D選項(xiàng)才是原子操作。
11、一般情況下,下面哪些操作會(huì)執(zhí)行失敗?【多選】(BCD)
class A { public:string a;void f1(){printf("Hello World");}void f2(){a = "Hello World";printf("%s",a.c_str());}virtual void f3(){printf("Hello World");}virtual void f4(){a = "Hello World";printf("%s",a.c_str());} }; A、A *aptr = NULL;? aptr->f1();
B、A *aptr = NULL;? aptr->f2();
C、A *aptr = NULL;? aptr->f3();
D、A *aptr = NULL;? aptr->f4();
至于A為什么正確,因?yàn)锳沒有使用任何成員變量,而成員函數(shù)是不屬于對(duì)象的,所以A正確。其實(shí),A* aptr = NULL;aptr->f5();也是正確的,因?yàn)殪o態(tài)成員也是不屬于任何對(duì)象的。至于BCD,在B中使用了成員變量,而成員變量只能存在于對(duì)象,C有虛表指針,所以也只存在于對(duì)象中。D就更是一樣了。但是,如果在Class A中沒有寫public,那么就全都是private,以至于所有的選項(xiàng)都將會(huì)失敗。
12、C++下,下面哪些template實(shí)例化使用,會(huì)引起編譯錯(cuò)誤?【多選】(CEF)
template<class Type> class stack; void fi(stack<char>); //A class Ex {stack<double> &rs; //Bstack<int> si; //C };int main(void) {stack<char> *sc; //Dfi(*sc); //Eint i = sizeof(stack<string>); //Freturn 0; } 選C E F;? 請(qǐng)注意stack和fi都只是聲明不是定義。我還以為在此處申明后,會(huì)在其他地方定義呢,坑爹啊。
由于stack只是聲明,所以C是錯(cuò)誤的,stack不能定義對(duì)象。E也是一樣,stack只是申明,所以不能執(zhí)行拷貝構(gòu)造函數(shù),至于F,由于stack只是聲明,不知道stack的大小,所以錯(cuò)誤。如果stack定義了,將全是正確的。
13、以下哪個(gè)說法正確()
int func() {char b[2]={0};strcpy(b,"aaa"); } A、Debug版崩潰,Release版正常
B、Debug版正常,Release版崩潰
C、Debug版崩潰,Release版崩潰
D、Debug版正常,Release版正常
選A。因?yàn)樵贒ebug中有ASSERT斷言保護(hù),所以要崩潰,而在Release中就會(huì)刪掉ASSERT,所以會(huì)出現(xiàn)正常運(yùn)行。但是不推薦如此做,因?yàn)檫@樣會(huì)覆蓋不屬于自己的內(nèi)存,這是搭上了程序崩潰的列車。
數(shù)據(jù)結(jié)構(gòu)類
37、每份考卷都有一個(gè)8位二進(jìn)制序列號(hào),當(dāng)且僅當(dāng)一個(gè)序列號(hào)含有偶數(shù)個(gè)1時(shí),它才是有效的。例如:00000000 01010011 都是有效的序列號(hào),而11111110不是,那么有效的序列號(hào)共有(128)個(gè)。
38、對(duì)初始狀態(tài)為遞增序列的數(shù)組按遞增順序排序,最省時(shí)間的是插入排序算法,最費(fèi)時(shí)間的算法(B)
A、堆排序? B、快速排序?? C、插入排序?? D、歸并排序
39、下圖為一個(gè)二叉樹,請(qǐng)選出以下不是遍歷二叉樹產(chǎn)生的順序序列的選項(xiàng)【多選】(BD)
A、ABCDEFIGJH
B、BDCAIJGHFE
C、BDCAIFJGHE
D、DCBJHGIFEA
40、在有序雙向鏈表中定位刪除一個(gè)元素的平均時(shí)間復(fù)雜度為()
A、O(1)?? B、O(N)?? C、O(logN)????? D、O(N*logN)
41、將10階對(duì)稱矩陣壓縮存儲(chǔ)到一維數(shù)組A中,則數(shù)組A的長度最少為()
A、100???? B、40???? C、55????? D、80
42、將數(shù)組a[]作為循環(huán)隊(duì)列SQ的存儲(chǔ)空間,f為隊(duì)頭指示,r為隊(duì)尾指示,則執(zhí)行出隊(duì)操作的語句為(B)
A、f = f+1???? B、f = (f+1)%m????? C、r = (r+1)%m???? D、f = (f+1)%(m+1)
43、以下哪種操作最適合先進(jìn)行排序處理?
A、找最大、最小值?? B、計(jì)算算出平均值?? C、找中間值? D、找出現(xiàn)次數(shù)最多的值
44、設(shè)有一個(gè)二維數(shù)組A[m][n],假設(shè)A[0][0]存放位置在644(10),A[2][2]存放位置在676(10),每個(gè)元元素占一個(gè)空間,問A[3][3]存放在什么位置?(C)腳注(10)表示用10進(jìn)制表示
A、688???? B、678???? C、692???? D、696
45、使用下列二維圖形變換矩陣A=T*a,將產(chǎn)生的變換結(jié)果為(D)
A、圖形放大2倍
B、圖形放大2倍,同時(shí)沿X、Y坐標(biāo)軸方向各移動(dòng)一個(gè)單位
C、沿X坐標(biāo)軸方向各移動(dòng)2個(gè)單位
D、沿X坐標(biāo)軸放大2倍,同時(shí)沿X、Y坐標(biāo)軸方向各移動(dòng)一個(gè)單位
46、體育課的鈴聲響了,同學(xué)們都陸續(xù)地奔向操場(chǎng),按老師 的要求從高到矮站成一排。每個(gè)同學(xué)按順序來到操場(chǎng)時(shí),都從排尾走向排頭,找到第一個(gè)比自己高的同學(xué),并站到他的后面,這種站隊(duì)的方法類似于()算法。
A、快速排序????? B、插入排序????? C、冒泡排序??? D、歸并排序
47、處理a.html文件時(shí),以下哪行偽代碼可能導(dǎo)致內(nèi)存越界或者拋出異常(B)
???????? int totalBlank = 0;
???????? int blankNum = 0;
???????? int taglen = page.taglst.size();
A?????? for(int i = 1; i < taglen-1; ++i)
??????? {
?? ????????????? //check blank
B?? ????????? while(page.taglst[i] == "<br>" && i < taglen)
?? ??????????? {
C?? ??? ??????????????? ++totalBlank;
D?? ??? ??????????????? ++i;
?? ??????????? }
E?? ????????? if(totalBlank > 10)
F?? ??? ?????????????? blankNum += totalBlank;
G?? ??? ? ??? totalBlank = 0;
??????? }
注意:以下代碼中taglen是html文件中存在元素的個(gè)數(shù),a.html中taglen的值是15,page.taglst[i]取的是a.html中的元素,例如page.taglst[1]的值是<html>
a.html 的文件如下:
<html>
<title>test</title>
<body>
<div>aaaaaaa</div>
</body>
</html>
<br>
<br>
<br>
<br>
<br>
48、對(duì)一個(gè)有向圖而言,如果每個(gè)節(jié)點(diǎn)都存在到達(dá)其他任何節(jié)點(diǎn)的路徑,那么就稱它是強(qiáng)連通的。例如,右圖就是一個(gè)強(qiáng)連通圖,事實(shí)上,在刪掉哪幾條邊后,它依然是強(qiáng)連通的。(A)
A、a?????? B、b??????? C、c???????????? D、d
100、一種計(jì)算機(jī),其有如下原子功能:
1、賦值?? a=b
2、+1操作,++a; a+1;
3、循環(huán),但是只支持按次數(shù)的循環(huán)?? for(變量名){/*循環(huán)里面對(duì)變量的修改不影響循環(huán)次數(shù)*/}
4、只能處理0和正整數(shù)
5、函數(shù)調(diào)用??? fun(參數(shù)列表)
請(qǐng)用偽代碼的形式分別在這個(gè)計(jì)算機(jī)上編程實(shí)現(xiàn)變量的加法、減法、乘法。
fun_add(a , b)
{
}
fun_multi(a , b)
{
}
fun_minus(a , b)
{
}
問題的關(guān)鍵在于如何實(shí)現(xiàn)自減一操作。
本來讓-1自增n次即可實(shí)現(xiàn)n的自減的,但系統(tǒng)偏偏又不支持負(fù)數(shù)。
fun_add(a , b) {result = a;for(b)++result;return result; }fun_muti(a , b) {result = 0;for(b)result = fun_add(result , a);return result; }dec(int n) {temp = 0;result = 0;for(n){result = temp; //result永遠(yuǎn)比temp少1,巧妙地減少了一次自增++temp;}return result; } /* 上面的dec這段函數(shù)代碼執(zhí)行后,result的值將變?yōu)閚-1。注意到這段代碼在自增時(shí)是如何巧妙地延遲了一步的。 現(xiàn)在,我們相當(dāng)于有了自減一的函數(shù)dec。實(shí)現(xiàn)a-b只需要令a自減b次即可 */ fun_minus(a , b) {result = a;for(b)result = dec(result); }
101、實(shí)現(xiàn)一個(gè)隊(duì)鏈表排序的算法,C/C++可以使用std::list<int>,Java使用LinkedList<Integer>
要求先描述算法,然后再實(shí)現(xiàn),算法效率盡可能高效。
主要考察鏈表的歸并排序。
要點(diǎn):需要使用快、慢指針的方法,找到鏈表的的中間節(jié)點(diǎn),然后進(jìn)行二路歸并排序
typedef struct LNode {int data;struct LNode *next; }LNode , *LinkList;// 對(duì)兩個(gè)有序的鏈表進(jìn)行遞歸的歸并 LinkList MergeList_recursive(LinkList head1 , LinkList head2) {LinkList result;if(head1 == NULL)return head2;if(head2 == NULL)return head1;if(head1->data < head2->data){result = head1;result->next = MergeList_recursive(head1->next , head2);}else{result = head2;result->next = MergeList_recursive(head1 , head2->next);}return result; }// 對(duì)兩個(gè)有序的鏈表進(jìn)行非遞歸的歸并 LinkList MergeList(LinkList head1 , LinkList head2) {LinkList head , result = NULL;if(head1 == NULL)return head2;if(head2 == NULL)return head1;while(head1 && head2){if(head1->data < head2->data){if(result == NULL){head = result = head1;head1 = head1->next;}else{result->next = head1;result = head1;head1 = head1->next;}}else{if(result == NULL){head = result = head2;head2 = head2->next;}else{result->next = head2;result = head2;head2 = head2->next;}}}if(head1)result->next = head1;if(head2)result->next = head2;return head; }// 歸并排序,參數(shù)為要排序的鏈表的頭結(jié)點(diǎn),函數(shù)返回值為排序后的鏈表的頭結(jié)點(diǎn) LinkList MergeSort(LinkList head) {if(head == NULL)return NULL;LinkList r_head , slow , fast;r_head = slow = fast = head;// 找鏈表中間節(jié)點(diǎn)的兩種方法/*while(fast->next != NULL){if(fast->next->next != NULL){slow = slow->next;fast = fast->next->next;}elsefast = fast->next;}*/while(fast->next != NULL && fast->next->next != NULL){slow = slow->next;fast = fast->next->next;}if(slow->next == NULL) // 鏈表中只有一個(gè)節(jié)點(diǎn)return r_head;fast = slow->next;slow->next = NULL;slow = head;// 函數(shù)MergeList是對(duì)兩個(gè)有序鏈表進(jìn)行歸并,返回值是歸并后的鏈表的頭結(jié)點(diǎn)//r_head = MergeList_recursive(MergeSort(slow) , MergeSort(fast));r_head = MergeList(MergeSort(slow) , MergeSort(fast));return r_head; }
轉(zhuǎn)載請(qǐng)標(biāo)明出處,原文地址:http://blog.csdn.net/hackbuteer1/article/details/8016173
C/C++類
1、以下程序的輸出是(12)
class Base { public:Base(int j) : i(j) { } virtual ~Base() { }void func1(){i *= 10;func2();}int getValue(){return i;} protected:virtual void func2(){i++;} protected:int i; };class Child : public Base { public:Child(int j) : Base(j) { }void func1(){i *= 100;func2();} protected:void func2(){i += 2;} };int main(void) {Base *pb = new Child(1);pb->func1();cout<<pb->getValue()<<endl;delete pb;return 0; } 2、請(qǐng)問程序的輸出結(jié)果是(30)
#define DOUBLE(x) x+x // x*2
int i = DOUBLE(5)*5;
cout<<i<<endl;
3、寫出一下程序的輸出(死循環(huán))
int main(void) {char num;for(num = 0; num < 255; )num += num;printf("%d\n",num);return 0; } 4、程序出錯(cuò)在什么階段?()
int main(void) {http://www.sogou.comcout<<"welcome to sogou"<<endl;return 0; } A、編譯階段出錯(cuò)???? B、運(yùn)行階段出錯(cuò)???? C、編譯和運(yùn)行都出錯(cuò)????D、程序運(yùn)行正常
因?yàn)閔ttp://www.sogou.com中//后面是注釋,前面的http:是標(biāo)簽(類似于goto語句中的標(biāo)簽)。(這個(gè)題目碉堡了)
5、下面程序執(zhí)行結(jié)果為【說明:X86_64環(huán)境】(D)
int main(void) {int a[4][4] = {{1,2,3,4},{50,60,70,80},{900,1000,1100,1200},{13000,14000,15000,16000} };int (*p1)[4] = a;int (*p2)[4] = &a[0];int *p3 = &a[0][0];printf("%d %d %d %d\n",*(*(a+1)-1),*(*(p1+3)-2)+1,*(*(p2-1)+16)+2,*(p3+sizeof(p1)-3));return 0; } A、16000 1101? 13002 2
B、4? 2? 3? 60
C、16000? 2? 3? 2
D、4? 1101? 13002? 60
p1為指向一維數(shù)組的指針,所以a + 1指向{50,60,70,80}這一維的地址。減一則為4的地址;同理第二個(gè)輸出1101。同理,由于數(shù)組的列是4,所以*(p2 - 1) + 16就相當(dāng)于*(p2) + 12,所以第三個(gè)輸出13002。
第四個(gè)由于p1是指針,所以sizeof(p1)為8(68位的系統(tǒng)),所以第四個(gè)輸出60。
6、在32位操作系統(tǒng)gcc編譯器環(huán)境下,下面的程序的運(yùn)行結(jié)果是(A)
class A { public:int b;char c;virtual void print(){cout<<"this is father's function!"<<endl;} };class B : A { public:virtual void print(){cout<<"this is children's function!"<<endl;} }; int main(void) {cout<<sizeof(A)<<" "<<sizeof(A)<<endl;return 0; } A、12? 12
B、8? 8
C、9? 9
D、12? 16
7、以下哪些做法是不正確或者應(yīng)該極力避免的:【多選】(ACD)
A、構(gòu)造函數(shù)聲明為虛函數(shù)
B、派生關(guān)系中的基類析構(gòu)函數(shù)聲明為虛函數(shù)
C、構(gòu)造函數(shù)調(diào)用虛函數(shù)
D、析構(gòu)函數(shù)調(diào)用虛函數(shù)
8、關(guān)于C++標(biāo)準(zhǔn)模板庫,下列說法錯(cuò)誤的有哪些:【多選】(AD)
A、std::auto_ptr<Class A>類型的對(duì)象,可以放到std::vector<std::auto_ptr<Class A>>容器中
B、std::shared_ptr<Class A>類型的對(duì)象,可以放到std::vector<std::shared_ptr<Class A>>容器中
C、對(duì)于復(fù)雜類型T的對(duì)象tObj,++tObj和tObj++的執(zhí)行效率相比,前者更高
D、采用new操作符創(chuàng)建對(duì)象時(shí),如果沒有足夠內(nèi)存空間而導(dǎo)致創(chuàng)建失敗,則new操作符會(huì)返回NULL
A中auto是給別人東西而自己沒有了。所以不符合vector的要求。而B可以。C不解釋。new在失敗后拋出標(biāo)準(zhǔn)異常std::bad_alloc而不是返回NULL。
9、有如下幾個(gè)類和函數(shù)定義,選項(xiàng)中描述正確的是:【多選】(B)
class A { public:virtual void foo() { } };class B { public:virtual void foo() { } };class C : public A , public B { public:virtual void foo() { } };void bar1(A *pa) {B *pc = dynamic_cast<B*>(pa); }void bar2(A *pa) {B *pc = static_cast<B*>(pa); }void bar3() {C c;A *pa = &c;B *pb = static_cast<B*>(static_cast<C*>(pa)); } A、bar1無法通過編譯
B、bar2無法通過編譯
C、bar3無法通過編譯
D、bar1可以正常運(yùn)行,但是采用了錯(cuò)誤的cast方法
選B。dynamic_cast是在運(yùn)行時(shí)遍歷繼承樹,所以,在編譯時(shí)不會(huì)報(bào)錯(cuò)。但是因?yàn)锳和B沒啥關(guān)系,所以運(yùn)行時(shí)報(bào)錯(cuò)(所以A和D都是錯(cuò)誤的)。static_cast:編譯器隱式執(zhí)行的任何類型轉(zhuǎn)換都可由它顯示完成。其中對(duì)于:(1)基本類型。如可以將int轉(zhuǎn)換為double(編譯器會(huì)執(zhí)行隱式轉(zhuǎn)換),但是不能將int*用它轉(zhuǎn)換到double*(沒有此隱式轉(zhuǎn)換)。(2)對(duì)于用戶自定義類型,如果兩個(gè)類無關(guān),則會(huì)出錯(cuò)(所以B正確),如果存在繼承關(guān)系,則可以在基類和派生類之間進(jìn)行任何轉(zhuǎn)型,在編譯期間不會(huì)出錯(cuò)。所以bar3可以通過編譯(C選項(xiàng)是錯(cuò)誤的)。
10、在Intel CPU上,以下多線程對(duì)int型變量x的操作,哪幾個(gè)不是原子操作,假定變量的地址都是對(duì)齊的。【多選】(ABC)
A、x = y?? B、x++???? C、++x???? D、x = 1
看下在VC++6.0下的匯編命令即可:從圖可以看出本題只有D選項(xiàng)才是原子操作。
11、一般情況下,下面哪些操作會(huì)執(zhí)行失敗?【多選】(BCD)
class A { public:string a;void f1(){printf("Hello World");}void f2(){a = "Hello World";printf("%s",a.c_str());}virtual void f3(){printf("Hello World");}virtual void f4(){a = "Hello World";printf("%s",a.c_str());} }; A、A *aptr = NULL;? aptr->f1();
B、A *aptr = NULL;? aptr->f2();
C、A *aptr = NULL;? aptr->f3();
D、A *aptr = NULL;? aptr->f4();
至于A為什么正確,因?yàn)锳沒有使用任何成員變量,而成員函數(shù)是不屬于對(duì)象的,所以A正確。其實(shí),A* aptr = NULL;aptr->f5();也是正確的,因?yàn)殪o態(tài)成員也是不屬于任何對(duì)象的。至于BCD,在B中使用了成員變量,而成員變量只能存在于對(duì)象,C有虛表指針,所以也只存在于對(duì)象中。D就更是一樣了。但是,如果在Class A中沒有寫public,那么就全都是private,以至于所有的選項(xiàng)都將會(huì)失敗。
12、C++下,下面哪些template實(shí)例化使用,會(huì)引起編譯錯(cuò)誤?【多選】(CEF)
template<class Type> class stack; void fi(stack<char>); //A class Ex {stack<double> &rs; //Bstack<int> si; //C };int main(void) {stack<char> *sc; //Dfi(*sc); //Eint i = sizeof(stack<string>); //Freturn 0; } 選C E F;? 請(qǐng)注意stack和fi都只是聲明不是定義。我還以為在此處申明后,會(huì)在其他地方定義呢,坑爹啊。
由于stack只是聲明,所以C是錯(cuò)誤的,stack不能定義對(duì)象。E也是一樣,stack只是申明,所以不能執(zhí)行拷貝構(gòu)造函數(shù),至于F,由于stack只是聲明,不知道stack的大小,所以錯(cuò)誤。如果stack定義了,將全是正確的。
13、以下哪個(gè)說法正確()
int func() {char b[2]={0};strcpy(b,"aaa"); } A、Debug版崩潰,Release版正常
B、Debug版正常,Release版崩潰
C、Debug版崩潰,Release版崩潰
D、Debug版正常,Release版正常
選A。因?yàn)樵贒ebug中有ASSERT斷言保護(hù),所以要崩潰,而在Release中就會(huì)刪掉ASSERT,所以會(huì)出現(xiàn)正常運(yùn)行。但是不推薦如此做,因?yàn)檫@樣會(huì)覆蓋不屬于自己的內(nèi)存,這是搭上了程序崩潰的列車。
數(shù)據(jù)結(jié)構(gòu)類
37、每份考卷都有一個(gè)8位二進(jìn)制序列號(hào),當(dāng)且僅當(dāng)一個(gè)序列號(hào)含有偶數(shù)個(gè)1時(shí),它才是有效的。例如:00000000 01010011 都是有效的序列號(hào),而11111110不是,那么有效的序列號(hào)共有(128)個(gè)。
38、對(duì)初始狀態(tài)為遞增序列的數(shù)組按遞增順序排序,最省時(shí)間的是插入排序算法,最費(fèi)時(shí)間的算法(B)
A、堆排序? B、快速排序?? C、插入排序?? D、歸并排序
39、下圖為一個(gè)二叉樹,請(qǐng)選出以下不是遍歷二叉樹產(chǎn)生的順序序列的選項(xiàng)【多選】(BD)
A、ABCDEFIGJH
B、BDCAIJGHFE
C、BDCAIFJGHE
D、DCBJHGIFEA
40、在有序雙向鏈表中定位刪除一個(gè)元素的平均時(shí)間復(fù)雜度為()
A、O(1)?? B、O(N)?? C、O(logN)????? D、O(N*logN)
41、將10階對(duì)稱矩陣壓縮存儲(chǔ)到一維數(shù)組A中,則數(shù)組A的長度最少為()
A、100???? B、40???? C、55????? D、80
42、將數(shù)組a[]作為循環(huán)隊(duì)列SQ的存儲(chǔ)空間,f為隊(duì)頭指示,r為隊(duì)尾指示,則執(zhí)行出隊(duì)操作的語句為(B)
A、f = f+1???? B、f = (f+1)%m????? C、r = (r+1)%m???? D、f = (f+1)%(m+1)
43、以下哪種操作最適合先進(jìn)行排序處理?
A、找最大、最小值?? B、計(jì)算算出平均值?? C、找中間值? D、找出現(xiàn)次數(shù)最多的值
44、設(shè)有一個(gè)二維數(shù)組A[m][n],假設(shè)A[0][0]存放位置在644(10),A[2][2]存放位置在676(10),每個(gè)元元素占一個(gè)空間,問A[3][3]存放在什么位置?(C)腳注(10)表示用10進(jìn)制表示
A、688???? B、678???? C、692???? D、696
45、使用下列二維圖形變換矩陣A=T*a,將產(chǎn)生的變換結(jié)果為(D)
A、圖形放大2倍
B、圖形放大2倍,同時(shí)沿X、Y坐標(biāo)軸方向各移動(dòng)一個(gè)單位
C、沿X坐標(biāo)軸方向各移動(dòng)2個(gè)單位
D、沿X坐標(biāo)軸放大2倍,同時(shí)沿X、Y坐標(biāo)軸方向各移動(dòng)一個(gè)單位
46、體育課的鈴聲響了,同學(xué)們都陸續(xù)地奔向操場(chǎng),按老師 的要求從高到矮站成一排。每個(gè)同學(xué)按順序來到操場(chǎng)時(shí),都從排尾走向排頭,找到第一個(gè)比自己高的同學(xué),并站到他的后面,這種站隊(duì)的方法類似于()算法。
A、快速排序????? B、插入排序????? C、冒泡排序??? D、歸并排序
47、處理a.html文件時(shí),以下哪行偽代碼可能導(dǎo)致內(nèi)存越界或者拋出異常(B)
???????? int totalBlank = 0;
???????? int blankNum = 0;
???????? int taglen = page.taglst.size();
A?????? for(int i = 1; i < taglen-1; ++i)
??????? {
?? ????????????? //check blank
B?? ????????? while(page.taglst[i] == "<br>" && i < taglen)
?? ??????????? {
C?? ??? ??????????????? ++totalBlank;
D?? ??? ??????????????? ++i;
?? ??????????? }
E?? ????????? if(totalBlank > 10)
F?? ??? ?????????????? blankNum += totalBlank;
G?? ??? ? ??? totalBlank = 0;
??????? }
注意:以下代碼中taglen是html文件中存在元素的個(gè)數(shù),a.html中taglen的值是15,page.taglst[i]取的是a.html中的元素,例如page.taglst[1]的值是<html>
a.html 的文件如下:
<html>
<title>test</title>
<body>
<div>aaaaaaa</div>
</body>
</html>
<br>
<br>
<br>
<br>
<br>
48、對(duì)一個(gè)有向圖而言,如果每個(gè)節(jié)點(diǎn)都存在到達(dá)其他任何節(jié)點(diǎn)的路徑,那么就稱它是強(qiáng)連通的。例如,右圖就是一個(gè)強(qiáng)連通圖,事實(shí)上,在刪掉哪幾條邊后,它依然是強(qiáng)連通的。(A)
A、a?????? B、b??????? C、c???????????? D、d
100、一種計(jì)算機(jī),其有如下原子功能:
1、賦值?? a=b
2、+1操作,++a; a+1;
3、循環(huán),但是只支持按次數(shù)的循環(huán)?? for(變量名){/*循環(huán)里面對(duì)變量的修改不影響循環(huán)次數(shù)*/}
4、只能處理0和正整數(shù)
5、函數(shù)調(diào)用??? fun(參數(shù)列表)
請(qǐng)用偽代碼的形式分別在這個(gè)計(jì)算機(jī)上編程實(shí)現(xiàn)變量的加法、減法、乘法。
fun_add(a , b)
{
}
fun_multi(a , b)
{
}
fun_minus(a , b)
{
}
問題的關(guān)鍵在于如何實(shí)現(xiàn)自減一操作。
本來讓-1自增n次即可實(shí)現(xiàn)n的自減的,但系統(tǒng)偏偏又不支持負(fù)數(shù)。
fun_add(a , b) {result = a;for(b)++result;return result; }fun_muti(a , b) {result = 0;for(b)result = fun_add(result , a);return result; }dec(int n) {temp = 0;result = 0;for(n){result = temp; //result永遠(yuǎn)比temp少1,巧妙地減少了一次自增++temp;}return result; } /* 上面的dec這段函數(shù)代碼執(zhí)行后,result的值將變?yōu)閚-1。注意到這段代碼在自增時(shí)是如何巧妙地延遲了一步的。 現(xiàn)在,我們相當(dāng)于有了自減一的函數(shù)dec。實(shí)現(xiàn)a-b只需要令a自減b次即可 */ fun_minus(a , b) {result = a;for(b)result = dec(result); }
101、實(shí)現(xiàn)一個(gè)隊(duì)鏈表排序的算法,C/C++可以使用std::list<int>,Java使用LinkedList<Integer>
要求先描述算法,然后再實(shí)現(xiàn),算法效率盡可能高效。
主要考察鏈表的歸并排序。
要點(diǎn):需要使用快、慢指針的方法,找到鏈表的的中間節(jié)點(diǎn),然后進(jìn)行二路歸并排序
typedef struct LNode {int data;struct LNode *next; }LNode , *LinkList;// 對(duì)兩個(gè)有序的鏈表進(jìn)行遞歸的歸并 LinkList MergeList_recursive(LinkList head1 , LinkList head2) {LinkList result;if(head1 == NULL)return head2;if(head2 == NULL)return head1;if(head1->data < head2->data){result = head1;result->next = MergeList_recursive(head1->next , head2);}else{result = head2;result->next = MergeList_recursive(head1 , head2->next);}return result; }// 對(duì)兩個(gè)有序的鏈表進(jìn)行非遞歸的歸并 LinkList MergeList(LinkList head1 , LinkList head2) {LinkList head , result = NULL;if(head1 == NULL)return head2;if(head2 == NULL)return head1;while(head1 && head2){if(head1->data < head2->data){if(result == NULL){head = result = head1;head1 = head1->next;}else{result->next = head1;result = head1;head1 = head1->next;}}else{if(result == NULL){head = result = head2;head2 = head2->next;}else{result->next = head2;result = head2;head2 = head2->next;}}}if(head1)result->next = head1;if(head2)result->next = head2;return head; }// 歸并排序,參數(shù)為要排序的鏈表的頭結(jié)點(diǎn),函數(shù)返回值為排序后的鏈表的頭結(jié)點(diǎn) LinkList MergeSort(LinkList head) {if(head == NULL)return NULL;LinkList r_head , slow , fast;r_head = slow = fast = head;// 找鏈表中間節(jié)點(diǎn)的兩種方法/*while(fast->next != NULL){if(fast->next->next != NULL){slow = slow->next;fast = fast->next->next;}elsefast = fast->next;}*/while(fast->next != NULL && fast->next->next != NULL){slow = slow->next;fast = fast->next->next;}if(slow->next == NULL) // 鏈表中只有一個(gè)節(jié)點(diǎn)return r_head;fast = slow->next;slow->next = NULL;slow = head;// 函數(shù)MergeList是對(duì)兩個(gè)有序鏈表進(jìn)行歸并,返回值是歸并后的鏈表的頭結(jié)點(diǎn)//r_head = MergeList_recursive(MergeSort(slow) , MergeSort(fast));r_head = MergeList(MergeSort(slow) , MergeSort(fast));return r_head; }
轉(zhuǎn)載請(qǐng)標(biāo)明出處,原文地址:http://blog.csdn.net/hackbuteer1/article/details/8016173
總結(jié)
以上是生活随笔為你收集整理的搜狗2012.9.23校园招聘会笔试题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 搜狐2012.9.15校园招聘会笔试题
- 下一篇: Google2012.9.24校园招聘会