2022年云南省麗江市全國計算機等級考試C++語言程序設計真題(含答案)_第1頁
2022年云南省麗江市全國計算機等級考試C++語言程序設計真題(含答案)_第2頁
2022年云南省麗江市全國計算機等級考試C++語言程序設計真題(含答案)_第3頁
2022年云南省麗江市全國計算機等級考試C++語言程序設計真題(含答案)_第4頁
2022年云南省麗江市全國計算機等級考試C++語言程序設計真題(含答案)_第5頁
已閱讀5頁,還剩36頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

2022年云南省麗江市全國計算機等級考試

C++語言程序設計真題(含答案)

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

一、1.選擇題(10題)

1.C++語言中,編譯過程后生成的文件類型為()。

A.*.cppB.*.objC.*.hD.*.exe

2.所有在函數中定義的變量,連同形式參數,都屬于

A.全局變量B.局部變量C.靜態變量D.寄存器變量

3.有如下程序:#include<iostream>usingnamespacestd;classpoint

{intx,y;public:point(intvx,intvy){x=vx;y=vy;}point(){x=0;y

=0;}pointoperator+(pointpl){pointp;intpx=x+pl.x;intpy=y+pl.y;

returnpoint(px,py);}pointoperator-(pointpl){pointp;intpx=x-pl.x;

intpy=y-ply;returnpoint(px,py);}voidprint(){cout<<x<<","<

<y<<endl;}};intmain(){pointpl(10,10),p2(20,20);pl=pl+p2;

pl.print();return0;}執行后的輸出結果是()。

A.10,10B.20,20C.10,20D.30,30

4.有如下程序:#include<iostream>#include<iomanip>using

nanespacestd;classCSum{intx,y;public:CSum(intx0,inty0):x(x0),y(y0){}

friendostream&operator<<(ostream&os,constCSum&xa){os<<

setw(5)<<xa.x+xa.y;returnos;}};intmain(){CSumy(3,5);cout<<

setfillC*')<<8;cout<<y;return0;}執行上面程序的輸出是()。

A.88B.****88c.****8****8D.8****8

5.面關于類的靜態成員,說法正確的是o

A?類的靜態成員函數只能訪問類的靜態數據成員

B.類的靜態成員函數可直接訪問類的所以數據成員

C.類的每個對象都有一份自己的靜態數據成員

D.靜態數據成員只能通過“類名::”進行訪問

6.若有說明:mt[3][4]={0};則下面敘述正確的()。

A.只有元素s[0]⑼可得到初值。

B.此說明語句不正確

C.數組s中各個元素都可得到初值,但其值不一定為0

D.數組s中每個元素均可得到初值0

7.下列選項,不正確的是

A.for(inta=l;a<=10;a++);

B.inta=l;do{a++;}while(a<=10)

C.inta=l;while(a<=10){a++;}

D.for(inta=l;a<=10;a++)a++;

8.設單鏈表中結點的結構為(data,link)。已知指針q所指結點是指針p

所指結點的直接前驅,若在*q與*p之間插入結點*s,則應執行下列哪

一個操作?()o

A.s->link=p->link;p->link=s

B.q->link=s;s->link=p

C.p->link=s->link;s->link=p

D.p->link=s;s->link=q

9.在E-R圖中,用來表示實體的圖形是

A.矩形B.橢圓形C.菱形D.三角形

10.下列選項中,作為是數據庫系統的核心的是()。

A.數據庫B.數據模型C.軟件工具D.數據庫管理系統

二、單選題(13題)

11.以下不能正確創建輸出文件對象并使其與磁盤文件相關聯的語句是

()o

A.ofstreammyfile;mynle.openf'd:ofile.txf,);

B.ofstream*mynle=newofstream;mynle->opened:Ofile.txt^^);

C.ofstreammyhle("d:ofile.txf,);

D.ofstream*mynle=new("d:ofile.txf,);

(21)以下程序的執行結果是().

#include<iostream.h>

classTestClass2

(

public:

TestClass2(){};

TestCIass2(inti,intj);

voidprintb();

private:

inta,b;

};

classTestClassl

{

public:

TestClass1(){}

TestClassl(inti,intj);

voidprinta();

private:

TestClass2c;

};

TestClass1::TestClassl(inti,intj):c(ij)

()

voidTestClassl::printaQ

(

c.printbO;

)

TestClass2::TestClass2(inti,intj)

(

a=i;

b=j;

}

voidTestClass2::printb()

(

cout?"a="<<a?","?"b="?b?endl;

}

voidmainQr

(

TestClasslm(7,9);

m.printaO;

)

A)a=7.b=8B)a=8,b=7C)a=7,b=9D)a=8,b=9

13.下列說法中不正確的是

A.數據庫減少了數據冗余B.數據庫中的數據可以共享C.數據庫避免

了一切數據的重復D.數據庫具有較高的數據獨立性

14.在結構化設計方法中生成的結構圖(SC)中,帶有箭頭的連線表示

A.模塊之間的調用關系B.程序的組成成份C.控制程序的執行順序D.

數據的流向

15.只能作為成員函數重載的是

A.=B.++C.*D.new

16.下列各C++程序段中,不包含復合語句的選項為()。

A.{x=y+z;}

B.for(i=l;k<0;i++)if(i%3==l)cout<<i<<endl;

C.while(i<10){cout<<i<<endl;i++;}

D.if(i<10){i=i+l;}

17.軟件生命周期中的活動不包括()。

A.市場調研B.需求分析C.軟件測試D.軟件維護

18.下列哪個是C++語言的有效標識符?

A._NolB.No.lC.12345D.int

19.下列關于繼承方式的描述中,錯誤的是()。

A.如果不顯式地指定繼承方式,默認的繼承方式是私有(private)

B.采用公有繼承方式時,基類中的公有成員在派生類中仍然是公有成員

C.采用保護繼承方式時,基類中的保護成員在派生類中仍然是保護成員

D.采用私有繼承方式時,基類中的私有成員在派生類中仍然是私有成員

20.有以下程序段

intk=0;

while(k=l)k++;

while循環執行的次數是

A.無限次B.有語法錯,不能執行C.一次也不執行D.執行1次

21.有如下函數模板聲明:template<typenameT>TMax(Ta,T

b){return(a>=b)?a:b;}下列對函數模板Max()的調用中錯誤的是()。

A.Max(3.5,4.5)

B.Max(3.5,4)

C.Max<double>(3.5,4.5)

D.Max<double>(3.5,4)

22.類MyClass的定義如下:classMyClass{public:MyClass(){}

MyClass(inti){value=newint(i);}int*value;};若要對value賦值,

則下面語句正確的是()。

A.MyClassmy;my.value=10;

B.MyClassmy;*my;*value=10;

C.MyClassmy;my.*value=10;

D.MyClassmy(10);

23.建立派生類對象時,3種構造函數分別是a(基類的構造函數)、b(成員

對象的構造函數)、C(派生類)構造函數),這3種構造函數的調用順序為

()o

A.abCB.aCbC.CabD.Cba

三、2.填空題(12題)

24.在面向對象程序設計中,從外面看只能看到對象的外部特征,而不

知道也無須知道數據的具體結構以及實現操作的算法,這稱為對象的

25.請按下面注釋的提示,將類B的構造函數定義補充完整。

classA

(

inta;

public:

A(intaa=O)(a=aa;]

);

classB:publicA{

intb;

Ac;

public:

〃用aa初始化基類A,用aa+1初始化類對象成員c

B(intaa):[]{b=aa+2}

);

26.在C++語言中每個類都有一個【】指針,該指針指向正在調用成員

函數的對象。

27.閱讀下面程序:

#include<iostream.h>

voidfunl(chara,charb)

charc;

c=a;a=b;b=C;

)

voidfun2(char&a,charb)

(

charc;

c=a;a=b;b=c;

)

voidfun3(char&a,char&b)

(

charc;

c=a;a=b;b=C;

)

voidmain()

(

chara,b;

a='A';b='B';

funl(a,b);cout<<a<<b;

a='A';b='B';

fun2(a,b);cout<<a<<b;

a='A';b='B';

fun3(a,b);cout<<a<<b;

)

則該程序的輸出為【】。

28.如果表達式x=y*z中的"”是作為成員函數重載的運算符,采用運算

符函數調用格式,該表達式還可以表示為【】。

29.在面向對象方法中,類之間共享屬性和操作的機制稱為【】。

30.冒泡排序算法在最好的情況下的元素交換次數為【】。

31.數據結構分為邏輯結構和存儲結構,循環隊列屬于結構。

32.下面是一個棧類的模板,其中push函數將元素i壓入棧頂,pop函

數彈出棧頂元素。棧初始為空,top值為0,棧項元素在stack[top-l]中,

在下面橫線處填上適當語句,完成棧類模板的定義。

template<classT>

classTstack{

enum{size=1000};

Tstack[size];

inttop;

public:

Tstack():top(0){

voidpush(constT&i){

if(top<size)

stack[top++]=i;

)

Tpop(){

if(top==0)exit(1);〃??諘r終止運行

return;

)

);

33.已知:doubleA(doubleA){return++a;}和intA(inta){return++a;)是

一個函數模板的兩個實例,則該函數模板定義為【】。

34.有如下類聲明:

classMyClass

(

inti;

private:intj;

protected:intk;

public:intm,n;

};

其中,私有成員的數量為o

35.以下程序的輸出結果是【】。

#include<iostream.h>

voidmain()

{inta=0;

a+=(a=8);

cout<<a;

}

四、程序改錯題(10題)

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

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

為:

sizeof(Sl)=5

sizeof(s2)=10

sizeof(s3)=l

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

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

⑴不能刪除assert()語句。

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

提示:assert函數如果為假,則會產生一個中斷異常。

試題程序:

#include<iostream.h>

#include<assert.h>

voidmain()

char*sl="abc":

********error********

asseil(sizeof(s1)==3):

cout?"sizeof(sl)=5"?endl;

chars2[10]="ab":

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

assert(sizeof(s2)==2);

cout?"sizeof(s2)=l0"?endl;

chars3=23:

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

assert(sizeof(s3)==4);

cout?"sizeof(s3)=I"?endl;

return;

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

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

確。

程序輸出:

8

8

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

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

試題程序:

#include(iostream.h>

classCO

{

public:

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

staticintn=0:

CO

n++:

?CO

}:

!********enor********/

intCO::n;

voidmain

(

COobj;

COobj2[7];

CO*C=NULL:

c=&obj:

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

eout?C.n?endl;

cout?C0::n?endl;

}

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

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

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

中。

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

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

試題程序:

#include<iostream.h>

voidmain

(

inti=0;

charstr[120];

cout?"Enterastringendwith?."?endl;

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

cin.getline(str,120);

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

while(str)

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

if(str[i])=a)

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

1++;

)

cout?str?endl;

return;

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

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

Constructor,i=0,

Destructor

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

可。

試題程序:

#include(iostream.h)

classTC

inti;

public:

TC;

voiddisplay;

TC;

!!******enor******

TC:TC

cout?"Constructor"?","

i=0;

)

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

TC:display

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

)

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

TC:TC

(

COUI?"Destructor"?endl:

)

voidmain

(

TCa;

a.display;

)

40.使用VC++6.0打開考生文件夾下的源程序文件1.cpp。本程序

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

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

到屏幕中。

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

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

試題程序:

#include<iostream.h>

voidmain

(

inti=O;

charstr[120];

cout?"Enterastringendwith?."?endl;

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

cin.getline(str,120);

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

while(str)

{

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

if(str[i])=a)

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

i++;

cout?str?endl;

return;

)

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

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

catch必須拋出執行的任何異常。

程序異常,輸出信息為

error

0

ERROR

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

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

試題程序:

#include<iostream.h)

intmain

(

try

(

throw("error");

)

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

catch(chars)

(

cout?s?endl;

}

try

throw((int)0);

)

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

catch

(

cout?i?endl;

}

try

(

throw(O);

throw("error");

)

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

catch

{

cout?"ERROR"?endl;

)

returnO;

)

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

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

100

37

32

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

可。

試題程序:

#include<iostream.h>

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

voidmain

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

intm=0142:

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

intn=0X27:

intq=32;

cout<<m<<endl;

cout<<n<<endl;

cout<<q<<endl;

return;

)

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

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

catch必須拋出執行的任何異常。

程序異常;輸出信息為

error

0

ERROR

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

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

試題程序:

#include<iostream.h)

intmain

try

(

throw("error");

)

I/********enor********

catch(chars)

{

cout?s?endl;

)

try

(

throw((int)0);

)

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

catch

(

cout?i?endl;

)

try

(

throw(O);

throw("error");

)

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

catch

(

cout?"ERROR"?endl;

returnO;

)

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

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

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

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

構,錯誤的語句在

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

試題程序:

#include<iostream>

#include<fstream>

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

usingstd;

voidWriteFile(char*s)

(

ofstreamoutl;

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

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

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

(

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

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;

)

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

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

Constructor,i=0,

Destructor

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

試題程序:

#include(iostream.h)

classTC

(

inti;

public:

TC;

voiddisplay;

~TC;

};

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

TC:TC

{

cout?"Constructor"?",";

i=0;

)

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

TC:display

{

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

)

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

TC:TC

(

COUI?"Destructor"?endl:

)

voidmain

(

TCa;

a.display;

)

五、綜合應用題(2題)

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

義了類A、A1和A2,其中A1類由A類公有派生,A2類由A1類公

有派生。

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

數中請將x賦值給數據成員a。請在注釋“//********1********”之

后添加適當的語句。

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

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

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

(3)定義類A2的構造函數,該構造函數有3個整型的參數x,y和z,

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

構造函數的參數x和y。請在注釋“//********3*********之后添加

適當的語句。

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

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

在輸出時以空格隔開。請在注釋“//********4*********之后添加適

當的語句。

程序輸出結果如下:

7

3

738

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

試題程序:

#include<iostream.h>

classA

inta;

public:

intgeta{returna;}

};

classA1:publicA

(

intb;

public:

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

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

intgetb{retumb;}

};

classA2:publicA1

(

intC;

public:

voidshow

(

II********4********

)

};

voidmain

A2a(8.3.7):

cout?a.geta?endl:

cout?a.getb?endl:

a.show;

)

47.

請使用【答題】菜單命令或直接用VC6打開考生文件夾下的工程

prog3,其中聲明了ValArray類,該類在內部維護一個動態分配的整型

數組。ValArray類的復制構造函數應實現對象的深層復制。請編寫

ValArray類的復制構造函數。在main函數中給出了一組測試數據,此

種情況下程序的輸出應該是:

ValArrayvl={1,2,3,4,5}ValArrayv2={1,2,3,4,5}要求:

補充編制的內容寫在“〃*********333**********與

“〃*********666**********之間,不得修改程序的其他部分。

注意:程序最后將結果輸出到文件out.dat中。輸出函數writeToFile

已經編譯為boj文件,并且在本程序中調用。

//ValArray.h

#include<iostream>usingnamespacestd;classValArray{

int*v:intsize;public:

VaiArray(constint*P,intn):size(n){

v=newintfsize];

for(inti=0;i<size;i++)v[i]=P[i];

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

48.使用VC6打開考生文件夾下的工程test24_3,此工程包含一個源程

序文件test24_3.cpp,其中定義了抽象類point和它的派生類line,但它們

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

⑴定義類point的構造函數,函數含參數i和j它們都是int型數據,默

認值都是0,用i和j分別將point的數據成員x0和y0初始化。請在注

釋“〃**1**”之后添加適當的語句。

(2)完成類point的成員函數純虛函數voidset()和voiddraw。的定義,請

在注釋“〃**2**,,之后添加適當的語句。

⑶添加類line的構造函數,函數含參數i,j,m和n,它們都是int型數

據,默認值都是0,用i和j分別將point的數據成員x0和y0初始化。

請在注釋“〃**3**”之后添加適當的語句。輸出結果如下:

line::set()called.

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

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

#include<iostream.h>

classpoint

(

public:

〃**]**

〃**2**

protected:

intxO,yO;

classline:publicpoint

(

public:

(

xl=m;

yl=n;

)

voidset(){cout<<"line::set()called.\n";}

voiddraw(){cout<<"line::draw()called.\n";}

protected:

intxl,y1;

);

voidmain()

(

line*lineobj=newline;

lineobj->set();

)

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

序文件MyMainl2.cpp。程序中定義了兩個類Base和Derived,但類的

定義并不完整。

請按要求完成下列操作,將類的定義補充完成:

①定義類shapes的保護成員x和y,它們都是整型變量。請在注釋“//*

*1**"之后添加適當的語句。

②完成構造函數shapes(intd,intw)定義,使類shapes的保護成員x、y分

別初始化為d、w,并分別具有默認值0、0。請在注釋“//**2**”之后添

加適當的語句。

③完成類shapes的成員函數setvalue(intd,intw)的定義,sh叩es類的數

據成員x和y分別被設置成d和w。請在注釋“//**3**”之后添加適當

的語句。

④將類shapes的成員函數voiddisp()設置成純虛函數。請在注釋“//**4*

*''之后添加適當的語句。

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

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

//MyMainl3.cpp

#include<iostream>

usingnamespacestd;

classshapes

/******

/1

public:

〃***2***

voidsetvalue(intd,intw)

{

〃***3***

)

〃***4***

classsquare:publicShapes

(

public:

voiddisp()

(

cout<<x*y<<end!;

)

};

intmain()

(

shapes*ptr;

squares1;

ptr=&sl;

ptr->setvalue(10,5);

ptr->disp();

return0;

}

參考答案

l.B

2.B解析C++語言函數中定義的變量都是屬于這個函數的局部變量。

3.D解析:本題主要考察C++中運算符重載的機制與實現。運算符重載

函數一般分為成員函數形式和友元函數形式,這兩種形式都可以訪問類

中的私有成員。本題中的運算符重載形式為成員函數形式。程序在類

point中聲明了私有數據成員intx和inty,并定義了兩種形式的構造函

數以完成對對象的初始化:之后,程序對運算符進行了重載,令其輸

入參數為類point的對象,輸出為操作符“+”右側該對象的私有數據成

員x和y與操作符“+”左側同類型對象的私有數據成員x和y的兩數之

和;print。函數則輸出對象中數據成員的值。主函數中,實例化了類point

的兩個對象pl和p2,并完成對對象的初始化。在語句"pl=pl+p2;”中,

由于操作符左右兩端的操作數為point類的對象,復合類point定義

中的操作符的重載函數,因此程序將調用重載后的操作符函數,并

返回兩point對象數據成員的加和值,覆蓋對象pl的數據成員。因此

print。函數輸出對象pl的數據成員值應該為x=10+20=30,y=10+20=30。

4.D

5.A

6.D

7.C解析在進入最后一次循環時a=10,在循環體內執行“a++丁后a=U,

執行完該次循環體計算for循環的增量部分后a=12小于10,循環結束。

8.B解析:由于指針q所指結點是指針p所指結點的直接前驅,若在*q

與*p之間插入結點*s,首先將q指向s,再將s指向p,即插入了結點

So

9.A

解析:在E-R圖中,用三種圖框分別表示實體、屬性和實體之間的聯

系,其規定如下:用矩形框表示實體,框內標明實體名;用橢圓狀框

表示實體的屬性,框內標明屬性名;用菱形框表示實體間的聯系,框

內標明聯系名。所以,選項A正確。

10.D解析:數據庫管理系統DBMS是數據庫系統的核心。DBMS是負

責數據庫的建立、使用和維護的軟件。DBMS建立在操作系統之上,實

施對數據庫的統一管理和控制。

11.D解析:本題考查文件對象的創建方法??梢灾苯佣x文件對象,

也可以用new來動態生成。很明顯,選項D中使用new的方式是錯誤

的。

12.C(21)C)【解析】由主函數mam入手,定義了TestClassl\r\n\r\n的對

象m,其中參數為7和9。"m.printa。;"中TestClassl中printa\r\n\r\n為

“c.printb。;”,其中c為TestClass2的對象,所以printb為TestClass2\r\n\r\n

中的“void\r\nTestClass2::printb()',即輸出為“a=7,b=9”。

13.C解析:數據庫系統具有以下幾個特點:數據的集成性、數據的高共

享性與低冗余性、數據的獨立性、數據統一管理與控制。

14.A解析:在結構圖中,用帶有箭頭的連線表示模塊之間的調用關系。

箭頭由前一個模塊指向后一個模塊,表示前一個模塊調用后一個模塊。

本題的正確答案為A。

15.A解析:運算符重載為成員函數的形式為:函數類型operator運算符

(形參表){函數體;};運算符重載為友元函數的形式為:friend函數類型

operator運算符(形參表){函數體;一般來講,單目運算符最好重載為

成員函數,雙目運算符最好重載為友元函數。=、口、()、->以及所有的

類型轉換運算符只能作為成員函數重載。

16.B

17.A軟件的生命周期描述了軟件從產生到最終消亡的全過程,生命周期

中的活動包括需求分析、軟件設計(分為概要設計和詳細設計)、軟件實

現、軟件測試和軟件維護,不包括市場調研。

18.A解析:標識符是一個以字母或下劃線開始的,由字母、下劃線和數

字組成的字符串,標識符不能與任意關鍵字同名。

19.D

Do【解析】采用私有繼承方式對?;愔兴接谐蓡T在派生類中是不可

訪問的成員。

20.A解析:注意本題有個陷阱,馬虎的考生將紛紛落馬。本來、while中

的表達式應為k==l,而本題卻為k=l,是賦值表達式而不是邏輯表達

式。因此,編譯器將其值一直認為是1,因此表達式一直為真,陷入無

限次的循環。

2LB解析:本題考核函數模板的使用。引用模板函數和引用一般的函數

在語法形式上沒有任何區別。所有的類型替換都是編譯器在幕后悄悄進

行的。但是要注意的是說明一個函數模板后,當編譯系統發現有一個對

應的函數調用時,將根據實參中的類型來確認是否匹配函數模板中對應

的形參。例如,本題中的B)選項,編譯系統從第一個參數“3.5”獲得的

信息是“T對應于double",而從第二個參數“4”處獲得的信息是“T對應

于int”,二者相互矛盾,在編譯時會產生錯誤。對于D)選項中緊跟在

函數名后的<double>就是模板實參表,通過它通知編譯系統在調用過

程中,int型的參數“4”將被自動換成double型。

22.D

23.A

本題考查的是在繼承中派生類的對象調用構造函數的順序,應該是先

調用基類的構造函數,然后是成員中的對象對應類的構造函數,最后

是派生類自己的構造函數。

24.封裝性封裝性解析:對象具有下列5個基本特點:①標識唯一性;

②分類性:③多態性:④封裝性;⑤模塊獨立性好。其中,封裝性是指

從外面看只能看到對象的外部特征,對象的內部特征即處理能力的實行

和內部狀態,對外是不可見的,對象的內部狀態只能由其自身改變。

25.A(aa)c(aa+l)或c(aa+1)A(aa)A(aa),c(aa+l)或c(aa+l),A(aa)

26.this

27.ABBBBA

28.x=y.operator*⑵

29.繼承繼承解析:類是面向對象語言中必備的程序語言結構,用來實

現抽象數據類型。類與類之間的繼承關系實現了類之間的共享屬性和操

作,一個類可以在另一個已定義的類的基礎上定義,這樣使該類型繼承

了其超類的屬性和方法,當然,也可以定義自己的屬性和方法。

30.00解析:冒泡排序算法在最好的情況下(已經有序的)元素交換次數

為0。

31.存儲存儲解析:數據結構包括邏輯結構和物理結構(存儲結構),邏輯

結構包括集合、線性、樹、網絡等,而存儲結構主要指的是邏輯結構的

存儲,包括順序、鏈表、索引、散列等。

32.stack[--top]或stack[top-=l]或stack[top=top-1]stack[—top]^stack[top-

=1]或stack[top=top-l]解析:此題考查的是堆棧數據結構。分析題目,

首先利用函數voidpush(constT&i)將i壓入棧,然后Tpop()將元素彈出,

但由于在壓入棧時,top值已經增加1;要彈出元素,須使top先減1,

才能把棧頂元素彈出。故正確答案為stack[-top]o

33.template<typenameT>TA(Ta){returna++;)

34.2

35.1616解析:解答本題的關鍵是要分析清楚表達式a+=(a=8)中,a的

值已經被賦為8,而不是0。

36.⑴應改為"assert(sizeof(sl)==4);

\n⑵應改為"assert(sizeof(s2)=lO);

\n(3)應改為"assert(sizeof(s3)=l);”。

\n【解析】assert函數如果為假,則會產生一個中斷異常。所以要讓它正

常執行輸出結果,那么assert函數只有為真,才不會產生中斷異常。

t4assert(sizeof(sl)=3);”語句中“sizeof(sl)==3”為假,這會使程序產生異

常,不能正常執行。因為strl的值為abc,但是它還有一個尾符,它的

長度應該是4,而不是3,所以在第1處修改為“assert(sizeof(sD==4);”。

str2[10]說明,str2的空間為10,在第2處修改為"assert(sizeof(s2)=10);”。

charstr3=23;語句說明23是字符,所占存儲空間為1,所以修改為

€tassert(sizeof(s3)=1);”。

37.(1)“staticintn=O"應改為"staticintn;"。

(2)“intCO::n;”應改為"intCO::n=0;

(3)“cout?c.n?endl;"應改為"cout<<c->n?endl;

【解析】本題要在屏幕上輸出兩個字符,首先要靜態變量初始化,第1

處應改為“staticintn;",第2處要給n賦值,第3處輸出時引用c的對

象,應改為"cout<<c->n?endl;

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

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

,,

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

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

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

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

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

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

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

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

,,

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

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

⑵應改為“voidTC::display”。

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

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

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

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

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

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

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

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

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

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

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

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

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

(3)應改為“if(st巾]>=a&&str[i]<=2)>,。

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

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

個數,終止標志字符廠,所以第1處改為“cin.getline(str,

120,?);"。第2處的“while(str)”語句應該是判斷字符串str中的每一

個字符是否為結束符,若不是結束符,在循環中判斷每一個字符是否

為小寫,若為小寫,則轉換。所以應該修改為“while(st巾])”。第3處的

“if(str[i]>=a)”語句是判斷字符str[i]是否為小寫字符,而現有的語句只

是判斷字符是否大于a,但是小寫字符應該是a到2,所以修改為

,,

“if(str[i]>=a&&str[i]>=z)o

41.(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塊,系統就會調用一個系統函數,使程序終止運行。即第2處

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

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

改為“catch(…)”。

42.(l)“voidmain''。

(2)“intm=0144;

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

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

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

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

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

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

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

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

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

⑵應改為“cateh(inti)”。

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

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

中的類型為字符串。所以對應的異常捕捉

溫馨提示

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

評論

0/150

提交評論