2022年福建省寧德市全國計算機等級考試C++語言程序設(shè)計模擬考試(含答案)_第1頁
2022年福建省寧德市全國計算機等級考試C++語言程序設(shè)計模擬考試(含答案)_第2頁
2022年福建省寧德市全國計算機等級考試C++語言程序設(shè)計模擬考試(含答案)_第3頁
2022年福建省寧德市全國計算機等級考試C++語言程序設(shè)計模擬考試(含答案)_第4頁
2022年福建省寧德市全國計算機等級考試C++語言程序設(shè)計模擬考試(含答案)_第5頁
已閱讀5頁,還剩25頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

2022年福建省寧德市全國計算機等級考試C++語言程序設(shè)計模擬考試(含答案)學(xué)校:________班級:________姓名:________考號:________

一、1.選擇題(10題)1.派生類的構(gòu)造函數(shù)的成員初始化列表中,不能包含()。

A.基類的構(gòu)造函數(shù)B.派生類中子對象的初始化C.基類的子對象初始化D.派生類中一般數(shù)據(jù)成員的初始化

2.已知二叉樹后序遍歷序列是dabec,中序遍歷序列是debac,它的前序遍歷序列是

A.acbedB.decabC.deabcD.cedba

3.為使該程序執(zhí)行結(jié)果為10,那么應(yīng)該在程序劃線處填入的語句是()。#include<iostream>usingnamespacestd;classMyClass{public:MyClass(inta){x=a;}___________//取x值private:intx;};intmain(){MyClassmy(10);cout<<my.GetNum()<<end1;return0;}

A.returnx;

B.intGetNum(){returnx;}

C.intreturnx;

D.voidGetNum(){returnx;}

4.若有如下類定義:classB{voidfunl(){}protected:doublevarl:public:voidfun2(){}};classD:publicB{protected:voidfun3(){}};已知obj是類D的對象,下列語句中不違反類成員訪問控制權(quán)限的是()。

A.obj.funl();B.obj.varl;C.obj.fun2();D.obj.fun3();

5.帶有虛基類的多層派生類,構(gòu)造函數(shù)的成員初始化列表中都要列出虛基類的構(gòu)造函數(shù),這樣將對虛基類的子對象初始化______。

A.與虛基類下面的派生類個數(shù)有關(guān)B.多次C.二次D.一次

6.有如下程序:#include<iostream>usingnamespaeestd;classA{public:A(inti):rl(i){}voidprint(){cout<<'E'<<rl<<'-';}voidprint()const}cout<<'C'<<rl*rl<<'-';}private:intrl;};intmain(){Aal(2);eonstAa2(4);a1.print();a2.print();return0;}程序的輸出結(jié)果是

A.運行時出錯B.E2-C16-C.C4-C16-D.E2-E4-

7.語句ofstreamf("SALARY.DAT",ios::applios::binary);的功能是建立流對象f,試圖打開文件SALARY.DAT并與之連接,并且

A.若文件存在,將文件寫指針定位于文件尾;若文件不存在,建立一個新文件

B.若文件存在,將其置為空文件;若文件不存在,打開失敗

C.若文件存在,將文件寫指針定位于文件首;若文件不存在,建立一個新文件

D.若文件存在,打開失?。蝗粑募淮嬖?,建立一個新文件

8.下列敘述中正確的是A.一個邏輯數(shù)據(jù)結(jié)構(gòu)只能有一種存儲結(jié)構(gòu)

B.數(shù)據(jù)的邏輯結(jié)構(gòu)屬于線性結(jié)構(gòu),存儲結(jié)構(gòu)屬于非線性結(jié)構(gòu)

C.一個邏輯數(shù)據(jù)結(jié)構(gòu)可以有多種存儲結(jié)構(gòu),且各種存儲結(jié)構(gòu)不影響數(shù)據(jù)處理的效率

D.一個邏輯數(shù)據(jù)結(jié)構(gòu)可有多種存儲結(jié)構(gòu),且各種存儲結(jié)構(gòu)影響數(shù)據(jù)處理的效率

9.有如下程序:#include(iostream>usingnamespacestd;ClassTest{public:Test(){n+=2;}~Test(){n-=3;)staticintgetNum(){returnn;}private:staticintn;};intTest::n=1;intmain(){Test*p=newTest;

A.n=0B.n=1C.n=2D.n=3

10.最初的計算機編程語言是()。

A.機器語言B.匯編語言C.高級語言D.低級語言

二、單選題(13題)11.下列敘述中正確的是()。

A.棧是“先進(jìn)先出”的線性表

B.隊列是“先進(jìn)后出”的線性表

C.循環(huán)隊列是非線性結(jié)構(gòu)

D.有序線性表既可以采用順序存儲結(jié)構(gòu),也可以采用鏈?zhǔn)酱鎯Y(jié)構(gòu)

12.有如下程序:#include<iostream>usingnamespacestd;intmain(){inta[6]={23,l5,64,33,40,58};ints1,s2;s1=s2=a[0];for(int*p=a+1;p<a+6;p++){if(sl>*p)s1=*P;if(s2<*p)s2=*p;}cout<<s1+s2<<endl;return0;}運行時的輸出結(jié)果是()。A.23B.58C.64D.79

13.有如下程序:#include<iostream>usingnamespacestd;classA{public:virtualvoidf(){cout<<1;}voidg(){cout<<2;}};classB:publicA{public:virtualvoidf(){cout<<3;}voidg(){cout<<4;}};voidshow(A&a){a.f();a.g();}intmain(){Bb;show(b);return0;}運行時的輸出結(jié)果是_________。A.12B.34C.14D.32

14.下列程序的運行結(jié)果是()。#include<iostream.h>intx=5;intfun(inta){intc:c=X*a:returnC;}voidmain(){intx=3,a=4;x=x+fun(a);cout<<"x="<<x<<endl;}A.x=15B.x=17C.x=23D.x=25

15.定義無符號整數(shù)為Uint,下面可以作為類Uint實例化值的是()。

A.-369B.369C.0.369D.整數(shù)集合{1,2,3,4,5}

16.假定MyClass為一個類,則執(zhí)行MyClassa,b(2),*p;語句時,自動調(diào)用該類構(gòu)造函數(shù)()次。

A.2B.3C.4D.5

17.下列程序段中包含4個函數(shù),其中具有隱含this指針的是()。intfunl();classTest{public:intfun2();friendintfun3();staticintfun4();};A.funlB.fun2C.fun3D.fun4

18.以下各選項組中,均是C++語言關(guān)鍵字的組是()。

A.publicoperatorthis

B.shodstringstatic

C.itwhile>=

D.priratecoutprintf

19.有如下頭變件:intf1StatiCintf2();ClassMApubliC:intf3;1statiCintf4;};在所描述的函數(shù)中,具有隱含的this指針的是()。A.flB.f2C.BD.f4

20.在______情況下適宜采用inline定義內(nèi)聯(lián)函數(shù)。

A.函數(shù)體含有循環(huán)語句B.函數(shù)體含有遞歸語句C.函數(shù)代碼少、頻繁調(diào)用D.函數(shù)代碼多、不常調(diào)用

21.下列選項中正確的語句是()。

A.A.chars[3];s="BOOK!";

B.B.char*s;s={"BOOK!"};

C.C.chars[10];s="BOOK";

D.D.char*S;s="BOOK!";

22.關(guān)于continue語句敘述不正確的是()。

A.continue語句用于循環(huán)體中,結(jié)束循環(huán)

B.continue語句用于循環(huán)體中,它使執(zhí)行流跳出循環(huán)體中尚未執(zhí)行的語句,并進(jìn)行下一循環(huán)判斷

C.continue可以用于if語句中

D.continue語句不能代替break語句

23.有如下類定義和變量定義:

classParents{

public:

intpublicuata;

private:

intprivateData;

};

classChildA:publicParents{/*類體略*/};

classChildB:privateParents{/*類體略*/);

ChildAa;

ChildBb;

下列語句中正確的是A.cout<<

B.cout<<

C.cout<<

D.cout<<

三、2.填空題(12題)24.在面向?qū)ο蠓椒ㄖ?,類之間共享屬性和操作的機制稱為【】。

25.在C++中,派生類有三種繼承方式,它們分別是公有繼承、私有繼承和【】。

26.一個項目具有一個項目主管,一個項目主管可管理多個項目,則實體“項目主管”與實體“項目”的聯(lián)系屬于【】的聯(lián)系。

27.閱讀下面的程序:

#include<iomanip.h>

voidmain()

{

cout.fill('!');

cout<<setiosflags(ioS::left)<cout<<setw(6)<<1024<<endl;

}

寫出該程序的輸出結(jié)果:【】。

28.已知遞歸函數(shù)f的定義如下:

intf(intn)

{

if(n<=1)return1;//遞歸結(jié)束情況

elseretuliln*f(n-2);//遞歸

}

則函數(shù)調(diào)用語句f(5)的返回值是【】。

29.若要訪問指針變量q所指向的數(shù)據(jù),應(yīng)使用表達(dá)式______。

30.__[12]__是一系列相關(guān)函數(shù)的模型或樣板,這些函數(shù)的__[13]__形式相同,只是所針對的__[14]__不同。

31.下面程序是一個堆棧的類模板,在橫線處填上適當(dāng)語句,完成類模板的定義。

#defineMAXSIZE100

template<classT>

classStack

{

Ts[MAXSIZE];

inttop;

public:

stack()

{

top=1;

}

voidpush(TnewValue)

{

if(top<MAXSIZE)

{

top=top+1;

s[top]=newValue;

}

else

cout<<"堆棧滿,無法進(jìn)棧"<<end1;

}

voidpop();

};

【】

{

if(top>1)

{

cout<<s[top]<<end1;

top=top-1;

}

else

cout<<"堆???"<<end1;

}

32.對于長度為n的有序線性表,在最壞情況下,二分法查找只需比較______次。

33.下列程序的執(zhí)行結(jié)果是______。

#include<iostream.h>

classStudent

{

public:

Student(intxx){x=xx;}

virtualfloatcalcTuition();

protected:

intx;

};

floatStudertt::calcTuition()

{

returnfloat(x*x);

}

classGraduateStudent:publicStudent

{

public:

GraduateStudent(intxx):Student(xx){}

floatcalcTuition();

};

floatGraduatestudent::calcTuition()

{

returnfloat(x*2);

}

voidmain()

{

Students(20);

GraduateStudentgs(30);

cout<<s.calcTuition()<<""<<gs.calcTuition()<<endl;

//計算學(xué)生s和研究生gs的學(xué)費

}

34.假設(shè)a、b均是整型變量,則表達(dá)式a=2,b=5,a++,b++,a+b值為【】。

35.在面向?qū)ο蟮某绦蛟O(shè)計中,類描述的是具有相似性質(zhì)的一組【】。

四、程序改錯題(10題)36.使用VC++6.0打開考生文件夾下的源程序文件1.cpp,該程序運行有問題,請改正main函數(shù)中的錯誤,使程序的輸出結(jié)果為:number=1number=10number=100注意:不要改動main函數(shù),不能增加或刪除行。也不能更改程序的結(jié)構(gòu),錯誤的語句在//******error******的下面。試題程序:#include<iostream.h>classTC{public:TC(inti){number=i;}voidSetNumber(intm){number=m;}intGetNumberconst{returnnumber;}voidPrintconst{cout<<"number="<<number<<endl;}private:intnumber;};voidmain{//********error********TCobjl;objl.Print;TCobj2(3);//********error********objl.number=10;//********error*‰******TC.SetNumber(100);objl.Print;obj2.Print;}37.使用VC++6.0打開考生文件夾下的源程序文件1.cpp,該程序運行時有錯誤,請改正錯誤,使程序正常運行,并且要求最后一個catch必須拋出執(zhí)行的任何異常。程序異常,輸出信息為errorOERROR注意:不要改動main函數(shù),不能增加或刪除行,也不能更改程序的結(jié)構(gòu),錯誤的語句在//******error******的下面。試題程序:#include<iostream.h)intmain{try{throw("error");}//********error********catch(chars){cout<<s<<endl;}try{throw((int)0);}//********error********catch{cout<<i<<endl;}try{throw(O);throw("error");}//********error********catch{cout<<"ERROR"<<endl;}return0;}38.使用VC++6.0打開考生文件夾下的源程序文件1.cpp,該程序運行時有錯誤,請改正程序中的錯誤。本程序要求實現(xiàn)的功能為從鍵盤輸入一個字符串,并將結(jié)果保存到文件1.txt中。注意:不要改動main函數(shù),不能增加或刪除行,也不能更改程序的結(jié)構(gòu),錯誤的語句在//******error******的下面。試題程序:#include<iostream>#include<fstream>//********error********usingstd;voidWriteFile(char*s){ofstreamout1;//********error********out1.open("1.txt",binary|app);for(inti=0;s[i]!=0;i++){//********error********out1.puts(s[i]);}out1.close;}voidClearFile{ofstreamout1;out1.open("1.txt");out1.close;}intmain{chars[1024];ClearFile;cout<<"pleaseinputastrin9:"<<endl;cin.getline(s,1024);WriteFile(s);return0;}

39.使用VC++6.0打開考生文件夾下的源程序文件1.cpp,該程序運行時有錯,請改正其中的錯誤,使程序正常運行,并使程序輸出的結(jié)果為:

sizeof(S1)=5

sizeof(s2)=10

sizeof(s3)=1

注意:不要改動main函數(shù),不能增加或刪除行,也不能更改程序的結(jié)構(gòu),錯誤的語句在//******error******的下面。

(1)不能刪除assert()語句。

(2)只能修改后面的數(shù)字。

提示:assert函數(shù)如果為假,則會產(chǎn)生一個中斷異常。

試題程序:

#include<iostream.h>

#include<assert.h>

voidmain()

{

char*s1="abc":

//********error********

assert(sizeof(s1)==3):

cout<<"sizeof(s1)=5"<<endl;

chars2[10]="ab":

//********error********

assert(sizeof(s2)==2);

cout<<"sizeof(s2)=10"<<endl;

chars3=23:

//********error********

assert(sizeof(s3)==4);

cout<<"sizeof(s3)=1"<<endl;

return;

}

40.使用VC++6.0打開考生文件夾下的源程序文件1.cpp,該程序運行時有錯。請改正程序中的錯誤,使程序輸出的結(jié)果為1003732注意:錯誤的語句在//******error******的下面,修改該語句即可。試題程序:#include<iostream.h>//******error******voidmain{//******error******intm=0142://******error******intn=0X27:intq=32;cout<<m<<endl;cout<<n<<endl;cout<<q<<endl;return;}41.使用VC++6.0打開考生文件夾下的源程序文件1.cpp。本程序要求輸入一個字符串,然后將其中的小寫字母改成大寫字母,字符可能輸入多行,當(dāng)輸入字符“?”時,默認(rèn)字符輸入結(jié)束,最后把結(jié)果輸出到屏幕中。注意:不要改動main函數(shù),不能增加或刪除行,也不能更改程序的結(jié)構(gòu),錯誤的語句在//******error******的下面。試題程序:#include<iostream.h>voidmain{inti=0;charstr[120];cout<<"Enterastringendwith?."<<endl;//********error********cin.getline(str,120);//********error********while(str){//********error********if(str[i])=a)str[i]=str[i]-a+A;i++;}cout<<str<<endl;return;}42.使用VC++6.0打開考生文件夾下的源程序文件1.cpp,但該程序運行有問題,請改正main函數(shù)中的錯誤,使該程序的輸出結(jié)果正確。程序輸出:88注意:錯誤的語句在/********error********/的下面。修改該語句即可,其他的語句不能修改。試題程序:#include(iostream.h>classCO{public:/********error********/staticintn=0:CO{n++:}~CO{n--:}}:/********error********/intCO::n;voidmain{COobj;COobj2[7];CO*C=NULL:c=&obj:/********error********/eout<<C.n<<endl;cout<<C0::n<<endl;}43.使用VC++6.0打開考生文件夾下的源程序文件1.cpp,該程序運行時有錯誤,請改正錯誤,使程序正常運行,并且要求最后一個catch必須拋出執(zhí)行的任何異常。

程序異常,輸出信息為

error

O

ERROR

注意:不要改動main函數(shù),不能增加或刪除行,也不能更改程序的結(jié)構(gòu),錯誤的語句在//******error******的下面。

試題程序:

#include<iostream.h)

intmain

{

try

{

throw("error");

}

//********error********

catch(chars)

{

cout<<s<<endl;

}

try

{

throw((int)0);

}

//********error********

catch

{

cout<<i<<endl;

}

try

{

throw(O);

throw("error");

}

//********error********

catch

{

cout<<"ERROR"<<endl;

}

return0;

}

44.使用VC++6.0打開考生文件夾下的源程序文件1.cpp,該程序運行有問題,請改正main函數(shù)中的錯誤,使程序的輸出結(jié)果為:

number=1

number=10

number=100

注意:不要改動main函數(shù),不能增加或刪除行。也不能更改程序的結(jié)構(gòu),錯誤的語句在//******error******的下面。

試題程序:

#include<iostream.h>

classTC

{

public:

TC(inti)

{

number=i;

}

voidSetNumber(intm)

{

number=m;

}

intGetNumberconst

{

returnnumber;

}

voidPrintconst

{

cout<<"number="<<number<<endl;

}

private:

intnumber;

};

voidmain

{

//********error********

TCobjl;

objl.Print;

TCobj2(3);

//********error********

objl.number=10;

//********error*‰******

TC.SetNumber(100);

objl.Print;

obj2.Print;

}

45.使用VC++6.0打開考生文件夾下的源程序文件

1.cpp,該程序運行時有錯誤,請改正程序中的錯誤。本程序要求實現(xiàn)的功能為從鍵盤輸入一個字符串,并將結(jié)果保存到文件1.txt中。

注意:不要改動main函數(shù),不能增加或刪除行,也不能更改程序的結(jié)構(gòu),錯誤的語句在

//******error******的下面。

試題程序:

#include<iostream>

#include<fstream>

//********error********

usingstd;

voidWriteFile(char*s)

{

ofstreamout1;

//********error********

out1.open("1.txt",binary|app);

for(inti=0;s[i]!=0;i++)

{

//********error********

out1.puts(s[i]);

}

out1.close;

}

voidClearFile

{

ofstreamout1;

out1.open("1.txt");

out1.close;

}

intmain

{

chars[1024];

ClearFile;

cout<<"pleaseinputastrin9:"<<endl;

cin.getline(s,1024);

WriteFile(s);

return0;

}

五、綜合應(yīng)用題(2題)46.使用VC++6.0打開考生文件夾下的源程序文件3.cpp。其中定義的類不完整,按要求完成下列操作,將類的定義補充完整。(1)定義類的公有數(shù)據(jù)成員函數(shù)N0、Name[32],其中N0是int型的數(shù)據(jù),Name[32]為字符型。請在注釋1后添加適當(dāng)?shù)恼Z句。(2)完成函數(shù)Set的定義,分別設(shè)置N0和Name的值,請在注釋2后添加適當(dāng)?shù)恼Z句。(3)完成函數(shù)print,請在注釋3后添加適當(dāng)?shù)恼Z句,輸出結(jié)果如下:N0=12345Name=HelloWorld!(4)添加默認(rèn)構(gòu)造函數(shù),設(shè)置N0為0,Name為空,請在注釋4后添加適當(dāng)?shù)恼Z句。注意:增加或者修改代碼的位置已經(jīng)用符號表示出來,請不要修改其他的程序代碼。試題程序:#include<iostream.h>classTC{public://********1********//********2********{No=no;for(inti=0;strName[i]!=0;i++){Name[i]=strName[i];Name[i+1]=0;}}voidprint(){//********3********}TC(){//********4********)};intmain(){TCstu:stu.Set(12345,"HelloWorld!");stu.print();return0;}

47.(1)應(yīng)添加“virtualvoidGetNamt!=0;”。

(2)應(yīng)添加“constchar*GetName2”。

(3)應(yīng)添加“TC2(char*str)”。

(4)應(yīng)添加“m_str[i]=0;”。

【解析】本題第1處要求“在類TC1中定義接口函數(shù)GetName,為純虛函數(shù)”。在C++中,在基類中用virtual聲明成員函數(shù)為虛函數(shù)。純虛函數(shù)是在聲明虛函數(shù)時被“初始化”為0的函數(shù),即“virtualvoidGetName=0;”。第2處要求“函數(shù)GetName2實現(xiàn)獲得名字的緩存,但只獲得讀允許操作這個緩存”。只能引用數(shù)據(jù)成員,而不能修改,所以使用常成員函數(shù),其一般形式為“const函數(shù)類型函數(shù)名”,即“constchar*GetName2”。第3處要求“實現(xiàn)TC2的構(gòu)造函數(shù)”。TC2的構(gòu)造函數(shù)與類TC2的名稱應(yīng)該相同,而且第3處的大括弧中是對字符數(shù)組str的操作,所以類TC2的構(gòu)造函數(shù)中的參數(shù)為str,即這里補全為“TC2(char*str)”。第4處要求“完成TC2的構(gòu)造函數(shù),實現(xiàn)對名字的處理”,補全類TC2的構(gòu)造函數(shù),構(gòu)造函數(shù)中的名字變量str對應(yīng)于類TC中的成員變量m_str,所以這里補全變量賦值操作“m_str[i]=0;”。

六、3.綜合應(yīng)用題(2題)48.使用VC6打開考生文件夾下的工程test39_3。此工程包含一個test39_3.cpp,其中定義了類ARRAY和其派生類STUDENT,其中類ARRAY是一個多態(tài)數(shù)組,該數(shù)組可以存放學(xué)校中的各類人員,如學(xué)生等,但它們的定義并不完整。請按要求完成下列操作,將程序補充完整。

(1)定義類ARRAY的三個公有成員純虛函數(shù)add(inta)、del(intd)和show(ints),它們的返回值類型都是void型的。請在注釋“//**1**”之后添加適當(dāng)?shù)恼Z句。

(2)添加派生類STUDENT的保護(hù)數(shù)據(jù)成員float型的二維數(shù)組table,使其有row行和s_col列,請在注釋“//**2**”。之后添加適當(dāng)?shù)恼Z句。

(3)完成派生類STUDENT的成員函數(shù)del(ints)的定義,實現(xiàn)把二維數(shù)組第s行刪除的功能,即把該行清零,請在注釋“//**3**”之后添加適當(dāng)?shù)恼Z句。

(4)完成派生類STUDENT的成員函數(shù)show(ints)的定義,使其以格式“"跳格table[行號][列號]is_換行”依次輸出s行的各個元素,請在注釋“//**4**”之后添加適當(dāng)?shù)恼Z句。

源程序文件test39_3.cpp清單如下:

#include<iostream.h>

#include<stdlib.h>

constintrow=100;

constints_col=3;

classARRAY

{

public:

//**1**

}

classSTUDENT:publicARRAY

{

public:

virtualvoidadd(ints)

{

cout<<"\tInputdataofSTUDENT."<<endl;

cout<<"\tFirst:";

cin>>table[s][0];

cout<<"\tSecond:";

cin>>table[s][1];

cout<<"\tThird:";

cin>>table[s][2];

}

virtualvoiddel(ints);

virtualvoidshow(ints);

protected:

inti;

//**2**

};

voidSTUDENT::del(ints)

{

//**3**

}

voidSTUDENT::show(ints)

{

cout<<endl;

for(i=0;i<=s_col-1;i++)

{

//**4**

}

}

intmain()

{

STUDENTst;

ARRAY*ap;

ap=&st;

ap->add(3);

ap->show(3);

ap->del(3);

ap->show(3);

return0;

}

49.使用VC6打開考生文件夾下的工程test38_3。此工程包含一個test38_3.cpp,其中定義了類complex,但類的定義并不完整。請按要求完成下列操作,將程序補充完整。

(1)添加類complex的無參數(shù)的構(gòu)造函數(shù)的定義,將私有成員real和imag都初始化為0。請在注釋“//**1**”之后添加適當(dāng)?shù)恼Z句。

(2)添加類complex的帶兩個參數(shù)的重載構(gòu)造函數(shù),兩個參數(shù)r和i都是double類型,要求將r賦值給私有成員real,i賦值給私有成員imag,同時允許調(diào)用時參數(shù)i可是省略,請在注釋“//**2**”之后添加適當(dāng)?shù)恼Z句。

(3)完成類complex重載加法函數(shù)的定義,該函數(shù)直接返回一個類complex的對象,同時把參數(shù)對象c的實部real和虛部imag分別與當(dāng)前對象對應(yīng)部分分別相加,請在注釋“//**3**”之后添加適當(dāng)?shù)恼Z句。

(4)完成類complex的友元函數(shù)print的定義,使其以格式“real+imagi”輸出,請在注釋“//**4**”之后添加適當(dāng)?shù)恼Z句。

源程序文件test38_3.cpp清單如下;

#include<iostream.h>

classcomplex

{

public:

//**1**

//**2**

{

real=r;imag=i;

}

complexoperator+(complex&c);

friendvoidprint(complex&c);

private:

doublereal,imag;

};

complexcomplex::operator+(complex&c)

{

//**3**

}

//**4**

cout<<c.real<<"+"<<c.imag<<"i"<<endl;

}

voidmain()

{

complexc1(2.0,3.0),c2(4.0,-2.0),c3;

c3=c1+c2;

print(c3);

c3=c3+complex(3.5);

print(c3);

}

參考答案

1.C解析:本題考核構(gòu)造函數(shù)。在C++中,構(gòu)造函數(shù)不能被繼承,因此,派生類的構(gòu)造函數(shù)必須通過調(diào)用基類的構(gòu)造函數(shù)來初始化基類子對象。所以,在定義派生類的構(gòu)造函數(shù)時,除了對自己的數(shù)據(jù)成員進(jìn)行初始化外,還必須負(fù)責(zé)調(diào)用基類構(gòu)造函數(shù)使基類的數(shù)據(jù)成員得以初始化。如果派生類中還有子對象,還應(yīng)包含對子對象初始化的構(gòu)造函數(shù).但是它不負(fù)責(zé)基類中子對象的初始化。

2.D解析:中序遍歷的遞歸算法如下:①遍歷左子樹;②訪問根結(jié)點;③遍歷右子樹。前序遍歷的遞歸算法如下:①訪問根結(jié)點;②遍歷左子樹;③遍歷右子樹。后序遍歷的遞歸算法如下:①遍歷左子樹;②遍歷右子樹;③訪問根結(jié)點。由后序遍歷結(jié)果dabec可知c是根結(jié)點,且無右子樹。再由左子樹的后序遍歷結(jié)果dabe可知,e是左子樹的根結(jié)點,且由左子樹的中序遍歷結(jié)果deba可知,d是左子樹的左子樹結(jié)點,b和a是左子樹的右子樹結(jié)點。再次由后序遍歷結(jié)果ab可知,a是左子樹結(jié)點。b是根結(jié)點。至此,各結(jié)點在樹中的位置已完全確定。

3.B解析:此題為完成類的定義。由題可知,橫線處要填的語句為類中的成員函數(shù),它實現(xiàn)的功能是取x的值(即返回x的值)。又由主函數(shù)中的語句“cout<<my.GetNum()<<end1;”可知,此成員函數(shù)的函數(shù)名為GetNum()。其函數(shù)體為:{returnx;}。

4.C

5.D

6.B解析:在類中重載函數(shù)的情況下,常對象調(diào)用類的常成員函數(shù),非常對象調(diào)用類的非常成員函數(shù),故答案為B。

7.A解析:本題考查的是文件流的操作,app表示追加方式打開文件(即將指針移至文件尾),binary表示以二進(jìn)制方式打開文件。

8.D解析:數(shù)據(jù)的存儲結(jié)構(gòu)是指數(shù)據(jù)結(jié)構(gòu)(數(shù)據(jù)的邏輯結(jié)構(gòu))在計算機中的表示,又稱物理結(jié)構(gòu)。數(shù)據(jù)的存儲結(jié)構(gòu)有順序存儲結(jié)構(gòu)和鏈?zhǔn)酱鎯Y(jié)構(gòu)兩種。不同存儲結(jié)構(gòu)的數(shù)據(jù)處理效率不同。根據(jù)以上分析可知,D選項為正確答案。

9.A解析:本題考查的是靜態(tài)數(shù)據(jù)成員和靜態(tài)成員函數(shù)。靜態(tài)數(shù)據(jù)成員是類中所有對象共享的成員,而不是某個對象的成員。題目中的靜態(tài)數(shù)據(jù)成員n的運算具有疊加性,執(zhí)行“n+=2”和“n-=3”后n的值為0。

10.A計算機編程語言有三類,機器語言,匯編語言,高級語言。最初的編程語言是機器語言。

11.D棧是先進(jìn)后出的線性表,所以A錯誤;隊列是先進(jìn)先出的線性表,所以B錯誤;循環(huán)隊列是線性結(jié)構(gòu)的線性表,所以C錯誤。故答案為D選項。

12.DD?!窘馕觥扛鶕?jù)題意,找出數(shù)組a中最大值sl和最小值s2并計算二者的和。

13.D本題主要考查了虛函數(shù)。本題中show函數(shù)的形參是基類A的對象的引用,main()函數(shù)中的調(diào)用語句show(b);中的實參b是派生類B的對象,這是利用類型兼容規(guī)則中的派生類對象可以初始化基類的引用。執(zhí)行show函數(shù)中的語句a.f();函數(shù)f()是虛函數(shù),在虛函數(shù)情況下,通過基類引用將訪問被引用的派生類B的對象b的同名虛成員函數(shù)f(),故此處輸出3,然后執(zhí)行show函數(shù)中的語句a.g();,函數(shù)g()是實函數(shù),在實函數(shù)的情況下,通過基類指針(或引用)所調(diào)用的只能是基類的那個函數(shù)版本,故此處輸出2,show函數(shù)執(zhí)行結(jié)束,main()函數(shù)執(zhí)行結(jié)束。因此本題運行時的輸出結(jié)果為32。

14.CC?!窘馕觥坑芍骱瘮?shù)main入手,首先x被賦值為3,a被賦值為4,然后調(diào)用fun函數(shù),參數(shù)為4,所以在fun函數(shù)中的a=4。而主程序中的x作用域是由它定義開始到cout輸出,在fun函數(shù)中無效。而在fun函數(shù)定義前的變量X作用域是整個程序,所以fun函數(shù)中的x值為5,這樣C的值就為20。在主函數(shù)中的x+fun(a)中的x為靠近這條語句的x定義,即3,所以最后x的值為20+3=23。

15.BB。【解析】A是有符號數(shù),C是浮點數(shù),D是集合,并不是類的實例化對象,只有B完全符臺。

16.A解析:C++在創(chuàng)建一個對象時,會調(diào)用類的構(gòu)造函數(shù)。語句MyClassab(2),*p;創(chuàng)建了兩個對象a、b和指針p,在創(chuàng)建對象a和b后會調(diào)用構(gòu)造函數(shù),而創(chuàng)建指針p時,由于p本身不是對象,所以不調(diào)用類的構(gòu)造函數(shù)。

17.BB。【解析】this指針是成員函數(shù)所屬對象的指針,是指向類對象的地址,是一個隱含的指針,隱含于每個類的非靜態(tài)成員函數(shù)中。funl是外部函數(shù),fun3是友元函數(shù),fun4是靜態(tài)成員函數(shù),故選B。

18.A關(guān)鍵字是系統(tǒng)已預(yù)定義的單詞,在程序中有不同的用途,考生應(yīng)該熟記。

19.C只有類的非靜態(tài)成員函數(shù)才隱禽this指針,其作用域是類內(nèi)部,當(dāng)類的非靜態(tài)成員函數(shù)中訪問類的非靜態(tài)成員時,編譯器會自動將對象本身的地址作為一個隱含參數(shù)傳遞給函數(shù),而不必一定寫上this。所以本題答案為c。

20.A

21.DD?!窘馕觥吭谶x項D中.字符指針s指向字符串常量BOOK!。故選項D正確。

22.A解析:continue是跳出了本次循環(huán)中尚未執(zhí)行的語句,重新執(zhí)行循環(huán),但沒有終止循環(huán)。注意:注意break,continue和goto語句的用法和區(qū)別。

23.A

24.繼承繼承解析:類是面向?qū)ο笳Z言中必備的程序語言結(jié)構(gòu),用來實現(xiàn)抽象數(shù)據(jù)類型。類與類之間的繼承關(guān)系實現(xiàn)了類之間的共享屬性和操作,一個類可以在另一個已定義的類的基礎(chǔ)上定義,這樣使該類型繼承了其超類的屬性和方法,當(dāng)然,也可以定義自己的屬性和方法。

25.保護(hù)繼承保護(hù)繼承解析:共有三種繼承方式。

26.一對多(或1:N)一對多(或1:N)解析:兩個文體集間的聯(lián)系實際上是實體集間的函數(shù)關(guān)系,這種函數(shù)關(guān)系可以有3種,即一對一(1;1)的聯(lián)系、一對多(1:N)或多對一(N:1)的聯(lián)系和多對多(M:N)的聯(lián)系。

27.400!!!

28.15

29.*q

30.[12]函數(shù)模板[13]源代碼[14]數(shù)據(jù)類型[12]函數(shù)模板\r\n[13]源代碼\r\n[14]數(shù)據(jù)類型

31.template<classT>/voidstack<T>::pop()template<classT>/voidstack<T>::pop()解析:本程序用類模板方式設(shè)計一個棧類stack<T>,其中有兩個私有數(shù)據(jù)成員s[](存放棧元素)和top(棧頂元素下標(biāo)),以及兩個公有成員函數(shù)push()(元素入棧)、pop()(元素出棧)。

32.log2nlog2n解析:二分法查找,也稱拆半查找,是一種高效的查找方法。能使用二分法查找的線性表必須滿足兩個條件:用順序存儲結(jié)構(gòu);線性表是有序表。對于長度為n的有序線性表,在最壞情況下,二分法查找只需比較log2n次

33.40060

34.99解析:本題考核運算符的應(yīng)用,題中的逗號運算符用于將多個表達(dá)式串在一起,逗號運算符的左邊總是不返回的,這就是說,最右邊表達(dá)式的值才是整個表達(dá)式的值。逗號運算符的結(jié)合性為從左到右。所以從左開始計算,a被賦值為2,b被賦值為5,然后a和b分別自增1,最后返回a+b,即9。

35.對象對象解析:將屬性、操作相似的對象歸為類,也就是說,類是具有共同屬性、共同方法的對象的集合。36.(1)應(yīng)改為“TCobjl(1);”。(2)應(yīng)改為“0bj1.SetNumber(10);”。(3)應(yīng)改為“0bj2.SelNumber(100);”?!窘馕觥勘绢}第1處的“TCobjl;”語句是聲明TC類的對象0bj1,根據(jù)TC類構(gòu)造函數(shù)的定義TC(inti),存在整型參數(shù),并且題目要求第一個輸出結(jié)果兩1,所以補全參數(shù)1,即第1處的“TCobjl(1);”。第2處處的“objl.number=10;”應(yīng)該是調(diào)用成員函數(shù)SetNumber賦值。在C++中成員函數(shù)的使用形式應(yīng)該是:對象名.成員函數(shù),所以修改為“obj1.SetNumber(10);”。類是對象的抽象,而對象是類的具體實例。第3處“TC.SetNumber(100);”語句中的TC為類,并不是對象,這里應(yīng)該使用定義的對象,即obj2,所以將語句修改為“obj2.SetNumber(100);”。37.(1)應(yīng)改為“catch(char*s)”。(2)應(yīng)改為“cateh(inti)”。(3)應(yīng)改為“catch(…)”?!窘馕觥勘绢}中第1個標(biāo)識前的異常拋出語句為“throw("error");”,其中的類型為字符串。所以對應(yīng)的異常捕捉語句catch中應(yīng)該符合這個類型,而程序中給出的語句“catch(chars)”是字符型的,所以第1處的語句修改為“catch(char*S)”。第2個標(biāo)識前的異常拋出語句為“throw((int)0);”,其中的類型為int。對應(yīng)的異常捕捉語句catch中應(yīng)該符合這個類型,所以補充catch子句中的類型,否則如果找不到匹配的catch塊,系統(tǒng)就會調(diào)用一個系統(tǒng)函數(shù),使程序終止運行。即第2處的語句修改為“catch(inti)”。如果在catch子句中沒有指定異常信息的類型,那么就用刪節(jié)號“…”表示它可以捕捉任何類型的異常信息,即修改為“catch(…)”。38.(1)應(yīng)改為“usingnamespacestd;”。(2)應(yīng)改為“outl.open("1.txt",ios::binary|ios::app);”。(3)應(yīng)改為“out1.put(s[i]);”?!窘馕觥勘绢}第1處的“usingstd;”是在程序中引入標(biāo)準(zhǔn)命名空間std,對于C++中引入標(biāo)準(zhǔn)命名空間的格式,缺少namespace,所以第1處的語句修改為“usingnamespacestd;”。第2處,調(diào)用成員函數(shù)open中,輸入、輸出方式是在ios類中定義的,所以“out1.open("1.txt",binary|app);”語句缺少類ios,即第2處的語句修改為“out1.open("1.txt",ios::binary|ios::app);”。第3個標(biāo)識應(yīng)該用流成員函數(shù)put輸出字符,所以第3處的語句修改為“out1.put(s[i]);”。

39.(1)應(yīng)改為“assert(sizeof(s1)==4);”。

\n(2)應(yīng)改為“assert(sizeof(s2)==1O);”。

\n(3)應(yīng)改為“assert(sizeof(s3)==1);”。

\n【解析】assert函數(shù)如果為假,則會產(chǎn)生一個中斷異常。所以要讓它正常執(zhí)行輸出結(jié)果,那么assert函數(shù)只有為真,才不會產(chǎn)生中斷異常。“assert(sizeof(s1)==3);”語句中“sizeof(s1)==3”為假,這會使程序產(chǎn)生異常,不能正常執(zhí)行。因為str1的值為abc,但是它還有一個尾符,它的長度應(yīng)該是4,而不是3,所以在第1處修改為“assert(sizeof(s1)==4);”。str2[10]說明,str2的空間為10,在第2處修改為“assert(sizeof(s2)==10);”。charstr3=23;語句說明23是字符,所占存儲空間為1,所以修改為“assert(sizeof(s3)==1);”。

40.(1)“voidmain”。(2)“intm=0144;”。(3)“intn=OX25;”或“intn===0x25;”?!窘馕觥勘绢}主要考查了主函數(shù)定義及冪同進(jìn)制之間的轉(zhuǎn)換,包括十進(jìn)制到八進(jìn)制,十進(jìn)制到十六進(jìn)制。主函數(shù)定義的定義形式為“main”,函數(shù)名之后必須是一對括號,因此第1處應(yīng)改為“voidmain”。cout輸出默認(rèn)是以十進(jìn)制方式輸出的,根據(jù)題目要求輸出的結(jié)果可發(fā)現(xiàn)變量的初值不正確,十進(jìn)制的100對應(yīng)八進(jìn)制的144,卡進(jìn)制的37對應(yīng)十六進(jìn)制的25,因此2和3應(yīng)分別改成“intm=0144;”,“intn=0×25;”或“intn=0×25;”。41.(1)應(yīng)改為“ein.getline(str,120,?);”。

(2)應(yīng)改為“while(str[i])”。

(3)應(yīng)改為“if(str[i]>=a&&str[i]<=2)”。

【解析】本題中要求以輸入字符“?”為結(jié)束符,用于字符輸入的流成員函數(shù)getline函數(shù)讀入一行字符,格式為“cin.getline(字符數(shù)組,字符個數(shù),終止標(biāo)志字符)”,所以第1處改為“cin.getline(str,120,?);”。第2處的“while(str)”語句應(yīng)該是判斷字符串str中的每一個字符是否為結(jié)束符,若不是結(jié)束符,在循環(huán)中判斷每一個字符是否為小寫,若為小寫,則轉(zhuǎn)換。所以應(yīng)該修改為“while(str[i])”。第3處的“if(str[i]>=a)”語句是判斷字符str[i]是否為小寫字符,而現(xiàn)有的語句只是判斷字符是否大于a,但是小寫字符應(yīng)該是a到2,所以修改為“if(str[i]>=a&&str[i]>=z)”。42.(1)“staticintn=O”應(yīng)改為“staticintn;”。(2)“intCO::n;”應(yīng)改為“intCO::n=0;”。(3)“cout<<c.n<<endl;”應(yīng)改為“cout<<c->n<<endl;”?!窘馕觥勘绢}要在屏幕上輸出兩個字符,首先要靜態(tài)變量初始化,第1處應(yīng)改為“staticintn;”,第2處要給n賦值,第3處輸出時引用c的對象,應(yīng)改為“cout<<c->n<<endl;”。43.(1)應(yīng)改為“catch(char*s)”。(2)應(yīng)改為“cateh(inti)”。

(3)應(yīng)改為“catch(…)”。

【解析】本題中第1個標(biāo)識前的異常拋出語句為“throw("error");”,其中的類型為字符串。所以對應(yīng)的異常捕捉語句catch中應(yīng)該符合這個類型,而程序中給出的語句“catch(chars)”是字符型的,所以第1處的語句修改為“catch(char*S)”。第2個標(biāo)識前的異常拋出語句為“throw((int)0);”,其中的類型為int。對應(yīng)的異常捕捉語句catch中應(yīng)該符合這個類型,所以補充catch子句中的類型,否則如果找不到匹配的catch塊,系統(tǒng)就會調(diào)用一個系統(tǒng)函數(shù),使程序終止運行。即第2處的語句修改為“catch(inti)”。如果在catch子句中沒有指定異常信息的類型,那么就用刪節(jié)號“…”表示它可以捕捉任何類型的異常信息,即修改為“catch(…)”。

44.(1)應(yīng)改為“TCobjl(1);”。

\n(2)應(yīng)改為“0bj1.SetNumber(10);”。

\n(3)應(yīng)改為“0bj2.SelNumber(100);”。

\n【解析】本題第1處的“TCobjl;”語句是聲明TC類的對象0bj1,根據(jù)TC類構(gòu)造函數(shù)的定義TC(inti),存在整型參數(shù),并且題目要求第一個輸出結(jié)果兩1,所以補全參數(shù)1,即第1處的“TCobjl(1);”。第2處處的“objl.number=10;”應(yīng)該是調(diào)用成員函數(shù)SetNumber賦值。在C++中成員函數(shù)的使用形式應(yīng)該是:對象名.成員函數(shù),所以修改為“obj1.SetNumber(10);”。類是對象的抽象,而對象是類的具體實例。第3處“TC.SetNumber(100);”語句中的TC為類,并不是對象,這里應(yīng)該使用定義的對象,即obj2,所以將語句修改為“obj2.SetNumber(100);”。

45.(1)應(yīng)改為“usingnamespacestd;”。

\n(2)應(yīng)改為“outl.open('1.txt',ios::binary|ios::app);”。

\n(3)應(yīng)改為“out1.put(s[i]);”。

\n【解析】本題第1處的“usingstd;”是在程序中引入標(biāo)準(zhǔn)命名空間std,對于C++中引入標(biāo)準(zhǔn)命名空間的格式,缺少namespace,所以第1處的語句修改為“usingnamespacestd;”。第2處,調(diào)用成員函數(shù)open中,輸入、輸出方式是在ios類中定義的,所以“out1.open('1.txt',binary|app);”語句缺少類ios,即第2處的語句修改為“out1.open('1.txt',ios::binary|ios::app);”。第3個標(biāo)識應(yīng)該用流成員函數(shù)put輸出字符,所以第3處的語句修改為“out1.put(s[i]);”。

46.(1)應(yīng)添加“intNo;charName[32];”。(2)應(yīng)添加“voidSet(intno,char*strName)”。(3)應(yīng)添加“cout<<"No="<<No<<endl<<"Name="<<Name<<endl;”。(4)應(yīng)添加“No=Name[0]=0;”?!窘馕觥康?處要求“定義類的公有數(shù)據(jù)成員函數(shù)N0、Name[32],其中N0為int型,Name[32]為字符型”。在已有程序中類定義的public區(qū)域,定義

溫馨提示

  • 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

提交評論