版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
清華大學計算機系C++期末考試題及答案一、填空題(25小題,共50分)(以下每小題1分,共10分).在C++中,函數(shù)的參數(shù)有兩種傳遞方式,它們是值傳遞和地址或指針或引用傳遞。.當一個成員函數(shù)被調用時,該成員函數(shù)的this指針指向調用它的對象。.在基類和派生類中,派生類可以定義其基類中不具備的數(shù)據(jù)和操作。對兩個有相同名字的數(shù)據(jù)成員進行訪問時,如果沒有作用域分隔符限定時,對此數(shù)據(jù)成員的訪問將出現(xiàn)歧義。.拷貝構造函數(shù)使用引用作為參數(shù)初始化創(chuàng)建中的對象。.在公有繼承的情況下,基類數(shù)據(jù)成員在派生類中的訪問權限保持不變。.描述命題小于B或小于C”的表達式為A<B||A<C。.用new申請某一個類的動態(tài)對象數(shù)組時,在該類中必須能夠匹配到?jīng)]有形參的或缺省參數(shù)構造函數(shù),否則應用程序會產(chǎn)生一個編譯錯誤。.靜態(tài)數(shù)據(jù)成員在類外進行初始化,且靜態(tài)數(shù)據(jù)成員的一個拷貝被類的所有對象共享。.為了避免可能出現(xiàn)的歧義,C++對if…else語句配對規(guī)則規(guī)定為:else總是與與最近的if配對。.設"inta=3,b=4,c=5/,表達式”(a+b)>c&&b=二c"的值是0。(以下每小題2分,共20分).面向對象的程序設計有四大特征,它們是抽象、封裝、繼承、多態(tài)。.在VisualC++中,定義重載函數(shù)時,應至少使重載函數(shù)的參數(shù)個數(shù)或參數(shù)類型不同:在基類和派生類中,成員函數(shù)的覆蓋是指派生類成員函數(shù)與在基類被覆蓋的成員函數(shù)名、參數(shù)個數(shù)、參數(shù)類型和返回值類型均相同。.構造函數(shù)與析構函數(shù)除功能不同外,在定義形式上,它們的區(qū)別還包括構造函數(shù)名與類名相同,而析構函數(shù)名是在類名前加一個工析構函數(shù)沒有參數(shù)、析構函數(shù)可以定義為虛函數(shù)..動態(tài)聯(lián)編要滿足兩個條件,它們是被調用的成員函數(shù)是虛函數(shù)、用指針或引用調用虛函數(shù)。.在C++類中,有一種不能定義對象的類,這樣的類只能被繼承,稱之為抽象類,定義該類至少具有一個純虛函數(shù)。.在C++類中,const關健字可以修飾對象和成員函數(shù),const對象不能被修改,const成員函數(shù)不能修改類數(shù)據(jù)成員。.舉出C++中兩種用戶自定義的數(shù)據(jù)類型:類、枚舉。.C++中沒有字符串類型,字符串是通過字符數(shù)組來表示的,每一個字符串都有一個結尾字符\0。.C++中沒有輸入輸出語句,輸入輸出是通過輸入輸出庫實現(xiàn)的,寫出一條打印整型
變量n的輸出語句:cout<<n;.舉出C++中兩種代碼好用的方式:繼承、復用。(以下每小題4分,共20分)L單選:10*2.簡答:4*5L單選:10*2.簡答:4*5.程序分析:5*8.程序設計:2*10考點:(1)運算符重載(2)文件IO流(3)異常處理#include<stdio.h>voidmainO{chara=,a,,b=,j;floatx;x=(b-a)/CF'-'A');printf(,z%d\nz,,(int)(3.14*x));).下面程序的運行結果是2581114。#include'iostream.h〃voidmain(){inti=l;while(i<=15){i++;if(i%3!=2)continue;elsecout?z,i=z,<<i?endl;)).下面程序的運行結果是#include"iostream.h〃classtest{private:intnum;floatfl;public:test();intgetint(){returnnum;}floatgetfloat(){returnfl;}>est();};test::test(){cout?,zInitalizingdefault"?endl;num=0;fl=0.0;)test::^test(){cout?/'Desdtructorisactive"?endl;)voidmain(){testarray[2];cout?array[1].getint()<<""<<array[1].getfloat()<<endl;)InitalizingdefaultInitalizingdefault00DesdtructorisactiveDesdtructorisactive.下面程序的運行結果是o#include<iostream.h>classA{public:A(){cout?zzA::A()called.\n,z;}virtual^A(){cout?z,A::^A()called.\nr;}};classB:publicA{public:B(inti){cout?z,B::B()called.\n^;buf=newchar[i];}virtual、B()delete[]buf;:、B()called.\nz,;)private:char*buf;);voidfun(A*a){deletea;)voidmainO{A*a=newB(15);fun(a);):A()called.:B()called.B::"B()called.A::、A()called.25.下面程序的運行結果是o#include<stdio.h>inta[]={1,3,5,7,9};int*p[]={a,a+1,a+2,a+3,a+4};voidmain(){printf(,,%d\t%d\t%d\n//,a[4],*(a+2),*p[l]);printf(z,%d\t%d\t%d\nz\**(p+1)+a[2],*(p+4)-*(p+0),*(a+3)%a[4]);)953847二、問答題(每小題5分,共20分).若程序員沒有定義拷貝構造函數(shù),則編譯器自動生成一個缺省的拷貝構造函數(shù),它可能會產(chǎn)生什么問題?解答要點:當對象含有指針數(shù)據(jù)成員,并用它初始化同類型的另一個對象時,缺省的拷貝構造函數(shù)只能將該對象的數(shù)據(jù)成員更制給另一個對象,而不能將該對象中指針所指向的內存單元也更制過去。這樣,就可能出現(xiàn)同一內存單元釋放兩次,導致程序運行出錯。.簡述成員函數(shù)、全局函數(shù)和友元函數(shù)的差別。解答要點:以下幾點必須說清楚:成員函數(shù)是在類內部定義的,作用域在類的內部,成員函數(shù)可以訪問類的數(shù)據(jù)成員(公有、保護和私有數(shù)據(jù)成員),可以調用該類的其它成員函數(shù)(公有、保護和私有成員函數(shù)),可以調用全局函數(shù)。如果友元函數(shù)是另一個類的公有成員函數(shù),則該類的成員函數(shù)也只能通過那個類的對象調用,不能調用那個類的保護和私有成員函數(shù)。非本類成員函數(shù)(其它類成員函數(shù)或全局函數(shù))可以通過該類的對象訪問該類的公有數(shù)據(jù)成員和調用該類的的公有成員函數(shù)。不是在類中定義的成員函數(shù)都是全局函數(shù)。如果某一個函數(shù)(全局函數(shù)或類的成員函數(shù))定義為另一個類的友元函數(shù),需要在那個類中用friend關鍵字聲明,友元函數(shù)并不是類的成員,它的定義自然是在那個類的外面。.簡述結構化的程序設計、面向對象的程序設計的基本思想。解答要點:結構化的程序設計將數(shù)據(jù)和對■數(shù)據(jù)的操作分離,程序是由一個個的函數(shù)組成的,面向對象的程序設計將數(shù)據(jù)和操作封裝在一起,程序是由一個個對象組成的,對象之間通過接口進行通信,它能夠較好地支持程序代碼的好用。.結構struct和類class有什么異同?解答要點:struct和class都可以定義類,但是缺省訪問權限說明時,struct的成員是公有的,而class的成員是私有的。在C++中,struct可被class代替。三、找出下面程序(或程序段)中的語法錯誤,并予以糾正(每小題4分,共8分)(1)程序功能是倒序輸出各給定的字符串。#include<stdio.h>voidmainO{charstr[5][]={"First","Second","Third","Forth","Fifth"};char*cp[]={str[4],str[3],str[2],str[l],str[0]};inti;while(i<=5)printf(飛c”,*(cp+i));i++;))①"charstr[5][]={"First","Second","Third","Forth","Fifth"}應為“charstr[5][10]={"First","Second","Third","Forth","Fifth")②"while(i<=5)”應為"while(i<5)”③"printf("%c",*(cp+i));"應為"printf("%s”,*(cp+i));”④“inti;"應為〃inti=0;〃(2)程序功能是將各個平方根值放入數(shù)組中。#include<stdio.h>voidmainO{intmax,a,i;scanf(“"d"d”,max,a);doublex[max];for(i=0;i<max;i++)x[i]=sqrt(a*i);)①增加"#include〈math.h>"②,zscanf(,/%d%d,,,max,a);"應為"scanf(""d%d”,&max,&a);”③"doublex[max[;"改為:/zdouble*x=newdouble[max]???“delete[]x;〃四、(8分)下列shape類是一個表示形狀的抽象類,area()為求圖形面積的函數(shù),total()則是一個通用的用以求不同形狀的圖形面枳總和的函數(shù)。請從shape類派生三角形類(triangle)矩形類(rectangle),并給出具體的求面積函數(shù)classshape{public:virtualfloatarea()=0;);floattotal(shape*s[],intn)(floatsum=0.0;for(inti=0;i<n;i++)sum+=s[i]-)area();returnsum;)classTriangle:publicShape{public:Triangle(doubleh,doublew){H=h;W=w;}doubleArea0const{returnH*W*0.5;}private:doubleH,W;);classRectangle:publicShape{public:Rectangle(doubleh,doublew){H=h;W=w;}doubleArea0const{returnH*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,char*t);P=list;while(①)//p<list+lenif(strcmp(*p,object)==0)break;else?;//p++if(p<list+len)printf("Success!**%d\n,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,若有鏈表:鏈表結點的結構如下:structnode{intnum;structnode*next;)structnode*reverse(structnode*head)//head鏈表頭結點{structnode*p,*templ,*temp2;if(head==NULL?)returnhead;//|head->next==NULLp=head->next;head->next=NULL;while(②)〃p!=NULL或p{tempi=head;③;//head=p;temp2=p;p=p->next;?;//temp2">next=templ;或head->next=templ;}//Matchwhilestatenmentreturnhead;〃返回逆置后的鏈表的頭結點)一、選擇填空題(共20小題,每小題2分,共40分)。.關于C++與C語言關系的描述中,(4)是錯誤的。a.C語言是C++語言的一個子集b.C語言與C++語言是兼容的C.CH語言對C語言進行了一些改進d.C++語言和C語言都是面向對象的.按照標識符的要求,(1)符號不能組成標識符。a.連接符b.下劃線c.大小寫字母d.數(shù)字字符.為了避免嵌套的if-else語句的二義性,C語言規(guī)定else總是與(3)組成配對關系。a.縮排位置相同的ifb.在其之前未配對的ifc.在其之前未配對的最近的ifd.同一行上的if.a[][3]={{1},{3,2},{4,5,6},{0}};"4?,a⑵⑵的值是(3)。a.lb.Oc.6d.2.設"char**s;",以下正確的表達式是(2)。a.s=Hcomputef;b.*s=HcomputerH;c.**s=McomputerH;d.*s='c';.對于“mt*pa[5]:”的描述中,(4)是正確的。a.pa是一個指向數(shù)組的指針,所指向的數(shù)組是5個mt型元素b.pa是一個指向某數(shù)組中第5個元素的指針,該元素是mt型變量c.pa[5]表示某個元素的第5個元素的值d.pa是一個具有5個元素的指針數(shù)組,每個元素是一個mt型指針.在下列表示引用的方法中,(1)是正確的。已知:intm=10;&x=m;&y=10;&z;d.float.下列for循環(huán)的次數(shù)為(2)ofbi(1=0,x=0;!x&&i<=5;i++)a.5b.6c.ld.無限.對于C/C++語言的函數(shù),下列敘述中正確的是(Doa.函數(shù)的定義不能嵌套,但函數(shù)調用可以嵌套b.函數(shù)的定義可以嵌套,但函數(shù)調用不能嵌套c.函數(shù)的定義和調用都不能嵌套d.函數(shù)的定義和調用都可以嵌套.在一個被調用函數(shù)中,關于retum語句使用的描述,(4)是錯誤的。a.被調用函數(shù)中可以不用retum語句b.被調用函數(shù)中可以使用多個retimi語句c.被調用函數(shù)中,如果有返回值,就一定要有retum語句d.被調用函數(shù)中,一個return語句可以返回多個值給調用函數(shù).在一個函數(shù)中,要求通過函數(shù)來實現(xiàn)一種不太復雜的功能,并且要求加快執(zhí)行速度,選用(1)。a.內聯(lián)函數(shù)b.重載函數(shù)c.遞歸調用d.嵌套調用.使用fseek函數(shù)可以實現(xiàn)的操作是(1)。a.改變文件指針的當前位置b.文件的順序讀寫c.文件的隨機讀寫d.以上都不對.下列存儲標識符中,(3)的可見性與存在性不一致。a.外部類b.自動類c.內部靜態(tài)類d.寄存器類.在如下結構定義中,不正確的是(2)。a.structstudent{intno;chainame[10];floatscore;};b.structstud[20](intno;chainame[10];floatscore;};c.structstudent(intno;chainame[10];floatscore;}stud[20];d?structintno;cliarname[10];floatscore;}stud[100];.將兩個字符串連接起來組成一個字符串時,選用(3)函數(shù)。a.strlen()b.strcpy()c.strcat()d.strcmp().(4)不是構造函數(shù)的特征a.構造函數(shù)的函數(shù)名與類名相同b.構造函數(shù)可以重載c.構造函數(shù)可以設置缺省參數(shù)d.構造函數(shù)必須指定類型說明.己知:類A中一個成員函數(shù)說明如下:voidSet(A&a);其中,A&的含義是(3)。a.指向類A的指針為ab.將a的地址值賦給變量Setc.a是類A對象的引用,用來作函數(shù)Set()的參數(shù)d.變量A與a按位與作為函數(shù)Set()的參數(shù).己知:pnnt()函數(shù)是一個類的常成員函數(shù),它無返回值,下列表示中,(1)是正確的。a.voidpimt()const;b.constvoidpimt();c.voidconstpimt();d.voidpimt(const);.關于虛函數(shù)的描述中,(3)是正確的。a.虛函數(shù)是一個static類型的成員函數(shù)b.虛函數(shù)是一個非成員函數(shù)c.基類中說明了虛函數(shù)后,派生類中將其對應的函數(shù)可不必說明為虛函數(shù)d.派生類的虛函數(shù)與基類的虛函數(shù)具有不同的參數(shù)個數(shù)和類型.關于new運算符的下列描述中,(4)是錯的。a.它可以用來動態(tài)創(chuàng)建對象和對象數(shù)組b.使用它創(chuàng)建的對象和對象數(shù)組可以使用運算符delete刪除c.使用它創(chuàng)建對象時要調用構造函數(shù)d.使用它創(chuàng)建對象數(shù)組時必須指定初始值二、問答題(15分)(3分)虛析構函數(shù)有什么作用?(3分)拷貝構造函數(shù)在哪幾種情況下調用?(4分)函數(shù)重載與函數(shù)覆蓋有什么不同,它們與多態(tài)有什么關系?(3分)C++繼承是如何工作的?(2分)類與對象有什么區(qū)別?三、(6分)分析下面程序的運行結果#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分)下面的程序可以統(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ù):%d\nH,count);}提示:mtisalpha(mtch)函數(shù)功能是檢查ch是否是字母五、(8分)定義一個字符棧類Stack(包括類的實現(xiàn))。數(shù)據(jù)成員包括一個存放字符的數(shù)組stck□和一個棧指針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二、問答題1、虛析構函數(shù)有什么作用?解答要點:對象銷毀時,需要調用析構函數(shù)。在多態(tài)調用時,是用基類的指針訪問派生類的對象。如果析構函數(shù)是非虛函數(shù),則基類指針只能訪問基類的析構函數(shù),而不能訪問派生類的析構函數(shù),導致派生類對象銷毀時,沒有調用派生類的析構函數(shù),只是調用了基類的析構函數(shù)。如果把析構函數(shù)定義成虛函數(shù),則可克服這個問題。2、拷貝構造函數(shù)在哪幾種情況下調用?解答要點:用一個對象初始化另一個對象時當用對象作為函數(shù)參數(shù)傳遞時當函數(shù)返回對象時3、函數(shù)重載與函數(shù)慢蓋有什么不同,它們與多態(tài)有什么關系?解答要點:函數(shù)重載是指函數(shù)名相同,而函數(shù)的參數(shù)個數(shù)或類型不同:覆蓋是指在派生類中成員函數(shù)與基類成員函數(shù)的函數(shù)名、參數(shù)個數(shù)、類型與返回值均相同:中正是通過虛函數(shù)的漁蓋,實現(xiàn)多態(tài)的功能。4、CH繼承是如何工作的?解答要點:繼承使得派生類能夠使用基類的公有和保護成員,從而實現(xiàn)代碼的復用,派生類可以增加成員,也可以隱藏和覆蓋基類的成員。對于公有繼承,基類成員的訪問權限在派生類保持不變。5、類與對象有
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度車場租賃及停車場綠化美化服務協(xié)議4篇
- 科技引領下的宇宙探索進展
- 二零二五年度車輛融資租賃合同違約責任答辯狀樣本8篇
- 二零二五年度車輛買賣合同含車輛綠色環(huán)保認證3篇
- 二零二五年度草坪圍欄施工與城市排水系統(tǒng)配套合同2篇
- 2025年度個人知識產(chǎn)權代理傭金協(xié)議4篇
- 二零二五年度櫥柜衣柜模塊化設計生產(chǎn)合同4篇
- 2025年度個人車位買賣合同范本(寫字樓)3篇
- 高效體育訓練學生體能提升的秘密武器
- 2025年度綠色有機牛奶產(chǎn)銷一體化合作合同范本4篇
- 第八講 發(fā)展全過程人民民主PPT習概論2023優(yōu)化版教學課件
- 實體瘤療效評價標準RECIST-1.1版中文
- 王崧舟:學習任務群與課堂教學變革 2022版新課程標準解讀解析資料 57
- 企業(yè)新春茶話會PPT模板
- GB/T 19185-2008交流線路帶電作業(yè)安全距離計算方法
- 2022年上海市初中畢業(yè)數(shù)學課程終結性評價指南
- DIC診治新進展課件
- 公路工程施工現(xiàn)場安全檢查手冊
- 1汽輪機跳閘事故演練
- 禮品(禮金)上交登記臺賬
- 普通高中英語課程標準詞匯表
評論
0/150
提交評論