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

下載本文檔

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

文檔簡介

姓名:___________時間:___________DCCBBAADAD一、選擇題(1*10=10)1.如果派生類以proctected方式繼承基類,則原基類的protected和public成員在派生類的訪問性分別是:D.public和public.public和protectedC.protected和public.protected和protectedprotectedprotected和public成員均變成protected成員。答案:D2.有如下頭文件:intF1();staticintF2();classsCA{public:intF3();staticintF4();};在所描述的函數中,具有隱含this指針的是:C.F1C.F3.F2.F4本題考查的是this指針。this指針式一個隱含的指針,它隱含于每個類的非靜態(tài)成員函數中,它明確地表譯程序先將對象的地址賦值給this數據成員時,則隱含使用this指針。this指針是指向對象本身的指針,它只存在于類的非靜態(tài)成員中。f1,f2不是成員函數,不存在隱含指針;f4為靜態(tài)成員函數,也不含有this指針;含有this指針的函數在調用時按thiscall調用約定調用。故本題答案為C。3.派生類的成員函數不能訪問基類的:C.共有成員和保護成員C.私有成員.共有成員.保護成員本題考查的是繼承的類型。類的繼承方式有公有繼承、保護繼承和私有繼承三種方式。對于公有繼承基類中的成員訪問屬性不變,對能被繼承。故本題答案為C。4.按照“后進先出”原則組織數據的數據結構是B.隊列.棧C.雙向鏈表.二叉樹答案為B。5.下列關于虛函數的說明中,正確的是:B.從虛基類繼承的函數都是虛函數.虛函數不得是靜態(tài)成員函數C.只能通過指針或者引用調用虛函數.抽象類中的中的成員函數都是虛函數。答案為B。6.已知Valuevalue是Value的一個對象。下列以非成員函數形式重載的運算符函數原型中,正確的是:A.Valueoperator+(Valuev,inti);C.Valueoperator+(Valuev,int=0);.Valueoperator+(Valuev=value,inti);Valueoperator+(Valuev=value,inti=0);7.有如下類的定義:ClassMyClass{intvalue;public:MyClass(intn):value(n){}intgetValue()const{returnvalue;}};則類Myclass的構造函數的個數是:A.1個C.3個B.2個.4個8.有如下類的定義:classConstants{public:staticdoubleGetPI(void){return3.14159;}};Constantsconstants;下列各組語句中,能輸出3.14159的是:B.cout<<constants->GetPI();和cout<<Constants::GetPI();.cout<<constants.GetPI();和cout<<Constants.GetPI();C.cout<<constants->GetPI();和cout<<Constants->GetPI();.cout<<constants.GetPI();和cout<<Constants::GetPI();9.有如下程序:#include<iostream>usingnamespacestd;classVAC{public:intf()const{return3;}intf(){return5;}};intmain(){}VACv1;constVACv2;cout<<v1.f()<<v2.f();return0;運行時的輸出結果是:A.53C.55.35.3310.有如下類聲明:classBase{protected:intamount;public:Base(intn=0):amount(n){}intgetAmount()const{returnamount;}};classDerived:publicBase{protected:intvalue;public:Derived(intm,intn):value(m),Base(n){}intgetData()const{returnvalue+amount;}};已知x是一個Derived對象,則下列表達式中正確的是:B.x.value+x.getAmount();C.–x.amount;二、填空題(8*2=16).x.getData()+x.getAmount();.x.value+x.amount;400_64444return*this_DogspeakVoice1.下列中a的值是___400_____#defineAAA200#defineBBBAAA+100inta=BBB*22.以下為WindowsNT下的32位程序,請計算sizeof的值。charstr[]=“Hello”char*p=str;intn=10;請計算sizeof(str)=____5_____sizeof(p)=____4___sizeof(n)=____4____voidFunc(charstr[100]){}//請計算sizeof(str)=___4______void*p=malloc(100);//請計算sizeof(p)=_____4____3.補充完整下面的類定義:classXCH{char*a;public:XCH(char*aa){//構造函數a=newchar[strlen(aa)+1];strcpy(a,aa);}XCH&operator=(constXCH&x){//重載賦值函數delete[]a;a=newchar[strlen(x.a)+1];strcpy(a,x.a);______;}~XCH(){delete[]a;}};____return*this____________________________________________________________________4.請寫出下面程序的輸出結果#include<iostream>usingnamespacestd;classAnimal{public:virtualchar*getType()const{return"Animal";}virtualchar*getVoice()const{return"Voice";}};classDog:publicAnimal{public:char*getType()const{return"Dog";}char*getVoice()const{return"Woof";}};voidtype(Animal&a){cout<<a.getType();}voidspeak(Animala){cout<<a.getVoice();}intmain(){Dogd;type(d);cout<<"speak";speak(d);cout<<endl;return0;}______DogspeakVoice______________________________三、問答題(5*10+9+15=74)1.編寫類String的拷貝構造函數和賦值函數(可以調用C++/C的字符串庫函數)(15)。已知類String的原型為:classString{public:String(constchar*str=NULL);String(constString&other);~String(void);//普通構造函數//拷貝構造函數//析構函數String&operate=(constString&other);//賦值函數private:char*m_data;//用于保存字符串};請編寫String的上述4個函數。//String的析構函數String::~String(void)//3分{delete[]m_data;//由于m_data是內部數據類型,也可以寫成deletem_data;}//String的普通構造函數String::String(constchar*str)//6分{if(str==NULL){m_data=newchar[1];//若能加NULL判斷則更好*m_data=‘0’}else{intlength=strlen(str);m_data=newchar[length+1];//若能加NULL判斷則更好strcpy(m_data,str);}}//拷貝構造函數String::String(constString&other)//3分{intlength=strlen(other.m_data);m_data=newchar[length+1];//若能加NULL判斷則更好strcpy(m_data,other.m_data);}//賦值函數String&String::operate=(constString&other)//13分{//(1)檢查自賦值//4分if(this==&other)return*this;//(2)釋放原有的內存資源//3分delete[]m_data;//(3)分配新的內存資源,并復制內容//3分intlength=strlen(other.m_data);m_data=newchar[length+1];//若能加NULL判斷則更好strcpy(m_data,other.m_data);//(4)返回本對象的引用//3分return*this;}2.不調用C++/C的字符串庫函數,請編寫函數strcmp的實現(xiàn)。intstrcmp(constchar*src,constchar*dst)char*strcpy(char*strDest,constchar*strSrc){char*address=strDest;while(*strDest++=*strSrc++)NULL;returnaddress;}3.F(n)=F(n-1)+F(n-2),F(0)=1,F(1)=1.分別用遞歸和循環(huán)求F(5)(10)。publicintR(intnum){if(num<=0){num=1;}elseif(num==1){num=1;}else{num=R(num-1)+R(num-2);}returnnum;}publicintc(intnum){inta=1;intb=1;intc=0;for(inti=0;i<num-2;i++){c=a+b;a=b;b=c;}returnc;}4.寫一算法,對單鏈表實現(xiàn)就地逆置(不要構造新結點)(10)。node*reserve(node*head){node*p1,*p2,*p3;if((head==NULL)||(head->next==NULL))returnhead;p1=head;p2=p1->next;while(p2!=NULL){p3=p2->next;p2->next=p1;p1=p2;p2=p3;}head->next=NULL;p1=head;returnhead;}5.從冒泡排序、直接插入排序、二分插入排序和選擇排序四種排序算法中,選擇其中一種算法,寫出它的實現(xiàn)?(10)#include<stdio.h>#include<time.h>#include<math.h>#include<malloc.h>voidBubbleSort(int*L,intN){//冒泡inti,j;intt;for(i=1;i<=N;i++){for(j=N;j>i;j--)if(L[j]<L[j-1]){t=L[j];L[j]=L[j-1];L[j-1]=t;}}}intSelectMinKey(int*L,intN,intn){inti,min=n;for(i=n+1;i<=N;i++)if(L[i]<L[min])min=i;returnmin;}voidSelectSort(int*L,intN){//選擇inti,j;intt;for(i=1;i<N;i++){j=SelectMinKey(L,N,i);if(i!=j){t=L[i];L[i]=L[j];L[j]=t;}}}voidInsertSort(int*L,intN){//插入inti,j;for(i=2;i<=N;i++){if(L[i]<L[i-1]){L[0]=L[i];L[i]=L[i-1];for(j=i-2;L[0]<L[j];j--)L[j+1]=L[j];L[j+1]=L[0];}}}voidShellInsert(int*L,intN,intdk){//對順序表L作一趟希爾插入排序。本算法對算法10.1作了以下修改://1.前后記錄位置的增量是dk,而不是1;//2.r[0]只是暫存單元,不是哨兵。當j<=0時,插入位置已找到。inti,j;for(i=dk+1;i<=N;++i)if(L[i]<L[i-dk]){//需將L.r[i]插入有序增量子表L[0]=L[i];//暫存在L.r[0]for(j=i-dk;(j>0&&L[0]<L[j]);j-=dk)L[j+dk]=L[j];//記錄后移,查找插入位置L[j+dk]=L[0];//插入}}//ShellInsertvoidShellSt(int*L,intN,intdlta[],intt){//算法10.5//按增量序列dlta[0..t-1]對順序表L作希爾排序。for(intk=0;k<t;++k)ShellInsert(L,N,dlta[k]);//一趟增量為dlta[k]的插入排序}//ShellSortvoidShellSort(int*L,intN){//希爾intt=(int)log(N);intk,*dlta;dlta=(int*)malloc(t*4);//產生增量序列for(k=0;k<t;k++)dlta[k]=(int)pow(2,t-k)-1;ShellSt(L,N,dlta,t);}intmain(){intN=250;inti,j,k;intt;intti[16];int*L;srand(time(NULL));printf("長度\t|冒泡\t|選擇\t|插入\t|希爾\n");printf("--------+-------------------------------------------------------------");for(j=0;N<100000;j++){L=(int*)malloc((N+1)*4);t=0;for(i=1;i<=N;i++)L[i]=rand();ti[t++]=clock();BubbleSort(L,N);ti[t++]=clock();for(i=1;i<=N;i++)L[i]=rand();ti[t++]=clock();SelectSort(L,N);ti[t++]=clock();for(i=1;i<=N;i++)L[i]=rand();ti[t++]=clock();InsertSort(L,N);ti[t++]=clock();for(i=1;i<=N;i++)L[i]=rand();ti[t++]=clock();ShellSort(L,N);ti[t++]=clock();printf("\n%d\t",N);for(k=0;k<4;k++)printf("|%d\t",(ti[2*k+1]-ti[2*k]));N*=5;}printf("\n\n");}6.一個類中,const類型成員函數的主要作用是什么?在該函數中可以調用該類的什么類型的成員變量和成員函數?該類的一個非const對象可以調用const成員函數嗎?(10)(1)可以定義const常量,具有不可變性。(2)便于進行類型檢查,使編譯器對處理內容有更多了解,消除了一些隱患。例如:voidf(constinti)編譯器就會知道i是一個常量,不允許修改;(3)可以避免意義模糊的數字出現(xiàn),同樣可以很方便地進行參數的調整和修改。同宏定義一樣,可以做到不變則已,一變都變!如(1)中,如果想修改Max的內容,只需要:consti

溫馨提示

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

最新文檔

評論

0/150

提交評論