C++筆試題目-帶答案_第1頁
C++筆試題目-帶答案_第2頁
C++筆試題目-帶答案_第3頁
C++筆試題目-帶答案_第4頁
C++筆試題目-帶答案_第5頁
已閱讀5頁,還剩13頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、姓名:時(shí)間:DCCBB AADAD一、選擇題(1*10=10)1 .如果派生類以proctected方式繼承基類,則原基類的protected和public成員在 派生類的訪問性分別是:DA. public 和 publicB. public 和 protectedC. protected 和 publicD. protected 和 protected解析:通過protected方式繼承基類后,原基類的私有成員不可訪問,而protected 和public成員均變成protected成員。答案:D2. 有如下頭文件:intF1();static int F2();classs CApubli

2、c:int F3();static int F4();;在所描述的函數(shù)中,具有隱含this指針的是:CA. F1B. F2C. F3D. F4本題考查的是this指針。this指針式一個(gè)隱含的指針,它隱含于每個(gè)類的非靜態(tài)成員函數(shù)中,它明確 地表 示出了成員函數(shù)當(dāng)前操作的數(shù)據(jù)所屬的對(duì)象。當(dāng)對(duì)一個(gè)對(duì)象調(diào)用成員函數(shù)時(shí),編譯程 序先將對(duì)象的地址賦值給this指針,然后調(diào)用成員函數(shù),每次成員函數(shù)存取數(shù)據(jù)成員 時(shí),則隱含使用this指針。this指針是指向?qū)ο蟊旧淼闹羔槪淮嬖谟陬惖姆庆o態(tài)成員中。f1, f2不是成員函數(shù),不存在隱含指針;f4為靜態(tài)成員函數(shù),也不含有this指針;含有this指 針的函數(shù)

3、在調(diào)用時(shí)按thiscall調(diào)用約定調(diào)用。故本題答案為Co3. 派生類的成員函數(shù)不能訪問基類的:CA .共有成員和保護(hù)成員B .共有成員C.私有成員D .保護(hù)成員本題考查的是繼承的類型。類的繼承方式有公有繼承、保護(hù)繼承和私有繼承三種方式。對(duì)于公有繼承基類 中的成員訪問屬性不變,對(duì)于保護(hù)和私有繼承基類中的成員轉(zhuǎn)換為相應(yīng)的訪問類型。 但是如果基類成員的訪問屬性為private的,則不能被繼承。故本題答案為Co4. 按照“后進(jìn)先出”原則組織數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)是BB 棧A 隊(duì)列D二叉樹C雙向鏈表答案為Bo 5 下列關(guān)于虛函數(shù)的說明中,正確的是:BA .從虛基類繼承的函數(shù)都是虛函數(shù)B.虛函數(shù)不得是靜態(tài)成員函數(shù)

4、C.只能通過指針或者引用調(diào)用虛函數(shù)D.抽象類中的中的成員函數(shù)都是虛函數(shù)。 答案為B6. 已知Value是個(gè)類,value是Value的一個(gè)對(duì)象。下列以非成員函數(shù)形式重載的運(yùn) 算符函數(shù)原型中,正確的是:AA. Value operator+(Value v, int i);B Value operator+(Value v=value, int i);C Value operator+(Value v, int=O); D. Value operator+(Value v=value, int i=0);7. 有如下類的定義:Class MyClassint value;public:MyCla

5、ss(i nt n):value( n)int getValue() const return value;則類Myclass的構(gòu)造函數(shù)的個(gè)數(shù)是:AA. 1個(gè)B. 2個(gè)C. 3個(gè)D. 4個(gè)還有默認(rèn)拷貝構(gòu)造函數(shù),應(yīng)該選B8. 有如下類的定義:class Con sta nts public:static double GetPI(void)return 3.14159;Con sta nts con sta nts;下列各組語句中,能輸出3.14159的是:bA. cout«constants->GetPI()和 cout«Constants:GetPI();B. co

6、ut«constants.GetPI()和 cout«Constants.GetPI();C. cout«constants->GetPI()和 cout«Constants->GetPI();D. cout«constants.GetPI()和 cout«Constants:GetPI();9. 有如下程序:#i nclude <iostream>using n amespace std; class VACpublic:int f() con stretur n 3;int f()return 5;;int

7、 main()VAC v1;const VAC v2;cout«v1.f()vvv2.f();return 0;運(yùn)行時(shí)的輸出結(jié)果是:AA. 53B. 35C. 55D. 3310. 有如下類聲明:class Baseprotected:int amount;public:Base(i nt n = 0):am oun t( n)int getAm oun t() const retur n amoun t; ;class Derived:public Baseprotected:int value;public:Derived(i nt m, i nt n ):value(m),Ba

8、se( n)0int getData() const return value + amoun t;已知x是一個(gè)Derived對(duì)象,則下列表達(dá)式中正確的是:BA. x.value + x.getAmount();C x.getData() -x.amount;B. x.getData() + x.getAmount();D. x.value + x.amount;二、填空題(8*2=16)4006 4 4 4 4 return 咒his 一Doq speak Voice1 下列中a的值是400#define AAA 200#define BBB AAA+100int a= BBB*22.以下為

9、Windows NT下的32位C+程序,請(qǐng)計(jì)算sizeof的值。 char strQ = u Hello M ;char *p = str;int n = 10;請(qǐng)計(jì)算sizeof (str) = 5sizeof ( p ) =4 _sizeof ( n ) =4_ 2 void Func ( char str1OO)”請(qǐng)計(jì)算sizeof( str) =4100void *p = malloc( 100 );/請(qǐng)計(jì)算sizeof ( p ) =43補(bǔ)充完整下面的類定義:class XCHchar* a;public:XCH(char* aa) / 構(gòu)造函數(shù) a=new charstrle n(

10、 aa)+1; strcpy(a.aa);XCH& operator=(const XCH& x) / 重載賦值函數(shù) delete a;a二new charstrle n(x.a)+1;strcpy(a,x.a);JXCH()delete a;return This _4請(qǐng)寫出下面程序的輸出結(jié)果#in clude<iostream>using n amespace std;class Animal public:virtual char* getType() const return HA ni virtual char* getVoice() const retu

11、r n “Voice”;class Dog:public An imalpublic:char* getType() const retur n “Dog”;char* getVoice() const retur n ”Woof:;void type(A ni mal& a) cout«a.getType();void speak(A ni mal a) cout«a.getVoice(); int mai n()Dog d;type(d);cout«H speak H;speak(d);cout«e ndl; return 0;Dog spe

12、ak Voice、問答題(5*10+9+15=74)1 編寫類String的拷貝構(gòu)造函數(shù)和賦值函數(shù)(可以調(diào)用C+/C的字符串庫函數(shù))(15)已知類String的原型為:class Stringpublic:Stri ng(co nst char *str = NULL);Strin g(c onst String &other); Strin g(void);String & operate =(c onst String &other);普通構(gòu)造函數(shù) /拷貝構(gòu)造函數(shù)析構(gòu)函數(shù)腹值函數(shù)private:char *m_data;用于保存字符串請(qǐng)編寫String的上述4個(gè)函數(shù)

13、。/ String的析構(gòu)函數(shù)String:>String(void)3分delete 0 m_data;由于m_data是內(nèi)部數(shù)據(jù)類型,也可以寫成delete m_data;/ String 的普通構(gòu)造函數(shù) Strin g:Stri ng(c onst char *str) 6分if(str=NULL)/若能加 NULL判斷則更好3分若能加 NULL判斷則更好13分4分m_data = new char;若能加 NULL 判斷則更好 *m_data = , 0?else int len gth = strle n( str);m_data = new charle ngth+1; str

14、cpy(m_data, str);/拷貝構(gòu)造函數(shù)Strin g:Stri ng(c onst String&other) int len gth = strlen( other.m_dat3); m_data = new charle ngth+1; strcpy(m_data,賦值函數(shù)String & Strin g:operate =(c onst String & other)檢查自腹值if(this = & other)/ (2)釋放原有的內(nèi)存資源/ 3分delete m_data;/ ( 3)分配新的內(nèi)存資源,并復(fù)制內(nèi)容 3分int len gth =

15、 strle n( other.m_data);m_data = new charlength+1;/ 若能加 NULL 判斷則更好strcpy(m_data, other.m_data);/(4)返回本對(duì)象的引用3分return *this;2.不調(diào)用C+/C的字符審庫函數(shù),請(qǐng)編寫函數(shù)strcmp的實(shí)現(xiàn)(10)。int strcmp ( const char * src, const char * dst)char *strcpy(char *strDest, const char *strSrc)char 'address = strDest;while (*strDest+ =

16、* strSrc+)NULL;retur n address;3. F(n)二F(n/)+F(n2),F(0)=hF(1)=1 分別用遞歸和循環(huán)求 F(5)(10)public int R(i nt nu m)if(nu m<=0) num=1;else if(num=1)nuelse num=R( nu m-1)+R (n um-2); return num;public int c(i nt num) int a = 1;int b = 1;int c = 0;for (i nt i = 0; i < num- 2; i+) c = a + b;a = b;b = c;retu

17、rn c;4.寫一算法,對(duì)單鏈表實(shí)現(xiàn)就地逆置(不要構(gòu)造新結(jié)點(diǎn))(10) node Reserve (node*head)node*p1,*p2,*p3;if(head=NULL)|(head-> next=NULL) retur n head;p1=head; p2=p1- >n ext; while(p2!=NULL)p3=p2->n ext;p2->n ext=p1;P1=P2:P2=p3;head-> next=NULL;p 仁 head;retur n head;5. 從冒泡排序、直接插入排序、二分插入排序和選擇排序四種排序算法中,選擇其 中一種算法,寫出

18、它的實(shí)現(xiàn)?(10)#i nclude<stdio.h>#in clude<time.h>#in clude<math.h>#i nclude<malloc.h>void BubbleSort(int *L,int N)/冒泡int i,j; int t;for(i=1;i<=N;i+)for(j=N;j>i;j-)t=L0l;LU=LU-1);L0-1=t;int SelectMinKey(int *L,int N.int n)int i,m in=n;for(i=n+1;i<=N;i+)if(Li<Lmi n)min=i

19、;return mi n;void SelectSort(i nt *L,i nt N)選擇int i,j;int t;for(i=1;i<N;i+)二SelectMi nKey(L,N,i);if(i!=j)t=Li;Li=L0l;LU=t;void lnsertSort(int *L,int N)插入int i,j;for(i=2;i<=N;i+)if(Li<Li-1)L0=Li;Li=L0-1;forO=i-2;L0<LO;HLD+1=LU;LU+1=LO;void Shelll nsert(i nt *L,i nt N, i nt dk)/對(duì)順序表L作一趟希爾插

20、入排序。本算法對(duì)算法10.1作了以下修改:/1.前后記錄位置的增量是dk,而不是1:/2. r0只是暫存單元,不是哨兵。當(dāng)jv=O時(shí),插入位置已找到。int i,j;for(i=dk+1;i<=N;+i)if(Li<Li-dk)暫存在L.rOforQ=i-dk;(j>0&&L0<LO);j-=dk)LO+dk=LO;/LD+dk=LO;/記錄后移,查找插入位置 插入/需將L.ri插入有序增量子表LO=Li;/ / Shelll nsert void ShellSt(int *L,int N, int dltaQ, int t)/算法 10.5/按增量序列

21、dlta0.t-1對(duì)順序表L作希爾排序。for(int k=O;k<t;+k)Shelllnsert(L,N, dltak); /一趟增量為 dltak的插入排序/ ShellSortvoid ShellSort(i nt *L,i nt N)/希爾int t=(i nt)log(N);int k,*dlta;dlta=(i nt*)malloc(t*4); /產(chǎn)生增量序列for(k=0;k<t;k+)dltak=(i nt)pow(2,t-k)-1;ShellSt(L,N,dlta,t);int main()int N=250;int i,j,k;int t;int ti16;i

22、nt *L;sran d(time(NULL);printf(“長度t|冒泡t|選擇t|插入t|希爾n”);printf(” + forQ=0;N<100000;j+)L=(i nt *)malloc(N+1)*4);t=0;f0r(i=1;i<=N;i+) Li=ra nd();tit+=clock(); BubbleSort(L,N); tit+=clock();f0r(i=1;i<=N;i+) Li=ra nd();tit+=clock(); SelectSort(L,N); tit+=clock();f0r(i=1;i<=N;i+) Li=ra nd();tit

23、+=clock();In sertSort(L,N); tit+=clock();for(i=1;i<=N;i+)Li=ra nd();tit+=clock();ShellSort(L,N);tit+=clock();prin tf("n%dt",N);for(k=0;k<4;k+)prin tf("| %dt",(ti2*k+1-ti2*k);N*=5;prin tf(HnnH);6. 個(gè)類中,const類型成員函數(shù)的主要作用是什么?在該函數(shù)中可以調(diào)用該類的 什么類型的成員變量和成員函數(shù)?該類的一個(gè)非const對(duì)象可以調(diào)用const成員函數(shù)

24、嗎? (10)(4)可以定義const常呈,具有不可變性。(2) 便于進(jìn)行類型檢查,使編譯器對(duì)處理內(nèi)容有更多了解,消除了一些隱患。例如:void f(const int i)編譯器就會(huì)知 道i是一個(gè)常呈,不允許修改;(3) 可以避免意義模糊的數(shù)字出現(xiàn),同樣可以很方便地進(jìn)行參數(shù)的調(diào)整和修改。同宏定義一樣,可以做到不變則已,一變都變!如(4)中,如果想修改Max的內(nèi)容,只需要:const int Max=you want;即可!(4) 可以保護(hù)被修飾的東西,防止意外的修改,增強(qiáng)程序的健壯性。還是上面的例子,如果在函數(shù)體內(nèi)修改了 i,編譯器就會(huì)報(bào)錯(cuò);例如:void f(const int i)(5)

25、 為函數(shù)重載提供了一個(gè)參考。class A void f(int i) /個(gè)函數(shù)void f(int i) const /上一個(gè)函數(shù)的垂載;(6) 可以節(jié)省空間,避免不必要的內(nèi)存分配。const定義常呈從匯編的角度來看,只是給出了對(duì)應(yīng)的內(nèi)存地址,而不是象#define樣給出的星立即數(shù),所以,const定義的常呈在程序運(yùn)行過程中只有一份拷貝,而#define定義的常星在內(nèi)存中有若干個(gè)拷貝。(7) 提高了效率。編譯器通常不為普通const常呈分配存儲(chǔ)空間,而是將它們保存在符號(hào)表中,這使得它成為一個(gè)編譯期間的常寶,沒有了存儲(chǔ)與讀內(nèi)存的操作,使得它的效率也很高。不能修改類的數(shù)據(jù)成員,不能在函數(shù)中調(diào)用其他不是const的函數(shù).1) const對(duì)象調(diào)用的是const成員函數(shù)。2) 非const成員函數(shù)可以調(diào)用const成員函數(shù),這樣做一般是用來避免代碼重 復(fù), 但引入了 一個(gè)casting動(dòng)作。7. 下面兩個(gè)語句的執(zhí)行效果相同嗎?為什么? (9) 語句 1: while(*p+);語句 2: while(*p) p+;區(qū)別在于退出循壞后,P的值不一樣while( *p+);當(dāng)*p=0時(shí),退出循壞,此時(shí)P+仍然執(zhí)行了P+不再被執(zhí)行while(p ) p+; 當(dāng)*p=0時(shí),退出循壞,此時(shí) 例如charpABCD:執(zhí)行完第一個(gè)while循壞后,p指向的是2后面的一個(gè)字節(jié),*

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論