2023年甘肅省張掖市全國計算機等級考試C++語言程序設計預測試題(含答案)_第1頁
2023年甘肅省張掖市全國計算機等級考試C++語言程序設計預測試題(含答案)_第2頁
2023年甘肅省張掖市全國計算機等級考試C++語言程序設計預測試題(含答案)_第3頁
2023年甘肅省張掖市全國計算機等級考試C++語言程序設計預測試題(含答案)_第4頁
2023年甘肅省張掖市全國計算機等級考試C++語言程序設計預測試題(含答案)_第5頁
已閱讀5頁,還剩41頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

2023年甘肅省張掖市全國計算機等級考試

C++語言程序設計預測試題(含答案)

學校:班級:姓名:考號:

一、1.選擇題(10題)

i.()是以一種完全通用的方法來設計函數或類而不必預先說明將被使

用的每個對象的類型。

A.模板B.類C.對象D.函數

2.一些重要的程序語言(如C語言和Pascal語言)允許過程的遞歸調用。

而實現遞歸調用中的存儲分配通常用()o

A.A.棧B.堆C.數組D.鏈表

3.有以下程序:#include〈iostream〉#include(string)usingnamespace

std;classvisited{private:intnumber;char*name;public:staticintglob;

voidsetmes(char*a);};voidvisited::setmes(char*a){name=new

char[strlen(A)+1];strcpy(name,A);numbei-++glob;}intvisited::glob-O;

intmain(){visitedperson[10];inti;charstr[8];for(i=0;i<5;i++){cin?str;

person[i].setmes(str);}cout<

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

4.在C++語言中,封裝是借助于什么達到的?

A.結構B.類C.數組D.函數

5.語句ofstreamf("DATA.DAT",ios_base::applios_lios_bfise::binary);

的功能是建立流對象f,并試圖打開文件DATA.DAT并與之連接,而且

()o

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

文件

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

C若文件存在,將文件指針定位于文件尾:若文件不存在,建立一個新

文件

D.若文件存在,打開失敗;若文件在,建立一個新文件

6.下列概念中,不屬于面向對象方法的是()。

A.對象B.類C.繼承D.過程調用

7.有關析構函數的說法不正確的是()。

A.析構函數有且只有一個

B.析構函數無任何函數類型

C.析構函數和構造函數一樣可以有形參

D.析構函數的作用是在對象被撤消時收回先前分配的內存空間

8.如果一個函數帶有參數說明,則參數的默認值應該在()中給出。

A.函數定義B.函數聲明C.函數定義或聲明D.函數調用

9.下面程序的運行結果為

#include<iostream.h>

voidmain()

for(inta=0,x=0;!x&&a<=10;a++)

a++;

)

cout<<a<<endl;

)

A.10B.11C.12D.0

10.關于靜態(tài)數據成員的描述中正確的是()o

A.類的靜態(tài)數據成員不是類的所有對象共享的數據

B.類的靜態(tài)數據成員不能被類的成員函數調用

C.類的靜態(tài)數據成員不能被類的構造函數調用

D.類的靜態(tài)數據成員必須進行初始化

二、單選題(13題)

11.結構化程序所要求的基本結構不包括()o

A.順序結構B.GOTO跳轉C.選擇(分支)結構D.重復(循環(huán))結構

12.下面不屬于同一函數模板的是()。

A.template<classtl>tlmax(tl&a,tl&b)template<classt2>t2

max(t2&a,t2&b){...}

B.template<classtl>tlmax(tla,tlb){...}template<classt2>t2max(t2

&a,t2&b){...}

C.template<classtl>tlmax(tl*a,tl*b){...}template<classt2>t2

max(t2&a,t2&b){...}

D.template<classtl>tlmax(tla,tlb){...}template<classt2>t2max(t2

&a,t2&b,t2c){...}

13.下列關于函數的描述中,錯誤的是()o

A.函數可以沒有返回值B.函數可以沒有參數C.函數可以是一個類的

成員D.函數不能被定義為模板

14.下列描述中正確的是()。

A.軟件工程只是解決軟件項目的管理問題

B.軟件工程主要解決軟件產品的生產率問題

C.軟件工程的主要思想是強調在軟件開發(fā)過程中需要應用工程化原則

D.軟件丁二程只是解決軟件開發(fā)中的技術問題

15.下面有關this指針的敘述中,正確的是()。

A.類的成員函數都有this指針

B.任何與類相關的函數都有this指針

C.類的非靜態(tài)成員函數才有this指針

D.類的友元函數都有this指針

16.下面對結構或類中成員的訪問中,不正確的訪問是o

A.*pointer.salary;(其中pointer為指向類對象的指針)

B.pointer->salary;

C.x=orker,salaiy;(其中worker為具有類類型的對象)

D.Location&rA=Al;Intx=rA.GetX();(Location為已定義的類,A為對

象)

17.NULL是指

A.OB.空格C.未知的值或無任何值D.空字符串

18.下面的()選項不能作為函數的返回類型。

A.voidB.intC.newD.long

19.有如下程序:

#include<iostream>

#include<cstring>

usingnamespacestd;

classXCF{

inta;

public:

XCF(intaa=0):a(aa){cout<<"l";}

XCF(XCF&x){a=x.a;cout<<"2";}

~XCF(){cout<<a;}

intGeta(){returna;}

);

intmain(){

XCFdl(5),d2(dl);

XCF*pd=newXCF(8);

cout<<pd->Geta();

deletepd;

return0;

)

運行時的輸出結果是o

A.1215588B.1218855C.12185D.128512

20.某系統(tǒng)總體結構圖如下圖所示::該系統(tǒng)

總體結構圖的深度是()。

A.7B.6C.3D.2

21.下列關于模板形參的描述中,錯誤的是()o

A.模板形參表必須在關鍵字template之后

B.模板形參表必須用括弧()括起來

C.可以用class修飾模板形參

D.可以用typename修飾模板形參

22.對于類定義classA{public:virtualvoidfuncl(){}voidfunc2(){}};

classD:publicA{public:voidfuncl(){cout<<"classBrune1"<<endl;}

virtualvoidfunc2(){cout<<"classBfunc2"<<endl;}};下面正確的

敘述是o

A.A::func2()和B::funcl()都是虛函數

B.A::func2()和B::funcl()都不是虛函數

C.B::funcl()是虛函數,而A::func2()不是虛函數

D.B::funcl()不是虛函數,而A::func2()是虛函數

23.在最壞情況下,冒泡排序所需要的比較次數為

A.n/2B.(n+l)/2C.n(n-l)/2D.n(n+l)/2

三、2.填空題(12題)

24.在結構化分析方法中,用于描述系統(tǒng)中所用到的全部數據和文件的

文檔稱為【】。

25.請將下列模板類Data補充完整。

template<typenameT>

classData{

public:

voidput(Tv){val=v;}

get(){returnval;}//返回數據成員val的值,返回類型不加轉換

private:

Tval;

);

26.下列程序編譯錯誤,是由于劃線處缺少某個語句,該語句是【]o

#include<iostream,h>

classA

private:

intnuml;

public:

A():numl(0){)

A(inti):numl(i){}

);

classB

private:

intnum2

public:

B():num2(0){}

B(inti):num2(i){}

intmy_math(Aobj1,Bobj2);

};

intB::my_math(Aobj1,Bobj2)

)-

return(objI.numl+obj2.num2);

)

voidmain(void)

{

Aobjl(4)

Bobj,obi2(5);

cout<<"objl+obj2:"<<obj.my_math(obj1,obj2);

27.在面向對象方法中,允許作用于某個對象上的操作稱為【】。

28.對基類數據成員的初始化必須在派生類的構造函數中的處執(zhí)

行。

29.寫出執(zhí)行完下列代碼段之后指定變量的值:

boolx=true,y=false,z=false;

x=x&&yIIz;

y=xIIy&&z;

z=!(x!=y)II(y==z);

貝ljx=false,y=false,z=[]o

30.下列程序中需要清理動態(tài)分配的數組,劃線處應有的語句是[]o

#include<iostream,h>

classperson

{

intage,tall;

public:

person(){age=0;tall=40;cout<<"Ababyisborn."<<end1;}

person(inti){age=i,tall=40,cout<<"Aoldperson."<<endl;}

person(inti,inti){age=i;tall=j;cout<<"aoldpersonwithtall."<<

endl;}

?person(){cout<<"persondead."<<end1;}

voidshow()

(

cout<<"age="<<age<<",tall="<<tall<<endl;

)

);

voidmain()

(

person*ptr;

ptr=newperson[3];

ptr[0]=person()

ptr[ll=person(18);

ptr[2]=person(20,120);

for(inti=0;i<3;i++)

ptr[i].show();

31.模板使我們可以用一個代碼段指定一組相關函數(稱為)或一

組相關類(稱為O

32.以下程序的執(zhí)行結果是【】。

#include<iostream>

usingnamespacestd;

classbase

(

public:

virmalvoidwho(){cout<<"BaseClass"<<endl;)

);

classDerivedkpublicBase

(

public:

virtualvoidwho(){cout<<"DerivedlClass"<<endl;}

};

classderived2:publicBase

(

public:

virtualvoidwho(){cout<<"Derived?Class"<<endl;)

);

intmain(intargc,char*argv[])

(

baseobj1,*P;

deliVedlobj2;

derived2obj3;

p=&obj1;p->who();

p=&obj2;p->who();

p=&obj3;p->who();

return0;

)

33.已知有函數f的定義如下:

intf(){

staticints=0;

s+=2;

returns;

)

則在某程序中第二次執(zhí)行函數調用語句f();時,函數f的返回值是_____

34.在任何類中都有三種訪問權限的數據成員,這三種權限是public,

private和【】。

35.虛函數必須是類的【】。

四、程序改錯題(10題)

36.使用VC++6.。打開考生文件夾下的源程序文件1.cpp,該程序

運行時有錯誤,請改正錯誤,使程序正常運行,并且要求最后一個

catch必須拋出執(zhí)行的任何異常。

程序異常.,輸出信息為

error

O

ERROR

注意:不要改動main函數,不能增加或刪除行,也不能更改程序的結

構,錯誤的語句在//******error******的下面。

試題程序:

#include<iostream.h)

intmain

(

try

(

throw("error");

)

II********error********

catch(chars)

(

cout?s?endl;

)

try

(

throw((int)0);

)

II********error********

catch

(

cout?i?endl;

)

try

(

throw(O);

throw("error");

)

II********error********

catch

(

cout?"ERROR"?endl;

returnO;

)

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

1.cpp,該程序運行時有錯誤,請改正程序中的錯誤。本程序要求實

現的功能為從鍵盤輸入一個字符串,并將結果保存到文件1.txt中。

注意:不要改動main函數,不能增加或刪除行,也不能更改程序的結

構,錯誤的語句在

II******error******白勺~mjQ

試題程序:

#include<iostream>

#include<fstream>

!!********error********

usingstd;

voidWriteFile(char*s)

(

ofstreamoutl;

II********error********

outl.open("l.txt",binary|app);

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

{

I!********enor********

outl.puts(s[i]);

)

outl.close;

voidClearFile

ofstreamoutl;

outl.open("l.txt");

outl.close;

}

intmain

(

chars[1024];

ClearFile;

cout?"pleaseinputastrin9:"?endl;

cin.getline(s,1024);

WriteFile(s);

retumO;

}

38.使用VC++6.0打開考生文件夾下的源程序文件1.cpp,該程序運

行時有錯誤,請改正程序中的錯誤,使得程序輸出:

9,8,7,6,5

注意:錯誤的語句在/********error********/的下面,修改該語句即

可。其他的語句不能修改。

試題程序:

#include(iostream.h>

classTC

{

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

TC(inti)

m_i=i,

)

voidprint

(

cout?—m_i?,;

)

public:

intm_i;

);

intmain

I********error********/

inti;

TC04(10);

while(i>5)

I********errOr********/

1++:

04.print;

)

cout?endl;

retumO;

)

39.使用VC++6.0打開考生文件夾下的源程序文件1.cpp,該程序運

行時有錯,請改正其中的錯誤,使程序正常運行,輸出的結果為

Constructor,i=0,

Destructor

注意:錯誤的語句在//******error******的下面,修改該語句即可。

試題程序:

#include(iostream.h)

classTC

(

inti;

public:

TC;

voiddisplay;

~TC;

);

!!***********求

TC:TC

(

cout?"Constructor"?",

i=0;

)

/I******error******

TC:display

|

tout?"i="?i?","?endl;

)

!1******enor******

TC:TC

COUI?"Destructor"?endl:

voidmain

(

TCa;

a.display;

)

40.使用VC++6.0打開考生文件夾下的源程序文件1.叩p,該程序

運行時有錯,請改正其中的錯誤,使程序正常運行,輸出的結果為

Constructor,i=0,

Destructor

注意:錯誤的語句在//******errc)r******的下面,修改該語句即

可。

試題程序:

#include(iostream.h)

classTC

(

inti;

public:

TC;

voiddisplay;

?TC;

};

II******enor******

TC:TC

cout?"Constructor"?","

i=0;

)

I!******error******

TC:display

tout?"i="?i<<","?endl;

1I******error******

TC:TC

COUI?"Destructor"?endl:

}

voidmain

TCa;

a.display;

41.使用VC++6.0打開考生文件夾下的源程序文件1.cpp,該程序

運行有問題,請改正main函數中的錯誤,使程序的輸出結果為:

number=l

number=10

number=100

注意:不要改動main函數,不能增加或刪除行。也不能更改程序的結

構,錯誤的語句在//******error******的下面。

試題程序:

#include<iostream.h>

classTC

(

public:

TC(inti)

(

number=i;

)

voidSetNumber(intm)

{

number=m;

)

intGetNumberconst

(

returnnumber;

)

voidPrintconst

(

cout?"number="?number?endl;

)

private:

intnumber;

};

voidmain

II********enor********

TCobjl;

objl.Print;

TCobj2(3);

II********enor********

objl.number=10;

//********error*%0******

TC.SetNumber(lOO);

objl.Print;

obj2.Print;

)

42.使用VC++6.0打開考生文件夾下的源程序文件1.cpp,該程序

運行時有錯。請改正程序中的錯誤,使程序輸出的結果為

100

37

32

注意:錯誤的語句在//******error******的下面,修改該語句即

可。

試題程序:

#include<iostream.h>

II******enor******

voidmain

II******error******

intm=0142:

I/******ej*j*or******

intn=0X27:

intq=32;

cout<<m<<endl;

cout<<n<<endl;

cout<<q<<endl;

return;

)

43.使用VC++6.。打開考生文件夾下的源程序文件1.cpp,該程序

運行時有錯誤,請改正錯誤,使程序正常運行,并且要求最后一個

catch必須拋出執(zhí)行的任何異常。

程序異常,輸出信息為

error

0

ERROR

注意:不要改動main函數,不能增加或刪除行,也不能更改程序的結

構,錯誤的語句在//******errc)r******的下面。

試題程序:

#include<iostream.h)

intmain

(

try

throw("error");

Ii********error********

catch(chars)

(

cout?s?endl;

}

try

(

throw((int)0);

)

Ii********enoj*********

catch

(

cout?i?endl;

}

try

(

throw(O);

throw("error");

}

/I********error********

catch

(

cout?"ERROR"?endl;

)

returnO;

44.使用VC++6.0打開考生文件夾下的源程序文件1?cppo本程序要

求輸入一個字符串,然后將其中的小寫字母改成大寫字母,字符可能輸

入多行,當輸入字符“?”時,默認字符輸入結束,最后把結果輸出到屏幕

中。

注意:不要改動main函數,不能增加或刪除行,也不能更改程序的結

構,錯誤的語句在//******error******的下面。

試題程序:

#include<iostream.h>

voidmain

(

inti=O;

charstr[120];

cout?"Enterastringendwith?."?endl;

!1********error********

cin.getline(str,120);

II********enol*********

while(str)

I!********enor********

if(str[i])=a)

str[i]=str[i]-a+A;

1++;

cout?str?endl;

return;

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

1.cpp,該程序運行時有錯誤,請改正程序中的錯誤。本程序要求實現

的功能為從鍵盤輸入一個字符串,并將結果保存到文件1.txt中。

注意:不要改動main函數,不能增加或刪除行,也不能更改程序的結

構,錯誤的語句在

1I******error******自勺

試題程序:

#include<iostream>

#include<fstream>

II********enor********

usingstd;

voidWriteFile(char*s)

(

ofstreamoutl;

1I********error********

outl.open("l.txt",binary|app);

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

{

II********enor********

outl.puts(s[i]);

)

outl.close;

)

voidClearFile

(

ofstreamoutl;

outl.open("l.txt");

outl.close;

intmain

chars[1024];

ClearFile;

cout?"pleaseinputastrin9:"?endl;

cin.getline(s,1024);

WriteFile(s);

returnO;

)

五、綜合應用題(2題)

46.使用VC++6.。打開考生文件夾下的源程序文件3.cpp。類

People包括姓名和年齡兩個字段。函數fun獲得年齡比較大的人的姓

名,然后輸出這個姓名到屏幕。

其中定義的類并不完整,按要求完成下列操作,將類的定義補充完

整。

(1)完成類的構造函數功能,請在注釋1后添加適當的語句。

(2)完成構造函數對姓名的賦值,請在注釋2后添加適當的語句。

(3)定義類的友元函數fun,請在注釋3后添加適當的語句。

(4)補充函數fun的年齡比較功能,請在注釋4后添加適當的語句。

注意:增加或者修改代碼的位置已經用符號表示出來,請不要修改其

他的程序代碼。

試題程序:

#include<iostream.h>

classPeople

public:

{

inti;

for(i=0;sUserName[i]!=O;i++)

{m_UserName[i]=sUserNamefi];

)

/*1**1**1**1**1**1>*1**1*

//"不不本不不不本2""""

m_01d=n01d;

)

private:

charm_UserName[32];

intm_01d;

};

voidfun(char*s,People&personl,People&person?

(

/I********4********

if

{

for(inti=0;personl.m_UserName[i]!=O;i+

+)

s[i]=personl.m_UserName[i];

s[i+l]=O;

)

}

else

{

for(inti=0;person2.m_UserName[i]!=O;i+

+)

{s[i]=person2.m_UserName[i];

s[i+l]=O;

)

)

)

voidmain

(

chars[32];

Peoplepl("abc",20);

Peoplep2("def,30):

fun(S,pl,p2);

cout?s?endl:

return;

47.使用VC++6.0打開考生文件夾下的源程序文件3.cpp,其中定

義了類BA、PA1和PA2,其中PA1類由BA類公有派生,PA2類由

PA1類公有派生。上述3個類的定義并不完整,請按要求完成下列操

作,將程序補充完整。

程序輸出結果如下:

10

5

1057

(1)定義類BA的構造函數,該構造函數有一個整型的參數m,在構造

函數中將m賦值給數據成員ao請在注釋1之后添加適當的語句。

(2)定義類PA1的構造函數,該構造函數有兩個整型的參數m和n,在

構造函數中將m賦值給數據成員b,將n作為基類BA構造函數的參

數值傳人。請在注釋2之后添加適當的語句。

(3)定義類PA2的構造函數,該構造函數有3個整型的參數m、n和

k,在構造函數中請將m賦值給數據成員c,將n和k分別賦值給基類

PA1構造函數的參數m和no請在注釋3之后添加適當的語句。

(4)完成類PA2的成員函數show的定義,該函數調用基類成員函數,

輸出基類私有成員a、b及類PA2自身的數據成員C的值,上述3個

值在輸出時用空格隔開。請在注釋4之后添加適當的語句。

注意:除在指定位置添加語句之外,請不要改動程序中的其他內容。

試題程序:

#include(iostream.h>

classBA

{

inta;

public:

intgeta{returna;}

);

classPAl:publicBA

(

intb;

public:

/*1**1**1**1**1**!>*!**1*?1><1**t**1*

//半米不舉木本不木2木木木"木木不

intgetb{retumb;}

};

classPA2:publicPAl

(

intC;

public:

I/*}crjcrjcrj*rjC?*fCr}?r}C<|Cr}?rf*

voidshow

(

//********4********

)

};

voidmain

{

PA2a(7,5,10);

cout?a.geta?endl;

cout?a.getb?endl;

a.show;

六、3.綜合應用題(2題)

48.使用VC6打開考生文件夾下的工程MyProjl。此工程包含千個源程

序文件MyMainl.cpp,其中定義了用于表示日期的類Date,但類Date的

定義并不完整。請按要求完成下列操作,將類Date的定義補充完成:

①定義私有數據成員year、month和day分別用于表示年、月、日,它

們都是int型的數據。請在注釋“〃**1**”之后添加適當的語句。

②完成默認構造函數Date的定義,使Date對象的默認值為:year=l,

month=l,day=l,請在注釋“〃**2**”之后添加適當的語句。

③完成重載構造函數Date(inty,intm,intd)的定義,把數據成員year、

month和day分別初始化為參數y、m和d的值,請在注釋“〃**分**之

后添加適當的語句。

④完成成員函數print的類外定義,使其以“年-月-日”的格式將Date對

象的值輸出到屏幕上。請在注釋“〃**4**”之后添加適當的語句。

注意:除在指定位置添加語句之外,請不要改動程序中的其他內容。

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

//MyMainl.cpp

#include<iostream>

usingnamespacestd;

classDate

(

public:

〃**2**

Date(inty,intm,intd)

〃**3**

}'

voidprint()const;

private:

//datamember

〃**]**

);

voidDate::print()const

(

〃**4**

)

intmain()

(

Datenational_day(1949,10,1);

national_day.print();

return0;

)

49.使用VC6打開考生文件夾下的工程test30_3o此工程包含一個

test30_3.cpp,其中定義了類A、A1和A2,其中A1類由A類公有派

生,A2類由A1類公有派生。上述三個類的定義并不完整,請按要求完

成下列操作,將程序補充完整。

(1)定義類A的構造函數,該構造函數有一個整型的參數x,在構造函數

中請將x賦值給數據成員a。請在注釋“//**1**”之后添加適當的語句。

(2)定義類A1的構造函數,該構造函數有兩個整型的參數x和y,在構

造函數中請將x賦值給數據成員b,將y作為基類A構造函數的參數值

傳入。請在注釋“〃**2**”之后添加適當的語句。

⑶定義類A2的構造函數,該構造函數有三個整型的參數x,y和2,在

構造函數中請將x賦值給數據成員c,將y和z分別賦值給基類A1構

造函數的參數x和y。請在注釋“〃**3**”之后添加適當的語句。

⑷完成類A2的成員函數show的定義,該函數調用基類成員函數,輸

出基類數據成員a和b及類A2自身的數據成員c的值,上述三個值在

輸出時以空格隔開。請在注釋“〃**4**”之后添加適當的語句。

注意:除在指定位置添加語句之外,請不要改動程序中的其他內容。

程序輸出結果如下:

9

6

962

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

#include<iostream.h>

classA

(

inta;

public:

〃**]**

intgeta(){returna;}

);

classAl:publicA

(

intb;

public:

〃**2**

intgetb(){returnb;}

);

classA2:publicAl

(

intc;

public:

〃**3**

voidshow()

(

〃**4**

)

);

voidmain()

{

A2a(2,6,9);

cout<<a.geta()<<endl;

cout<<a,getb()<<end1;

a.show();

參考答案

l.A解析:此題考查的是模板的特點。模板是以一種完全通用的方法來

設計函數或類而不必預先說明將被使用的每個對象的類型。

2.A解析:一些較流行的程序語言允許過程的遞歸調用。遞歸調用就是

過程調用本身。遞歸實現的是:當過程每一次執(zhí)行后,都能返回到最近

一次調用它的過程中。這樣各調用點之間形成一種后進先出關系,而棧

結構正適合來存儲這些調用點。選項A正確。

3.A解析:本題考核靜態(tài)數據成員的應用。分析程序:

①類visited中,定義了兩個私有成員:整型變量number和指針變量

name。兩個公有成員:靜態(tài)數據變量glob和函數setmes()。

②在函數setmes中,把傳入的字符串保存在類的私有成員name中,并

把靜態(tài)數據成員glob自加,同時賦值給私有成員number。

通過以上分析可知,函數setmes()用來記錄輸入的名字(即來訪者的姓

名),靜態(tài)數據變量glob用來記錄有多少來訪者。

在主函數中,輸入5個字符串(即5個來訪者的姓名)后,用來記錄來訪

者數目的靜態(tài)數據成員glob的值變成5°所以程序最后的輸出結果是5。

4.B解析:C++基本的性質就是它的封裝性,而封裝性主要是靠類來實

現的。

5.C

6.D解析:面向對象方法是一種運用對象、類、封裝、繼承、多態(tài)和消

息等概念來構造、測試、重構軟件的方法。面向對象方法從對象出發(fā),

發(fā)展出對象、類、消息、繼承等概念。

7.D

8.C解析:允許在函數的說明或定義時給一個或多個參數指定默認值。

注意不能在函數說明和函數定義時都指定默認參數值,默認參數值應該

在函數名第一次出現時指定。

9.C解析:在進入最后一次循環(huán)時a=10,在循環(huán)體內執(zhí)行“a++;”后a

=11,執(zhí)行完該次循環(huán)體計算for循環(huán)的增量部分后a=12小于10,循

環(huán)結束。

10.D解析:C++類中的靜態(tài)成員變量是該類中所有對象所共有的,它

能夠被類中的任何函數調用,所以選項A)、選項B)、選項C)是錯誤

的。而類的靜態(tài)數據成員是必須要進行初始化才能使用的。

11.BB【解析】1966年Boehm和JaCopini證明了程序設計語言僅僅使用

順序、選擇和重復三種基本控制結構就足以表達出各種其他形式結構的

程序設計方法。

12.D解析:函數模板的重載是靠模板參數的數量不同來區(qū)分的,因為函

數模板是抽象的,有待于進一步實例化,所以靠參數類型無法區(qū)別調用

哪個函數模板。

13.D

Do【解析】函數可以被定義為模板;"template(模板形參表><返回值

類型><函數名〉(模板函數形參表){//函數定義體},”其中〈摸板形參

表〉是由一個或多個〈模板形參〉組成,每個<模板形參〉可以有這幾種

形式:typename.(參數名〉,class<(參數名〉,<類型修飾〉<參數名〉;

前兩種是等價的typename和Class可以互換,它們的參數為虛擬類型

參數;最后一種參數是常規(guī)參數。

14.CC?!窘馕觥寇浖こ淌茄芯亢蛻萌绾我韵到y(tǒng)性的、規(guī)范化的、可

定量的過程化方法來開發(fā)和維護軟件,以及如何把經過時間考驗而證明

正確的管理技術和當前能夠得到的最好的技術方法結合起來。軟件工程

的目標是生產具有正確性、可用性及開銷合宜的產品,它的主要思想是

強調在軟件開發(fā)過程中需要應用工程化原則。

15.C

16.A

17.C解析:此題屬于記憶性的題目,NULL是指未知的值或無任何值。

18.C

new是動態(tài)申請內存空間時使用的關鍵字,不能作為函數的返回類

型,選項A為無返回值,選項B為返回整型,選項D為返回長整型。

19.B

本題主要考查了構造函數、拷貝構造函數和析構函數。main。函數中,

語句XCF\r\ndl(5),d2(dl);先后創(chuàng)建了兩個對象dl和d2。在創(chuàng)建對象

dl時,系統(tǒng)自動調用了構造函數,dl數據成員a的值為5,輸出字符

1;在創(chuàng)建對象d2時是用已創(chuàng)建的對象dl初始化,系統(tǒng)自動調用拷貝

構造函數,對象d2數據成員a的值為5,輸出字符2;然后執(zhí)行語句

XCF\r\n*pd=new\r\nXCF(8);系統(tǒng)再次調用構造函數通過new運算符動

態(tài)創(chuàng)建了一個XCF類的對象,該對象的數據成員a的值為8,輸出字

符1,并將首地址賦給XCF類的指針pd。成員函數Geta()的功能是獲

取數據成員a,因此執(zhí)行語句cout?pd->Geta();輸出8。接著執(zhí)行語句

delete\r\npd;系統(tǒng)自動調用析構函數,輸出指針pd所指向對象的數據

成員a,即輸出8,當main()函數結束時,系統(tǒng)先自動調用析構函數刪

除對象d2,輸出對象d2的數據成員a的值5,然后再次調用析構函數

刪除對象dl,輸出對象dl的數據成員a的值5。因此程序輸出結果為

1218855-

20.C根據總體結構圖可以看出該樹的深度為3,比如:XY系統(tǒng)——功

能2——功能2.1,就是最深的度數的一個表現。

21.B

Bo【解析】主要考查函數模板的定義。聲明一個函數模板的格式為

“template<<模板形參表聲明〉〉〈函數聲明〉",其中〈模板形參〉具有

typename<參數名〉、class<參數名>、<類型修飾〉<參數名〉三種形式,

形參用“o”括起來。

22.C

23.C解析:在長度為n的線性表中,在最壞情況下,冒泡排序需要經過

n/2遍的從前往后的掃描和n/2遍從后往前的掃描,共需n(n-l)/2o

24.數據字典數據字典解析:在結構化分析方法中,用于描述系統(tǒng)中所

用到的全部數據和文件的文檔稱為數據字典°

25.TT解析:定義成員函數需要模板參數聲明,使函數具有通用的類型

以便被替換。

26.friendclassB;friendclassB;解析:在B類中出現了對A類中私有成

員numl的直接訪問,這是不允許的。所以必須要把類B設成類A的友

員就可以編譯通過了。

27.方法方法解析:在面向對象方法中;方法是指允許作用于某個對象

上的各種操作。允許作用于某個對象上的操作稱為方法。

28.成員初始化列表成員初始化列表解析:派生類是基類的具體化,而

基類則是派生類的抽象。派生類也就是基類的具體實現,所以對基類數

據成員的初始化是在派生類的構造函數中成員初始化列表執(zhí)行的。

29.真真解析:本題考核C++運算符運算優(yōu)先級和結合性。執(zhí)行語句

"x=x&&yIIz;”后,x的值變?yōu)閒alseo執(zhí)行“y=xHy&&z;"后,y的值

變?yōu)閒alse,執(zhí)行“z=!(x!=y)IIy==z);”后,z的值變?yōu)閠rue。

3O.delete[]ptrdelete[]ptr解析:本題考察對象數組的銷毀方法,注意刪

除對象數組時,口內不要指定大小。

31.函數模板、類模板函數模板、類模板

32.BaseClassDerivedlClassDerived2Class

33.44解析:此題考查的是局部靜態(tài)變量。局部靜態(tài)變量是在函數或語

句塊中以static關鍵字定義的局部變量。其作用域和普通局部變量一樣

只在定義函數或語句塊中有效,但生存周期卻是和全局變量一樣,一直

延續(xù)到程序結束。故第一次調用f(),局部靜態(tài)變量s變?yōu)?O第二次調

用f(),s又自增2,所以函數f的返回值是4。

34.protectedprotected解析:本題考察類的訪問權限,屬于基本知識,考

生應熟練掌握。

35.成員函數成員函數解析:C++中,只有類的成員函數才能說明為虛

函數。這是因為,虛函數僅適用于有繼承關系的類對象,所以普通函數

不能說明為虛函數。

36.(1)應改為"catch(char*s)”。

⑵應改為“cateh(inti)”。

(3)應改為"catch(…)”。

【解析】本題中第1個標識前的異常拋出語句為“throw("error");",其

中的類型為字符串。所以對應的異常捕捉語句catch中應該符合這個類

型,而程序中給出的語句“catch(chars)”是字符型的,所以第1處的語

句修改為“catch(char*S)”°第2個標識前的異常拋出語句為

“throw((int)0);”,其中的類型為int。對應的異常捕捉語句catch中應

該符合這個類型,所以補充catch子句中的類型,否則如果找不到匹配

的catch塊,系統(tǒng)就會調用一個系統(tǒng)函數,使程序終止運行。即第2處

的語句修改為“catch(inti)”。如果在catch子句中沒有指定異常信息的類

型,那么就用刪節(jié)號"…''表示它可以捕捉任何類型的異常信息,即修

改為“catch(…)”。

37.(1)應改為"usingnamespacestd;"。

(2)應改為“outl.open("l.txt",ios::binaryIios::app);"。

(3)應改為“outl.put(s[i]);九

【解析】本題第1處的“usingstd;”是在程序中引入標準命名空間std,

對于C++中引入標準命名空間的格式,缺少namespace,所以第1處

的語句修改為“usingnamespacestd;第2處,調用成員函數open

中,輸入、輸出方式是在ios類中定義的,所以“outl.open("l.txt",

binaryIapp);”語句缺少類ios,即第2處的語句修改為

“outl.open("l.txt",ios::binaryIios::app);第3個標識應

該用流成員函數put輸出字符,所以第3處的語句修改為

“outl.put(s[i]);

38.(1)應添加“public:

\n(2)“inti”應改為“inti(10);

\n⑶“i++;”應改為“i-;

\n【解析】本題主要考查的是成員的訪問屬性。成員的訪問屬性有公有、

保護和私有3種,而默認的訪問屬性為私有,只有公有成員才能通過類

的對象被訪問。故應在構造函數前添加“public:“,否則該類無法被實例

化。變量的初始化可以通過“=”號,也可以和初始化對象一樣添加構造

參數,題目已要求使用后者。本題要求輸出5個數,while的循環(huán)變量i

每次減1,在i>5時循環(huán),故i初始化應為10。若循環(huán)中i每次增1,則

循環(huán)永遠不會退出。

39.(1)應改為“TC::TC”。

\n(2)應改為"voidTC::display”。

\n(3)應改為“TC::~TC”。

\n【解析】在類的外部定義成員函數時,必須在成員函數前面加上類名

和作用域運算符“::”,作用域運算符用采表示某個成員屬于哪個類,使

用格式為“(類名)::〈成員函數〉((參數函數)),因此第1處應改為“TC::

TC”,默認構造函數沒有參數。由第2處“TC=display”后的語句看,這

是在類外實現TC函數,因此也有作用域運算符使用錯誤問題,display

函數返回值為void,因此第2處的語句應改為“voidTC::display"。由第

3處的語句"(3::1<:”可知,顯然這里是在類外實現析構函數,析構函

數是一個特殊的函數,它的名稱和類名相同,并在前面加“字符,用

采與構造函數加以區(qū)別,因此第3處的語句應改為“TC::~TC”。

40.(1)應改為“TC::TC”。

(2)應改為"voidTC::display”。

(3)應改為“TC::?TC”。

【解析】在類的外部定義成員函數時一,必須在成員函數前面加上類名

和作用域運算符“::”,作用域運算符用采表示某個成員屬于哪個

類,使用格式為“(類名)::〈成員函數〉((參數函數)),因此第1處應改

為“TC::TC”,默認構造函數沒有參數。由第2處“TC::display”后

的語句看,這是在類外實現TC函數,因此也有作用域運算符使用錯

誤問題,display函數返回值為void,因此第2處的語句應改為

“voidTC::display”。由第3處的語句“TC::TC”可知,顯然這里是

在類外實現析構函數,析構函數是一個特殊的函數,它的名稱和類名

相同,并在前面加“?”字符,用采與構造函數加以區(qū)別,因此第3處

的語句應改為“TC::?TC”。

41.(1)應改為"TCobjl(l);

(2)應改為“Objl.SetNumber(lO);”。

(3)應改為“0bj2.SelNumber(lOO);

【解析】本題第1處的“TCobjl;”語句是聲明TC類的對象Objl,根據

TC類構造函數的定義TC(inti),存在整型參數,并且題目要求第一個

輸出結果兩1,所以補全參數1,即第1處的“TCobjl(l);第2處處

的“objl.number=10;”應該是調用成員函數SetNumber賦值。在C+

+中成員函數的使用形式應該是:對象名.成員函數,所以修改為

“objl.SetNumber(lO);類是對象的抽象,而對象是類的具體實

例。第3處“TC.SetNumber(lOO);”語句中的TC為類,并不是對象,

這里應該使用定義的對象,即obj2,所以將語句修改為

“obj2.SetNumber(lOO);

42.(l)“voidmain''。

(2)“intm=0144;

(3)“intn=OX25;”或"intn===0x25;

【解析】本題主要考查了主函數定義及嘉同進制之間的轉換,包括十

進制到八進制,十進制到十六進制。主函數定義的定義形式為

“main”,函數名之后必須是一對括號,因此第1處應改為“voidmain”。

cout輸出默認是以十進制方式輸出的,根據題目要求輸出的結果可發(fā)

現變量的初值不正確,十進制的100對應八進制的144,卡進制的37

對應十六進制的25,因此2和3應分別改成“intm=0144;”,

“intn=0x25;”或"intn=0x25;

43.(1)應改為“catch(char*s)"°

⑵應改為“cateh(inti)”。

(3)應改為"catch(...)"。

【解析】本題中第1個標識前的異常拋出語句為“throw("error");",其

中的類型為字符串。所以對應的異常捕捉語句catch中應該符合這個類

型,而程序中給出的語句“catch(chars)”是字符型的,所以第1處的語

句修改為“catch(char*S)”°第2個標識前的異常拋出語句為

“throw((int)0);”,其中的類型為int。對應的異常捕捉語句catch中應

該符合這個類型,所以補充catch子句中的類型,否則如果找不到匹配

的catch塊,系統(tǒng)就會調用一個系統(tǒng)函數,使程序終止運行。即第2處

的語句修改為“catch(inti)”。如果在catch子句中沒有指定異常信息的類

型,那么就用刪節(jié)號"…''表示它可以捕捉任何類型的異常信息,即修

改為“catch(…)”。

44.(1)應改為“ein.getline(str,120,?);

\n(2)應改為"while(str[i])"°

,,

\n⑶應改為"if(str[i]>=a&&str[i]<=2)o

\n【解析】本題中要求以輸入字符“?”為結束符,用于字符輸入的流成員

函數getline函數讀入一行字符,格式為“cin.getline(字符數組,字符個

數,終止標志字符)”,所以第1處改為“cin.getline(str,120,?);"。第

2處的“while(str)”語句應該是判斷字符串str中的每一個字符是否為結

束符,若不是結束符,在循環(huán)中判斷每一個字符是否為小寫,若為小寫,

則轉換。所以應該修改為“while(str[i])”°第3處的“if(str[i]>=a)”語句是

判斷字符str用是否為小寫字符,而現有的語句只是判斷字符是否大于a,

,,

但是小寫字符應該是a到2,所以修改為“if(str[i]>=a&&str[i]>=z)o

45.(1)應改為"usingnamespacestd;"。

\n(2)應改為"outl.open('l.txt',ios::binary|ios::app);

\n(3)應改為“outl.put(s[i]);”。

\n【解析】本題第1處的“usingstd;”是在程序中引入標準命名空間std,

對于C++中引入標準命名空間的格式,缺少namespace,所以第1處

的語句修改為"usingnamespacestd;"。第2處,調用成員函數open中,

輸入、輸出方式是在ios類中定義的,所以“outl.open”.txt',binary|

app);”語句缺少類ios,即第2處的語句修改為"outl.open(,l.txt',ios::

binary|ios::app);”。第3個標識應該用流成員函數put輸出字符,所

以第3處的語句修改為“outl.put(s[i]);

46.(1)應添力口“People(char*sUserName,intnOld)”。

⑵應添加"m_UserName[i]=O;

(3)應添力口“fhendvoidfun(char*s,People&personhPeople&

person2);

⑷將“i3補充完整為“if(personl.m_Old)person2.mOld)”。

【解析】本題第1處要求“完成類的構造函數”。根據

“classPeople”語句知道People為類,所以類People的構造函數名為

People,根據第1處的大括弧中的語句知道函數中的參數為數組

sUserName存放姓名,整型nOld存放年齡,所以補充構造函數定義

為“People(char*sUserName,intnOtd)”。第2處要求”完成構造函數對姓

名的賊值”。第2處補全姓名賦值,即“m_UserName[i]=O;

溫馨提示

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

評論

0/150

提交評論