C++期末考試題及答案總結(jié)_第1頁
C++期末考試題及答案總結(jié)_第2頁
C++期末考試題及答案總結(jié)_第3頁
C++期末考試題及答案總結(jié)_第4頁
C++期末考試題及答案總結(jié)_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、清華大學(xué)計算機(jī)系C+期末考試題及答案一、填空題(25小題,共50分)(以下每小題1分,共10分)1 .在C+中,函數(shù)的參數(shù)有兩種傳遞方式,它們是值傳遞和地址或指針或引用傳遞。2 .當(dāng)一個成員函數(shù)被調(diào)用時,該成員函數(shù)的this指針指向調(diào)用它的對象。3 .在基類和派生類中,派生類可以定義其基類中不具備的數(shù)據(jù)和操作。對兩個有相同名字的數(shù)據(jù)成員進(jìn)行訪問時,如果沒有作用域分隔符限定時,對此數(shù)據(jù)成員的訪問將出現(xiàn)歧義。4 .拷貝構(gòu)造函數(shù)使用引用作為參數(shù)初始化創(chuàng)建中的對象。5 .在公有繼承的情況下,基類數(shù)據(jù)成員在派生類中的訪問權(quán)限保持不變。6 .描述命題小于B或小于C”的表達(dá)式為A<B|A<C。7

2、 .用new申請某一個類的動態(tài)對象數(shù)組時,在該類中必須能夠匹配到?jīng)]有形參的或缺省參數(shù)構(gòu)造函數(shù),否則應(yīng)用程序會產(chǎn)生一個編譯錯誤。8 .靜態(tài)數(shù)據(jù)成員在類外進(jìn)行初始化,且靜態(tài)數(shù)據(jù)成員的一個拷貝被類的所有對象共享。9 .為了避免可能出現(xiàn)的歧義,C+對ifelse語句配對規(guī)則規(guī)定為:else總是與與最近的if配對。10 .設(shè)"inta=3,b=4,c=5/,表達(dá)式”(a+b)>c&&b=二c"的值是0。(以下每小題2分,共20分)11 .面向?qū)ο蟮某绦蛟O(shè)計有四大特征,它們是抽象、封裝、繼承、多態(tài)。12 .在VisualC+中,定義重載函數(shù)時,應(yīng)至少使重載函數(shù)的參

3、數(shù)個數(shù)或參數(shù)類型不同:在基類和派生類中,成員函數(shù)的覆蓋是指派生類成員函數(shù)與在基類被覆蓋的成員函數(shù)名、參數(shù)個數(shù)、參數(shù)類型和返回值類型均相同。13 .構(gòu)造函數(shù)與析構(gòu)函數(shù)除功能不同外,在定義形式上,它們的區(qū)別還包括構(gòu)造函數(shù)名與類名相同,而析構(gòu)函數(shù)名是在類名前加一個工析構(gòu)函數(shù)沒有參數(shù)、析構(gòu)函數(shù)可以定義為虛函數(shù).14 .動態(tài)聯(lián)編要滿足兩個條件,它們是被調(diào)用的成員函數(shù)是虛函數(shù)、用指針或引用調(diào)用虛函數(shù)。15 .在C+類中,有一種不能定義對象的類,這樣的類只能被繼承,稱之為抽象類,定義該類至少具有一個純虛函數(shù)。16 .在C+類中,const關(guān)健字可以修飾對象和成員函數(shù),const對象不能被修改,const成員

4、函數(shù)不能修改類數(shù)據(jù)成員。17 .舉出C+中兩種用戶自定義的數(shù)據(jù)類型:類、枚舉。18 .C+中沒有字符串類型,字符串是通過字符數(shù)組來表示的,每一個字符串都有一個結(jié)尾字符0。19 .C+中沒有輸入輸出語句,輸入輸出是通過輸入輸出庫實現(xiàn)的,寫出一條打印整型變量n的輸出語句:cout<<n;20 .舉出C+中兩種代碼好用的方式:繼承、復(fù)用。(以下每小題4分,共20分)L單選:10*22 .簡答:4*53 .程序分析:5*84 .程序設(shè)計:2*10 考點:(1)運算符重載(2)文件IO流(3)異常處理21 .下面程序的運行結(jié)果是3。#include<stdio.h>voidmai

5、nOchara=,a,,b=,j;floatx;x=(b-a)/CF'-'A');printf(,z%dnz,,(int)(3.14*x);)22 .下面程序的運行結(jié)果是2581114。#include'iostream.hvoidmain()inti=l;while(i<=15)i+;if(i%3!=2)continue;elsecout«z,i=z,<<i«endl;)23 .下面程序的運行結(jié)果是#include"iostream.hclasstestprivate:intnum;floatfl;public:

6、test();intgetint()returnnum;floatgetfloat()returnfl;>est();;test::test()cout«,zInitalizingdefault"«endl;num=0;fl=0.0;)test:test()cout«/'Desdtructorisactive"«endl;)voidmain()testarray2;cout«array1.getint()<<""<<array1.getfloat()<<e

7、ndl;)InitalizingdefaultInitalizingdefault00DesdtructorisactiveDesdtructorisactive24 .下面程序的運行結(jié)果是o#include<iostream.h>classApublic:A()cout«zzA:A()called.n,z;virtualA()cout«z,A:A()called.nr;classB:publicApublic:B(inti)cout«z,B::B()called.n;buf=newchari;virtual、B()deletebuf;:、B()cal

8、led.nz,;)private:char*buf;);voidfun(A*a)deletea;)voidmainOA*a=newB(15);fun(a);)A: :A()called.B: :B()called.B::"B()called.A::、A()called.25.下面程序的運行結(jié)果是o#include<stdio.h>inta=1,3,5,7,9;int*p=a,a+1,a+2,a+3,a+4;voidmain()printf(,%dt%dt%dn/,a4,*(a+2),*pl);printf(z,%dt%dt%dnz*(p+1)+a2,*(p+4)-*(p+

9、0),*(a+3)%a4);)953847二、問答題(每小題5分,共20分)1 .若程序員沒有定義拷貝構(gòu)造函數(shù),則編譯器自動生成一個缺省的拷貝構(gòu)造函數(shù),它可能會產(chǎn)生什么問題?解答要點:當(dāng)對象含有指針數(shù)據(jù)成員,并用它初始化同類型的另一個對象時,缺省的拷貝構(gòu)造函數(shù)只能將該對象的數(shù)據(jù)成員更制給另一個對象,而不能將該對象中指針?biāo)赶虻膬?nèi)存單元也更制過去。這樣,就可能出現(xiàn)同一內(nèi)存單元釋放兩次,導(dǎo)致程序運行出錯。2 .簡述成員函數(shù)、全局函數(shù)和友元函數(shù)的差別。解答要點:以下幾點必須說清楚:成員函數(shù)是在類內(nèi)部定義的,作用域在類的內(nèi)部,成員函數(shù)可以訪問類的數(shù)據(jù)成員(公有、保護(hù)和私有數(shù)據(jù)成員),可以調(diào)用該類的其它

10、成員函數(shù)(公有、保護(hù)和私有成員函數(shù)),可以調(diào)用全局函數(shù)。如果友元函數(shù)是另一個類的公有成員函數(shù),則該類的成員函數(shù)也只能通過那個類的對象調(diào)用,不能調(diào)用那個類的保護(hù)和私有成員函數(shù)。非本類成員函數(shù)(其它類成員函數(shù)或全局函數(shù))可以通過該類的對象訪問該類的公有數(shù)據(jù)成員和調(diào)用該類的的公有成員函數(shù)。不是在類中定義的成員函數(shù)都是全局函數(shù)。如果某一個函數(shù)(全局函數(shù)或類的成員函數(shù))定義為另一個類的友元函數(shù),需要在那個類中用friend關(guān)鍵字聲明,友元函數(shù)并不是類的成員,它的定義自然是在那個類的外面。3 .簡述結(jié)構(gòu)化的程序設(shè)計、面向?qū)ο蟮某绦蛟O(shè)計的基本思想。解答要點:結(jié)構(gòu)化的程序設(shè)計將數(shù)據(jù)和對數(shù)據(jù)的操作分離,程序是由

11、一個個的函數(shù)組成的,面向?qū)ο蟮某绦蛟O(shè)計將數(shù)據(jù)和操作封裝在一起,程序是由一個個對象組成的,對象之間通過接口進(jìn)行通信,它能夠較好地支持程序代碼的好用。4 .結(jié)構(gòu)struct和類class有什么異同?解答要點:struct和class都可以定義類,但是缺省訪問權(quán)限說明時,struct的成員是公有的,而class的成員是私有的。在C+中,struct可被class代替。三、找出下面程序(或程序段)中的語法錯誤,并予以糾正(每小題4分,共8分)(1)程序功能是倒序輸出各給定的字符串。#include<stdio.h>voidmainOcharstr5="First",&q

12、uot;Second","Third","Forth","Fifth"char*cp=str4,str3,str2,strl,str0;inti;while(i<=5)printf(飛c”,*(cp+i);i+;)"charstr5="First","Second","Third","Forth","Fifth"應(yīng)為“charstr510="First","Second"

13、,"Third","Forth","Fifth")"while(i<=5)”應(yīng)為"while(i<5)”"printf("%c",*(cp+i);"應(yīng)為"printf("%s”,*(cp+i);”“inti;"應(yīng)為inti=0;(2)程序功能是將各個平方根值放入數(shù)組中。#include<stdio.h>voidmainOintmax,a,i;scanf(“"d"d”,max,a);doublexmax;

14、for(i=0;i<max;i+)xi=sqrt(a*i);)增加"#includemath.h>",zscanf(,/%d%d,,max,a);"應(yīng)為"scanf(""d%d”,&max,&a);”"doublexmax;"改為:/zdouble*x=newdoublemax“deletex;四、(8分)下列shape類是一個表示形狀的抽象類,area()為求圖形面積的函數(shù),total()則是一個通用的用以求不同形狀的圖形面枳總和的函數(shù)。請從shape類派生三角形類(triangle)

15、矩形類(rectangle),并給出具體的求面積函數(shù)classshapepublic:virtualfloatarea()=0;);floattotal(shape*s,intn)(floatsum=0.0;for(inti=0;i<n;i+)sum+=si-)area();returnsum;)classTriangle:publicShapepublic:Triangle(doubleh,doublew)H=h;W=w;doubleArea0constreturnH*W*0.5;private:doubleH,W;);classRectangle:publicShapepublic:

16、Rectangle(doubleh,doublew)H=h;W=w;doubleArea0constreturnH*W;private:doubleH,W;;五、(6分)完成順序查找函數(shù)f_seq()。其過程是:從表頭開始,根據(jù)給定的模式,逐項與表中元素比較。如果找到所需元素,則查找成功,并打印出它在表中的順序號。如果查找整個表仍未找到所需對象,則查找失敗#include<stdio.h>voidf_seq(char*list,char*object,intlen)/list指針數(shù)組,指向字符串/object模式串/len表的長度char*p;intstrcmp(char*s,ch

17、ar*t);P=list;while()/p<list+lenif(strcmp(*p,object)=0)break;else®/p+if(p<list+len)printf("Success!*%dn,z,p-list);elseprintf("Unsuccess!n");)intstrcmp(char*s,char*t)for(;*s=*t;s+,t+)if0s=''0')return(0);return();/s-t或*sft或1)六、(8分)完成使鏈表逆置函數(shù)reverse,若有鏈表:鏈表結(jié)點的結(jié)構(gòu)如下:st

18、ructnodeintnum;structnode*next;)structnode*reverse(structnode*head)/head鏈表頭結(jié)點structnode*p,*templ,*temp2;if(head=NULL®)returnhead;/|head->next=NULLp=head->next;head->next=NULL;while()p!=NULL或ptempi=head;/head=p;temp2=p;p=p->next;®/temp2">next=templ;或head->next=templ;/

19、Matchwhilestatenmentreturnhead;返回逆置后的鏈表的頭結(jié)點)一、選擇填空題(共20小題,每小題2分,共40分)。1 .關(guān)于C+與C語言關(guān)系的描述中,(4)是錯誤的。a.C語言是C+語言的一個子集b.C語言與C+語言是兼容的C.CH語言對C語言進(jìn)行了一些改進(jìn)d.C+語言和C語言都是面向?qū)ο蟮? .按照標(biāo)識符的要求,(1)符號不能組成標(biāo)識符。a.連接符b.下劃線c.大小寫字母d.數(shù)字字符3 .為了避免嵌套的if-else語句的二義性,C語言規(guī)定else總是與(3)組成配對關(guān)系。a.縮排位置相同的ifb.在其之前未配對的ifc.在其之前未配對的最近的ifd.同一行上的if

20、4 .a3=1,3,2,4,5,6,0;"4»,a的值是(3)。a.lb.Oc.6d.25 .設(shè)"char*s;",以下正確的表達(dá)式是(2)。a.s=Hcomputef;b.*s=HcomputerH;c.*s=McomputerH;d.*s='c'6 .對于“mt*pa5:”的描述中,(4)是正確的。a.pa是一個指向數(shù)組的指針,所指向的數(shù)組是5個mt型元素b.pa是一個指向某數(shù)組中第5個元素的指針,該元素是mt型變量c.pa5表示某個元素的第5個元素的值d.pa是一個具有5個元素的指針數(shù)組,每個元素是一個mt型指針7 .在下列表示引用

21、的方法中,(1)是正確的。已知:intm=10;&x=m;&y=10;&z;d.float8 .下列for循環(huán)的次數(shù)為(2)ofbi(1=0,x=0;!x&&i<=5;i+)a.5b.6c.ld.無限9 .對于C/C+語言的函數(shù),下列敘述中正確的是(Doa.函數(shù)的定義不能嵌套,但函數(shù)調(diào)用可以嵌套b.函數(shù)的定義可以嵌套,但函數(shù)調(diào)用不能嵌套c.函數(shù)的定義和調(diào)用都不能嵌套d.函數(shù)的定義和調(diào)用都可以嵌套10 .在一個被調(diào)用函數(shù)中,關(guān)于retum語句使用的描述,(4)是錯誤的。a.被調(diào)用函數(shù)中可以不用retum語句b.被調(diào)用函數(shù)

22、中可以使用多個retimi語句c.被調(diào)用函數(shù)中,如果有返回值,就一定要有retum語句d.被調(diào)用函數(shù)中,一個return語句可以返回多個值給調(diào)用函數(shù)11 .在一個函數(shù)中,要求通過函數(shù)來實現(xiàn)一種不太復(fù)雜的功能,并且要求加快執(zhí)行速度,選用(1)。a.內(nèi)聯(lián)函數(shù)b.重載函數(shù)c.遞歸調(diào)用d.嵌套調(diào)用12 .使用fseek函數(shù)可以實現(xiàn)的操作是(1)。a.改變文件指針的當(dāng)前位置b.文件的順序讀寫c.文件的隨機(jī)讀寫d.以上都不對13 .下列存儲標(biāo)識符中,(3)的可見性與存在性不一致。a.外部類b.自動類c.內(nèi)部靜態(tài)類d.寄存器類14 .在如下結(jié)構(gòu)定義中,不正確的是(2)。a.structstudentintn

23、o;chainame10;floatscore;b.structstud20(intno;chainame10;floatscore;c.structstudent(intno;chainame10;floatscore;stud20;dstructintno;cliarname10;floatscore;stud100;15 .將兩個字符串連接起來組成一個字符串時,選用(3)函數(shù)。a.strlen()b.strcpy()c.strcat()d.strcmp()16 .(4)不是構(gòu)造函數(shù)的特征a.構(gòu)造函數(shù)的函數(shù)名與類名相同b.構(gòu)造函數(shù)可以重載c.構(gòu)造函數(shù)可以設(shè)置缺省參數(shù)d.構(gòu)造函數(shù)必須指定類型

24、說明17 .己知:類A中一個成員函數(shù)說明如下:voidSet(A&a);其中,A&的含義是(3)。a.指向類A的指針為ab.將a的地址值賦給變量Setc.a是類A對象的引用,用來作函數(shù)Set()的參數(shù)d.變量A與a按位與作為函數(shù)Set()的參數(shù)18 .己知:pnnt()函數(shù)是一個類的常成員函數(shù),它無返回值,下列表示中,(1)是正確的。a.voidpimt()const;b.constvoidpimt();c.voidconstpimt();d.voidpimt(const);19 .關(guān)于虛函數(shù)的描述中,(3)是正確的。a.虛函數(shù)是一個static類型的成員函數(shù)b.虛函數(shù)是一個非

25、成員函數(shù)c.基類中說明了虛函數(shù)后,派生類中將其對應(yīng)的函數(shù)可不必說明為虛函數(shù)d.派生類的虛函數(shù)與基類的虛函數(shù)具有不同的參數(shù)個數(shù)和類型20 .關(guān)于new運算符的下列描述中,(4)是錯的。a.它可以用來動態(tài)創(chuàng)建對象和對象數(shù)組b.使用它創(chuàng)建的對象和對象數(shù)組可以使用運算符delete刪除c.使用它創(chuàng)建對象時要調(diào)用構(gòu)造函數(shù)d.使用它創(chuàng)建對象數(shù)組時必須指定初始值二、問答題(15分)1、 (3分)虛析構(gòu)函數(shù)有什么作用?2、 (3分)拷貝構(gòu)造函數(shù)在哪幾種情況下調(diào)用?3、 (4分)函數(shù)重載與函數(shù)覆蓋有什么不同,它們與多態(tài)有什么關(guān)系?4、 (3分)C+繼承是如何工作的?5、 (2分)類與對象有什么區(qū)別?三、(6分)

26、分析下面程序的運行結(jié)果#iiiclude<iostream.h>classB(public:B()B(inti)b=i;viitualvoidvirfun()(cout«"B:vii-fiin()called.n"private:mtb;classD:publicB(public:D()private:mtd;voidvii-fiiiiQ(cout«"D:vii-fiin()called.n";voidfun(B*obj)(obj->viifun();voidmain。(D*pd=newD;ftni(pd);四、(9

27、分)下面的程序可以統(tǒng)計命令行第一個參數(shù)中出現(xiàn)的字母個數(shù),請?zhí)畛湎旅婵瞻?完成程序。#include<stdio.h>#iiiclude<ctype.h>voidniaiii(mtaigc,aigv口;)(cliai-*str;mtcouiit=0;if(argc<2)exit(l);stl-wliile(*str)if(isalpha()count+;printf("n字母個數(shù):%dnH,count);提示:mtisalpha(mtch)函數(shù)功能是檢查ch是否是字母五、(8分)定義一個字符棧類Stack(包括類的實現(xiàn))。數(shù)據(jù)成員包括一個存放字符的數(shù)組st

28、ck和一個棧指針tos。棧數(shù)組的尺寸由常量SIZE確定。棧的基本操作為Push()和Pop()。六、(10分)完成下面的函數(shù),對有n個元素的數(shù)組a,使數(shù)組元素按逆序排列。voidinverse(iiit*a,intn)(七、(12分)下面的函數(shù)統(tǒng)計子字符串substr在字符串str中出現(xiàn)的次數(shù),如果substr在str中不出現(xiàn),則返回值0。請完成該函數(shù)。mtstr_count(chai'*substr,char*str)(一、選擇填空題1、D2、A3、C4、C5、B6、D7、A8、B9、A10.D11、A12、A13sC14、B15、C16、D17、C18、A19.C20、D二、問答題

29、1、虛析構(gòu)函數(shù)有什么作用?解答要點:對象銷毀時,需要調(diào)用析構(gòu)函數(shù)。在多態(tài)調(diào)用時,是用基類的指針訪問派生類的對象。如果析構(gòu)函數(shù)是非虛函數(shù),則基類指針只能訪問基類的析構(gòu)函數(shù),而不能訪問派生類的析構(gòu)函數(shù),導(dǎo)致派生類對象銷毀時,沒有調(diào)用派生類的析構(gòu)函數(shù),只是調(diào)用了基類的析構(gòu)函數(shù)。如果把析構(gòu)函數(shù)定義成虛函數(shù),則可克服這個問題。2、拷貝構(gòu)造函數(shù)在哪幾種情況下調(diào)用?解答要點:用一個對象初始化另一個對象時當(dāng)用對象作為函數(shù)參數(shù)傳遞時當(dāng)函數(shù)返回對象時3、函數(shù)重載與函數(shù)慢蓋有什么不同,它們與多態(tài)有什么關(guān)系?解答要點:函數(shù)重載是指函數(shù)名相同,而函數(shù)的參數(shù)個數(shù)或類型不同:覆蓋是指在派生類中成員函數(shù)與基類成員函數(shù)的函數(shù)名、參數(shù)個數(shù)、類型與返回值均相同:中正是通過虛函數(shù)的漁蓋,實現(xiàn)多態(tài)的功能。4、CH繼承是如何工作的?解答要點:繼承使得派生類能夠使用

溫馨提示

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

評論

0/150

提交評論