C++期末考試題及答案總結_第1頁
C++期末考試題及答案總結_第2頁
C++期末考試題及答案總結_第3頁
C++期末考試題及答案總結_第4頁
C++期末考試題及答案總結_第5頁
已閱讀5頁,還剩6頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、清華大學計算機系C+期末考試題及答案一、填空題(25小題,共50分)(以下每小題1分,共10分)在C+中,函數的參數有兩種傳遞方式,它們是值傳遞和地址或指針或引用傳遞。a當一個成員函數被調用時,該成員函數的this指針指向調用它的對象。在基類和派生類中,派生類可以定義其基類中不具備的數據和操作。對兩個有相同名字的數據成員進行訪問時,如果沒有作用域分隔符限定時,對此數據成員的訪問將出現歧義。a4.拷貝構造函數使用引用作為參數初始化創建中的對象。a5.在公有繼承的情況下,基類數據成員在派生類中的訪問權限保持不變。6a.描述命題”A小于B或小于C的表達式為AB|AVC。7.用new申請某一個類的動態

2、對象數組時,在該類中必須能夠匹配到沒有形參的或缺省參數構造函數,否則應用程序會產生一個編譯錯誤。8込靜態數據成員在類外進行初始化,且靜態數據成員的一個拷貝被類的所有對象共享。為了避免可能出現的歧義,C+對ifelse語句配對規則規定為:else總是與與最近的if配對。設inta=3,b=4,c=5;,表達式(a+b)c&b=c的值是0。a(以下每小題2分,共20分)11a.面向對象的程序設計有四大特征,它們是抽象、封裝、繼承、多態。12.在VisualC+中,定義重載函數時,應至少使重載函數的參數個數或參數類型不同;在基類和派生類中,成員函數的覆蓋是指派生類成員函數與在基類被覆蓋的成員函數名、

3、參數個數、參數類型和返回值類型均相同。構造函數與析構函數除功能不同外,在定義形式上,它們的區別還包括構造函數名與類名相同,而析構函數名是在類名前加一個、析構函數沒有參數、析構函數可以定義為虛函數。動態聯編要滿足兩個條件,它們是被調用的成員函數是虛函數、用指針或引用調用虛函數。a15.在C+類中,有一種不能定義對象的類,這樣的類只能被繼承,稱之為抽象類,定義該類至少具有一個純虛函數。a16.在C+類中,const關鍵字可以修飾對象和成員函數,const對象不能被修改,const成員函數不能修改類數據成員。a17.舉出C+中兩種用戶自定義的數據類型:類、枚舉。a18.C+中沒有字符串類型,字符串是

4、通過字符數組來表示的,每一個字符串都有一個結尾字符0。C+中沒有輸入輸出語句,輸入輸出是通過輸入輸出庫實現的,寫出一條打印整型變量n的輸出語句:coutVn;舉出C+中兩種代碼復用的方式:繼承、復用(以下每小題4分,共20分)21a.下面程序的運行結果是3a#includestdio.h單選:10*2簡答:4*53程序分析:5*84.程序設計:2*10考占:n八、voidmain()Achara=a,b=j;Afloatx;ax=(b-a)/CF-zA);printf(%dn,(int)(3.14*x);22.下面程序的運行結果是2581114#includeiostream.havoidma

5、in()inti=l;while(iclassAaapublic:A()coutVVA:A()called.n;AvirtualA()coutA:A()called.n;classB:publicAapublic:B(inti)acoutB:B()called.n;buf二newchari;AvirtualB()adeletebuf;AcoutB:B()called.n;private:achar*buf;;voidfun(A*a)adeletea;voidmain()A*a=newB(15);afun(a);aaA:A()called.aB:B()called.B:B()called.aA:

6、A()called.25.下面程序的運行結果是。#includestdio.hainta=1,3,5,7,9;aint*p=a,a+l,a+2,a+3,a4;avoidmain()aprintf(%dt%dt%dn,a4,大(a+2),*pl);printf(%dt%dt%dn,*(p+l)+a2,*(p+4)-*(p+0),*(a+3)%a4);a953847a二、問答題(每小題5分,共20分)若程序員沒有定義拷貝構造函數,則編譯器自動生成一個缺省的拷貝構造函數,它可能會產生什么問題?解答要點:當對象含有指針數據成員,并用它初始化同類型的另一個對象時,缺省的拷貝構造函數只能將該對象的數據成員

7、復制給另一個對象,而不能將該對象中指針所指向的內存單元也復制過去。這樣,就可能出現同一內存單元釋放兩次,導致程序運行出錯。簡述成員函數、全局函數和友元函數的差別。a解答要點:以下幾點必須說清楚:a成員函數是在類內部定義的,作用域在類的內部,成員函數可以訪問類的數據成員(公有、保護和私有數據成員),可以調用該類的其它成員函數(公有、保護和私有成員函數),可以調用全局函數。如果友元函數是另一個類的公有成員函數,則該類的成員函數也只能通過那個類的對象調用,不能調用那個類的保護和私有成員函數。非本類成員函數(其它類成員函數或全局函數)可以通過該類的對象訪問該類的公有數據成員和調用該類的的公有成員函數。

8、不是在類中定義的成員函數都是全局函數。如果某一個函數(全局函數或類的成員函數)定義為另一個類的友元函數,需要在那個類中用friend關鍵字聲明,友元函數并不是類的成員,它的定義自然是在那個類的外面。簡述結構化的程序設計、面向對象的程序設計的基本思想。解答要點:結構化的程序設計將數據和對數據的操作分離,程序是由一個個的函數組成的,面向對象的程序設計將數據和操作封裝在一起,程序是由一個個對象組成的,對象之間通過接口進行通信,它能夠較好地支持程序代碼的復用。結構struct和類class有什么異同?解答要點:struct和class都可以定義類,但是缺省訪問權限說明時,struet的成員是公有的,而

9、class的成員是私有的。在C+中,struet可被class代替。三、找出下面程序(或程序段)中的語法錯誤,并予以糾正(每小題4分,共8分)(1)程序功能是倒序輸出各給定的字符串。a#includestdio.hAvoidmain()charstr5=FirstSecond,Third,Forth,Fifth;achar*cp=str4,str3,str2,str1,str0;inti;while(i=5)aprintf(%c,*(cp+i);ai+;aaacharstr5=First,Second,Third,Forth,Fifth;應為charstr510=First,Second,Th

10、ird,Forth,Fifth;while(iV=5)應為while(i5)printf(%c,*(cp+i);應為printf(%s,*(cp+i);inti;應為inti=0;(2)程序功能是將各個平方根值放入數組中。#includestdio.havoidmain()aintmax,a,i;ascanf(%d%d,max,a);doublexmax;for(i=0;iAvoidf_seq(char*list,char*object,intlen)A/list指針數組,指向字符串/object模式串/len表的長度achar*p;Aintstrcmp(char*s,char*t);p=li

11、st;Awhile()/pnext=NULLap=head-next;head-next=NULL;awhile()/p!=NULL或pAtemp1=head;a;/head=p;atemp2=p;Ap=pnext;/temp2next=tempi;或head-next=temp1;a/Matehwhilestatenmentreturnhead;/返回逆置后的鏈表的頭結點一、選擇填空題(共20小題,每小題2分,共40分)。關于C+與C語言關系的描述中,(4)是錯誤的。a.C語言是C+語言的一個子集C語言與C+語言是兼容的C+語言對C語言進行了一些改進d.C+語言和C語言都是面向對象的按照標識

12、符的要求,(1)符號不能組成標識符。連接符下劃線e.大小寫字母d.數字字符為了避免嵌套的if-else語句的二義性,C語言規定else總是與(3)組成配對關系??s排位置相同的if在其之前未配對的if在其之前未配對的最近的if同一行上的if在inta3=1,3,2,4,5,6,0;中,a22的值是(3)。10e.6d.2設char*s;,以下正確的表達式是(2)。s=computer;*s=computer;c.*s=computer;d.*s=c;對于int*pa5;的描述中,(4)是正確的。a.pa是一個指向數組的指針,所指向的數組是5個int型元素pa是一個指向某數組中第5個元素的指針,該

13、元素是int型變量pa5表示某個元素的第5個元素的值pa是一個具有5個元素的指針數組,每個元素是一個int型指針在下列表示引用的方法中,(1)是正確的。已知:intm=10;int&x=m;&y=l0;int&z;float&t=&m;下列for循環的次數為(2)。for(i=0,x=0;!x&iv=5;i+)56l無限對于C/C+語言的函數,下列敘述中正確的是(1)。a.函數的定義不能嵌套,但函數調用可以嵌套b.函數的定義可以嵌套,但函數調用不能嵌套函數的定義和調用都不能嵌套函數的定義和調用都可以嵌套在一個被調用函數中,關于return語句使用的描述,(4)是錯誤的。被調用函數中可

14、以不用return語句被調用函數中可以使用多個return語句被調用函數中,如果有返回值,就一定要有return語句被調用函數中,一個return語句可以返回多個值給調用函數在一個函數中,要求通過函數來實現一種不太復雜的功能,并且要求加快執行速度,選用(1)。內聯函數b.重載函數c.遞歸調用d.嵌套調用使用fseek函數可以實現的操作是(1)。改變文件指針的當前位置文件的順序讀寫文件的隨機讀寫以上都不對下列存儲標識符中,(3)的可見性與存在性不一致。a.外部類自動類內部靜態類寄存器類在如下結構定義中,不正確的是(2)。a.structstudentintno;charname10;floats

15、core;;b.structstud20intno;charname10;floatscore;;structstudentintno;charname10;floatscore;stud20;d.structintno;charname10;floatscore;stud100;15.將兩個字符串連接起來組成一個字符串時,選用(3)函數strlen()strcpy()c.strcat()strcmp()(4)不是構造函數的特征構造函數的函數名與類名相同構造函數可以重載構造函數可以設置缺省參數構造函數必須指定類型說明已知:類A中一個成員函數說明如下:voidSet(A&a);其中,A&的含義是

16、(3)。指向類A的指針為a將a的地址值賦給變量Setc.a是類A對象的引用,用來作函數Set()的參數d.變量A與a按位與作為函數Set()的參數已知:print()函數是一個類的常成員函數,它無返回值,下列表示電(1)是正確的。a.voidprint()const;b.constvoidprint();c.voidconstprint();d.voidprint(const);關于虛函數的描述中,(3)是正確的。虛函數是一個static類型的成員函數虛函數是一個非成員函數基類中說明了虛函數后,派生類中將其對應的函數可不必說明為虛函數派生類的虛函數與基類的虛函數具有不同的參數個數和類型20.關

17、于new運算符的下列描述中,(4)是錯的。a.它可以用來動態創建對象和對象數組b.使用它創建的對象和對象數組可以使用運算符delete刪除使用它創建對象時要調用構造函數使用它創建對象數組時必須指定初始值二、問答題(15分)1、(3分)虛析構函數有什么作用?2、(3分)拷貝構造函數在哪幾種情況下調用?3、(4分)函數重載與函數覆蓋有什么不同,它們與多態有什么關系?4、(3分)C+繼承是如何工作的?5、(2分)類與對象有什么區別?三、(6分)分析下面程序的運行結果includeclassBpublic:B()B(inti)b=i;virtualvoidvirfun()coutVVB::virfun

18、()called.n;private:intb;classD:pub1icBpublic:D()D(inti,intj):B(i)d=j;private:intd;voidvirfun()coutVvD:virfun()called.n;;voidfun(B*obj)obj-virfun();voidmain()D*pd=newD;fun(pd);四、(9分)下面的程序可以統計命令行第一個參數中出現的字母個數,請填充下面空白,完成程序。#include#includevctype.hvoidmain(intargc,argv;)char*str;intcount=0;if(argc2)exit

19、(1);str=;while(*str)if(isalpha()count+;printf(n字母個數:%dn,count);提示:intisalpha(intch)函數功能是檢查ch是否是字母五、(8分)定義一個字符棧類Stack(包括類的實現)。數據成員包括一個存放字符的數組stck和一個棧指針tos。棧數組的尺寸由常量SIZE確定。棧的基本操作為Push()和Pop()。六、(10分)完成下面的函數,對有n個元素的數組a,使數組元素按逆序排列。voidinverse(int*a,intn)七、(12分)下面的函數統計子字符串substr在字符串str中出現的次數,如果substr在str

20、中不出現,則返回值0。請完成該函數。intstr_count(char*substr,char*str)一、選擇填空題I、D2、A3、C4、C5、B6、D7、A8、B9、A10、DII、A12、A13、C14、B15、C16、D17、C18、A19、C20、D二、問答題3、虛析構函數有什么作用?A解答要點A對象銷毀時,需要調用析構函數。在多態調用時,是用基類的指針訪問派生類的對象。如果析構函數是非虛函數,則基類指針只能訪問基類的析構函數,而不能訪問派生類的析構函數,導致派生類對象銷毀時,沒有調用派生類的析構函數,只是調用了基類的析構函數。如果把析構函數定義成虛函數,則可克服這個問題。A2、拷貝

21、構造函數在哪幾種情況下調用?A解答要點:用一個對象初始化另一個對象時當用對象作為函數參數傳遞時A當函數返回對象時A3、函數重載與函數覆蓋有什么不同,它們與多態有什么關系?A解答要點:A函數重載是指函數名相同,而函數的參數個數或類型不同;覆蓋是指在派生類中成員函數與基類成員函數的函數名、參數個數、類型與返回值均相同;C+中正是通過虛函數的覆蓋,實現多態的功能。4AA、C+繼承是如何工作的?解答要點:繼承使得派生類能夠使用基類的公有和保護成員,從而實現代碼的復用,派生類可以增加成員,也可以隱藏和覆蓋基類的成員。對于公有繼承,基類成員的訪問權限在派生類保持不變。5、類與對象有什么區別?A解答要點:類是類型,是對象的抽象,對象是類的具體實例。一個類可以有多個對象,每個對象都有自己的存儲單元,而類不占存儲單元。三、運行結果為:D:virfun()called.四、填空achar*argv1*str+五、(8分)定義一個字符棧類Stack(包括類的實現)。數據成員包括一個存放字符的數組stck和一個棧指針tos。棧數組的尺寸由常量SIZE確定。棧的基本操作為Push()和Pop()。constintSIZE=

溫馨提示

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

評論

0/150

提交評論