2022年山西省呂梁市全國計算機(jī)等級考試C++語言程序設(shè)計真題(含答案)_第1頁
2022年山西省呂梁市全國計算機(jī)等級考試C++語言程序設(shè)計真題(含答案)_第2頁
2022年山西省呂梁市全國計算機(jī)等級考試C++語言程序設(shè)計真題(含答案)_第3頁
2022年山西省呂梁市全國計算機(jī)等級考試C++語言程序設(shè)計真題(含答案)_第4頁
2022年山西省呂梁市全國計算機(jī)等級考試C++語言程序設(shè)計真題(含答案)_第5頁
已閱讀5頁,還剩38頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

2022年山西省呂梁市全國計算機(jī)等級考試

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

學(xué)校:班級:姓名:考號:

一、1.選擇題(10題)

1.對長度為n的線性表進(jìn)行順序查找,在最壞情況下需要比較的次數(shù)為

()o

A.125B.n/2C.nD.n+1

2.下列對于虛函數(shù)和重載函數(shù)的敘述,正確的是()。

A.虛函數(shù)要求函數(shù)名、返回值類型和參數(shù)序列完全相同

B.重載函數(shù)要求函數(shù)有相同的返回值類型和函數(shù)名稱,并有不同的參數(shù)

序列

C.虛函數(shù)是根據(jù)對象的不同去調(diào)用不同類的虛函數(shù)

D.虛函數(shù)和重載函數(shù)都是在運行時表現(xiàn)出多態(tài)功能

3.下列不是數(shù)據(jù)字典通常包括的內(nèi)容的是()o

A.數(shù)據(jù)項B.數(shù)據(jù)結(jié)構(gòu)C.數(shù)據(jù)流D.數(shù)據(jù)元素

4.結(jié)構(gòu)化程序設(shè)計所規(guī)定的三種基本控制結(jié)構(gòu)是()。

A.for、while,swishB輸入、輸出、處理C.順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)

結(jié)構(gòu)D.主程序、子程序、函數(shù)

5.下列關(guān)于靜態(tài)數(shù)據(jù)成員的描述中,正確的是()。

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

B.類的每個對象都有自己的靜態(tài)數(shù)據(jù)成員

C.類的不同對象有不同的靜態(tài)數(shù)據(jù)成員值

D.靜態(tài)數(shù)據(jù)成員不能通過類的對象調(diào)用

6.

有如下函數(shù)模板聲明:template<typenameT>TMax(Ta,TB){return(a>=B)?a:b;}下列對函

數(shù)模板Max的調(diào)用中錯誤的是

A)Max(3.5,4.5)

B)Max(3.5,4);

0Max<double>(3.5,4.5)

D)Max<double>(3.5,4)

7.若類A和類B的定義如下:classA{inti,j;public:intgeti(){return

i;}};classB:publicA{intk;public:voidmake(){k=i*j;}};

則上述定義中非法的表達(dá)式是()。

A.k=i*jB.intk;C.retumi;D.voidmake()

8.下列敘述中正確的是

A.數(shù)據(jù)的邏輯結(jié)構(gòu)與存儲結(jié)構(gòu)必定是一一對應(yīng)的

B.由于計算機(jī)的存儲空間是向量式的存儲結(jié)構(gòu),因此,數(shù)據(jù)的存儲結(jié)構(gòu)

一定是線性結(jié)構(gòu)

C.程序設(shè)計語言中的數(shù)組一般是順序存儲結(jié)構(gòu),因此,利用數(shù)組只能處

理線性結(jié)構(gòu)

D.以上3種說法都不對

9.為了使模塊盡可能地獨立,要求o

A.模塊的內(nèi)聚程度要盡量高,且各模塊間的耦合程度要盡量強(qiáng)

B.模塊的內(nèi)聚程度要盡量高,且各模塊間的耦合程度要盡量弱

C.模塊的內(nèi)聚程度要盡量低,且各模塊間的耦合程度要盡量弱

D.模塊的內(nèi)聚程度要盡量低,且各模塊間的耦合程度要盡量強(qiáng)

10.下面內(nèi)容不屬于使用軟件危機(jī)的是()。

A.軟件質(zhì)量難以保證B.軟件的成本不斷提高C.軟件需求增長緩慢D.

軟件不可維護(hù)或維護(hù)程度非常低

二、單選題(13題)

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

namespacestd;classMyClass{public:MyClass(){cout<<

'A';}MyClass(charc){cout<<c;}~MyClass(){cout<<'B';}};intmain()

{MyClasspl,*p2;p2=newMyClass('X');deletep2;return0;}執(zhí)行這個程序

屏幕上將顯示輸出()。

A.ABXB.ABXBC.AXBD.AXBB

12.結(jié)構(gòu)化程序設(shè)計的三種基本結(jié)構(gòu)是()。

A.過程、子程序和分程序B.順序、選擇和重復(fù)C.遞歸、堆棧和隊列D.

調(diào)用、返回和轉(zhuǎn)移

13.有以下程序:classDate{public:Date(inty,intm,intd);{year=y;

month=m;day=d;}Date(inty=2000){year=y;month=10;day=1;}

Date(Date&d){year=d.year;month=d.month;day=d.day;}voidprint()

{cout<<year<<<<month<<<<day<<endl;}private:int

year,month,day;};Datefun(Dated){Datetemp;temp=d;resurntemp;}

intmain(){Datedatel(2000,l,l),date2(0,0,0);Datedate3(datel);date2=

fun(date3);return0;)程序執(zhí)行時,Date類的拷貝構(gòu)造函數(shù)被調(diào)用的次

數(shù)是

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

14.下列關(guān)于棧的敘述正確的是()。

A.棧頂元素最先被刪除B.棧頂元素最后才能被刪除C.棧底元素永遠(yuǎn)

不能被刪除D.以上三種說法都不對

15.數(shù)據(jù)流圖用于抽象描述一個軟件的邏輯模型,數(shù)據(jù)流圖由一些特定

的圖符構(gòu)成。下列圖符名標(biāo)識的圖符不屬于數(shù)據(jù)流圖合法圖符的是

()o

A.控制流B.加工C.數(shù)據(jù)存儲D.源和潭

16.下列程序輸出的結(jié)果是()。#include<stdio.h>subl(chara,charb)

{charc;c=a;a=b;b=c;}sub2(char*a,charb){charc;c=*a;*a=b;b=c;}

sub3(char*a,char*b){charc;c=*a;*a=*b;*b=c;}voidmain(){chara,b;

a='A';b='B';subl(a,b);putchar(a);putchar(b);

a='A';b='B';sub2(&a,b);putchar(a);putchar(b);

a='A';b='B';sub3(&a,&b);putchar(a);putchar(b);putchar('\n');}

A.BABBABB.ABBBBAC.ABBABAD.ABABBA

17.下列運算符中,在C++語言中不能重載的是()。

A.*B.>=C.::D./

18.對長度為n的線性表進(jìn)行順序查找,在最壞情況下所需要的比較次

數(shù)為()o

A.log2nB.n/2C.nD.n+1

19.有如下類定義:

classXX{

intXX;

public:

xx():xx(0){tout?A;}

XX(intn):xx(n){cout?B;}

};

classY:Y:publicXX{

intYY;

public:

YY():YV(O){cout?YY;)

YY(intn):xx(n+l),YY(n){cout?YY;}

YY(intm,intn):XX(m),YY(n){cout?yy;)

};

下列選項中,輸出結(jié)果為AO的語句是

A.YYyl(O,0);B.YY72(1);C.YYy3(0);D.YYy4;

20.下列關(guān)于構(gòu)造函數(shù)的描述中,錯誤的是()

A.構(gòu)造函數(shù)可以設(shè)置默認(rèn)參數(shù)

B.構(gòu)造函數(shù)在定義類對象時自動執(zhí)行

C.構(gòu)造函數(shù)可以是內(nèi)聯(lián)函數(shù)

D.構(gòu)造函數(shù)不可以重載

21.下列敘述中,不屬于測試的特征的是()o

A.測試的挑剔性B.完全測試的不可能性C.測試的可靠性D.測試的經(jīng)

濟(jì)性

22.已知chara;intb;floatC;doubled;則表達(dá)式a*b+c-d的結(jié)果為()。

A.doubleB.intC.floatD.char

23.C++語言是以哪種語言為基礎(chǔ)逐漸發(fā)展演變而成的一種程序設(shè)計語

A.ASPB.CC.VBD.Java

三、2.填空題(12題)

24.如果一個類中含有純虛函數(shù),則該類稱為【】。

25.數(shù)據(jù)獨立性分為邏輯獨立性與物理獨立性。當(dāng)數(shù)據(jù)的存儲結(jié)構(gòu)改變

時,其邏輯結(jié)構(gòu)可以不變,所以,基于邏輯結(jié)構(gòu)的應(yīng)用程序不必修改,

稱為【】。

26.不改變關(guān)系表中的屬性個數(shù)但能減少元組個數(shù)的是____o

27.在面向?qū)ο蟮脑O(shè)計中,用來請求對象執(zhí)行某一處理或回答某些信息

的要求稱為【】。

28.數(shù)據(jù)模型分為格式化模型和非格式化模型,則關(guān)系模型屬于【】

模型。

29.在下面程序的橫線處填上適當(dāng)?shù)恼Z句,使該程序的輸出為12。

#include<iostream>

usingnamespacestd;

classBase

(

public:

inta;

Base(inti){a=i;}

classDerived:publicBase

(

inta;

public:

Derived(intx):Base(x),b(x+1){}

voidshow()

{

;〃輸出基類數(shù)據(jù)成員a的值

cout<<b<<endl;

)

);

intmain()

(

Derivedd(l);

d.show();

return0;

30.若a=12,b=14,c=0,則表達(dá)式“((y=(a>B)?a:B)>C)?y:c”的值為

【】。

31.結(jié)構(gòu)化程序設(shè)計的一種基本方法是【】法。

32.含有純虛函數(shù)的類稱為o

33.下面程序編譯時發(fā)現(xiàn)ma[3]=9錯誤,其原因是____。

#include<iostream.h>

classFunArray

(

int*pa;//指向一個數(shù)組空間

intsize;//數(shù)組元素個數(shù)

public:

FunArray(inta[],intthesize):pa(a),size(thesize){}

intSize(){returnsize;}

)

);

voidmain()

{

ints[]={3,7,2,l,5,4);

FunArrayma(s,sizeof(s)/sizeof(int));

ma[3]=9;

cout<<ma[3]<<endl;

)

34.在C++語言中每個類都有一個【】指針,該指針指向正在調(diào)用成員

函數(shù)的對象。

35.所有的函數(shù)模板定義都是以關(guān)鍵字template開始的,在template之

后使用【】括起來的形參表。

四、程序改錯題(10題)

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

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

Constructor,i=0,

Destructor

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

可。

試題程序:

#include(iostream.h)

classTC

(

inti;

public:

TC;

voiddisplay;

?TC;

};

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

TC:TC

{

cout?"Constructor"?",";

i=0;

)

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

TC:display

(

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

)

/!******error******

TC:TC

(

COUI?"Destructor"?endl:

)

voidmain

(

TCa;

a.display;

)

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

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

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

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

構(gòu),錯誤的語句在

II******error******-"jo

試題程序:

#include<iostream>

#include<fstream>

********eiror********

usingstd;

voidWriteFile(char*s)

ofstreamoutl;

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

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

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

1I********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);

returnO;

)

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

行有問題,請改正main函數(shù)中的錯誤,使程序的輸出結(jié)果為:

number=1

number=10

number=100

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

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

試題程序:

#include<iostream.h>

classTC

(

public:

TC(inti)

{

number=i;

)

voidSetNumber(intm)

(

number=m;

)

intGetNumberconst

{

retumnumber;

)

voidPrintconst

(

cout?"number="?number?endl;

)

private:

intnumber;

};

voidmain

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

TCobjl;

objl.Print;

TCobj2(3);

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

objl.number=10;

II********ej*j*or*******

TC.SetNumber(lOO);

objl.Print;

obj2.Print;

)

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

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

確。

程序輸出:

8

8

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

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

試題程序:

#include(iostream.h>

classCO

(

public:

I********enor*****

staticintn=O:

CO

(

n++:

)

?CO

):

I********error********

intCO::n;

voidmain

(

COobj;

COobj2[7];

CO*C=NULL:

c=&obj:

I********error********

eout?C.n?endl;

cout?C0::n?endl;

)

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

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

Constructor,i=0,

Destructor

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

試題程序:

#include(iostream.h)

classTC

{

inti;

public:

TC;

voiddisplay;

-TC;

};

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

TC:TC

{

cout?"Constructor"?",";

i=0;

)

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

TC:display

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

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

TC:TC

{

COUI?"Destructor"?endl:

)

voidmain

(

TCa;

a.display;

)

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

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

100

37

32

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

可。

試題程序:

#include<iostream.h>

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

voidmain

{

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

intm=0142:

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

intn=0X27:

intq=32;

cout<<m<<endl;

cout<<n<<endl;

cout<<q<<endl;

return;

)

42.使用VC++6.。打開考生文件夾下的源程序文件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

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

TCobjl;

objl.Print;

TCobj2(3);

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

objl.number=10;

I/********en*or*%o******

TC.SetNumber(lOO);

objl.Print;

obj2.Print;

)

43.使用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)

!********errOr********/

1++:

04.print;

)

cout?endl;

retumO;

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

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

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

程序異常,輸出信息為

error

O

ERROR

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

構(gòu),錯誤的語句在//******error******的下面。

試題程序:

#include<iostream.h)

intmain

(

try

(

throw("error");

)

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

catch(chars)

(

cout?s?endl;

)

try

(

throw((int)0);

)

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

catch

(

cout?i?endl;

)

try

(

throw(O);

throw("error");

)

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

catch

(

cout?"ERROR"?endl;

)

retumO;

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

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

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

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

構(gòu),錯誤的語句在

I!******error******自勺卜

試題程序:

#include<iostream>

#include<fstream>

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

usingstd;

voidWriteFile(char*s)

(

ofstreamoutl;

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

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

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

(

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

outl.puts(s[il);

)

outl.close;

)

voidClearFile

(

ofstreamoutl;

outl.open("l.txt");

outl.close;

)

intmain

chars[1024];

ClearFile;

cout?"pleaseinputastrin9:"?endl;

cin.getline(s,1024);

WriteFile(s);

retumO;

)

五、綜合應(yīng)用題(2題)

46.⑴應(yīng)添加“BA(intm){a=m;}“。

⑵應(yīng)添力口“PAl(intm,intn):BA(n){b=m;}”。

(3)應(yīng)添力II“PA2(intm,intn,intk):PAl(n,k){C=m;)”。

(4)應(yīng)添力口"cout<<geta<<""<<getb<<""<<C<<endl;

【解析】根據(jù)第1處要求,構(gòu)造函數(shù)的函數(shù)名和類名一致,顯然BA構(gòu)

造函數(shù)的名稱為BA,在BA中通過參數(shù)m完成對成員變量a的賦值,

因此構(gòu)造函數(shù)的名稱為BA(intm),在函數(shù)內(nèi)部對成員a賦值,故第1處

的語句應(yīng)添加“BA(intm){a=m;)”。根據(jù)第2處的要求,構(gòu)造函數(shù)的形式

為“PAl(intm,intn)”,m賦值給PA1類成員b,將n作為基類BA構(gòu)造函

數(shù)的參數(shù)值傳入,故第2處應(yīng)添加“PAl(intm,intn):BA(n){b=m;}”。

根據(jù)第3處的要求,函數(shù)形式為PA2(intm,intn,intk),在構(gòu)造函數(shù)中

將m賦值給數(shù)據(jù)成員c,將n和k分別賦值給基類PA1構(gòu)造函數(shù)的參

數(shù)m和n,因此第3處應(yīng)添力口“PA2(intm,intn,intk):PAl(n,k){C=m;}“。

根據(jù)第4處的要求,PA2類公有派生于PAI,而PA1公有派生于BA,

因此在PA2類中可以調(diào)用基類的geta和getb來獲得基類私有成員a和

b,再輸出PA2的私有成員C即滿足要求,因此第4處應(yīng)添加

€4,5

cout?geta?""?getb?""?C?endl;O

47.使用VC++6.。打開考生文件夾下的源程序文件3.cpp。請完成

以下部分,實現(xiàn)在屏幕上輸出為

C3

C2

這個程序需要修改的部分,請按照以下部分實現(xiàn)。

(1)類CO不能被實例化,請定義一個純虛函數(shù)print,在注釋1后添加

適當(dāng)?shù)恼Z句。

(2)類C1私有虛繼承類CO,請在注釋2后添加適當(dāng)?shù)恼Z句。

(3)類C2公有繼承于CO,請在注釋3后添加適當(dāng)?shù)恼Z句。

(4)類c3公有繼承于C2與C1,請在注釋4后添加適當(dāng)?shù)恼Z句。

注意:增加代碼或者修改代碼的位置已經(jīng)用符號表示出來。請不要修

改其他的程序代碼。

試題程序:

#include(iostream.h)

classCO

(

};

I[

classCl:

public:

voidprint

(

cout<",,Cr,<<endl;

)

};

classC2:

(

public:

voidprint

(

cout<<"C2"<<endl;

)

};

//********4***x****

classC3:

(

public:

voidprint

cout<<"C3"<<endl;

)

};

voidmain

C3Obj3;

C20bj2;

obj3.print;

obj2.print;

return;

)

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

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

test37_3.cpp,其中定義了類Letter和Number以及Grid,其中Grid類由

Letter類和Number類public派生,但三個類的定義并不完整。請按要

求完成下列操作,將程序補(bǔ)充完整。

⑴添加類Letter的帶一個參數(shù)c的構(gòu)造函數(shù),c是char型的數(shù)據(jù),默認(rèn)

值為'A]該函數(shù)把參數(shù)c的值賦給類的保護(hù)成員ch,請在注釋“〃**1**”

之后添加適當(dāng)?shù)恼Z句。

(2)添加類Number的帶一個參數(shù)n的構(gòu)造函數(shù),n是int型的數(shù)據(jù),默

認(rèn)值為0,該函數(shù)把參數(shù)n的值賦給類的保護(hù)成員num,請在注釋

“〃**2**,,之后添加適當(dāng)?shù)恼Z句。

(3)添加派生類Grid構(gòu)造函數(shù)的定義,傳入的參數(shù)為char型的c和血型

的n,并將其分別賦值給基類的ch和num,請在注釋“〃**3**”之后添加

適當(dāng)?shù)恼Z句。

(4)完成派生類Grid的友元函數(shù)——“<<”運算符重載的定義,使其以

格式“[g.ch,g.num]”輸出,請在注釋“〃**4**”之后添加適當(dāng)?shù)恼Z句。

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

#include<iostream,h>

classLetter

(

protected:

charch;

public:

〃**]**

};

classNumber

|

protected:

intnum;

public:

H**2**

);

classGrid:publicLe注er,publicNumber

{

public:

〃**3**

friendostream&operator<<(ostream&o,Grid&g);

);

〃**4**

{

o<<"["<<g.ch<<","<<g.num<<

returno;

}

intmain()

(

Gridg('C,3);

cout<<"Gridreference:"<<g<<endl;

return0;

)

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

test31_3.cpp,其中定義了可以動態(tài)分配的字符串類,但該類的定義并不

完整。請按要求完成下列操作,將程序補(bǔ)充完整。

⑴定義類tstring的私有數(shù)據(jù)成員length和p,它們分別是血型的數(shù)據(jù)和

字符型的指針,其中l(wèi)ength表示一個字符串的長度。請在注釋“〃**1**”

之后添加適當(dāng)?shù)恼Z句。

(2)完成類tstring的構(gòu)造函數(shù),使length等于字符串m的長度,并申請

由指針P指向的length長的字符型空間,將m所指的字符串復(fù)制到該

空間。請在注釋“〃**2**”之后添加適當(dāng)?shù)恼Z句。

(3)完成類tstring的成員函數(shù)strcopy(tstringn)的定義該函數(shù)將對象n的

值(包括字符串長度和字符串本身)復(fù)制給調(diào)用該函數(shù)的對象(對象n的

字符串長度任意)。請在注釋“〃**3**”之后添加適當(dāng)?shù)恼Z句。

(4)完成類tstring的友元函數(shù)strlink(tstringm,tstringn)的定義,該函數(shù)將

可動態(tài)分配的字符串類對象m和n的字符串成員連接在一起(對象m和

n的字符串長度任意),并返回該串。請在注釋“〃**4**”之后添加適當(dāng)?shù)?/p>

語句。

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

程序輸出結(jié)果如下:

hellotheworld!

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

#include<iostream.h>

#include<conio.h>

#include<string.h>

clasststring

public:

〃**]**

tstring(char*m)

{

〃**2**

strcpy(p,m);

)

voidstrcopy(tstringn);

friendchar*strlink(tstringm,tstringn);

);

voidtstring::strcopy((stringn)

{

〃**3**

char*q;

q=newcharflength];

strcpy(q,(string::p);

q=strcat(tstring::p,n.p);

(string::p=q;

tstring::length=strlen(tstring::p);

),

char*strlink(tstringm,tstringn)

(「「

intlength=strlen(m.p)+strlen(n.p);

char*p;

〃**4**

strcpy(p,m.p);

p=strcat(p,n.p);

returnp;

)

voidmain()

(

tstringa("hello");

tstringb("theworld");

tstringc("!");

a.strcopy(b);

cout<<strlink(a,c)<<endl;

參考答案

l.CCo【解析】對線性表進(jìn)行順序查找時,從表中的第一個元素開始,

將給定的值與表中逐個元素的關(guān)鍵字進(jìn)行比較,直到兩者相符,查找到

所要找的元素為止。在最壞情況下,要查找的元素是表的最后一個元素

或查找失敗,這兩種情況都需要將這個元素與表中的所有元素進(jìn)行比較,

因此比較次數(shù)為no

2.D

3.D解析:數(shù)據(jù)字典通常包括數(shù)據(jù)項、數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)流、數(shù)據(jù)存儲和

處理過程五個部分。

4.C

5.A解析:靜態(tài)數(shù)據(jù)成員是被類的所有對象共享,它不屬于類的任何一

個對象,它的作用域是類范圍。靜態(tài)數(shù)據(jù)成員在每個類對象中并不占有

存儲空間,它只是每個類中分配有存儲空間,供所有對象公用。靜態(tài)數(shù)

據(jù)成員的值對每個對象都一樣,但它的值可以被任何一個對象更新,從

而實現(xiàn)了同一類的不同對象之間的數(shù)據(jù)共享。

6.B解析:在引用函數(shù)模板時,如果沒在函數(shù)名和參數(shù)之間加上類型參

數(shù),就默認(rèn)表示參數(shù)類型嚴(yán)格按照模板定義的類型匹配;如果在函數(shù)名

和參數(shù)之間加上了類型參數(shù),則對實參自動進(jìn)行類型轉(zhuǎn)換。

7.A解析:變量i和j,都是基類A的私有變量,它們是隱蔽的,在派生

類中不能直接訪問。

8.D解析:數(shù)據(jù)的邏輯結(jié)構(gòu)與數(shù)據(jù)在計算機(jī)中的存儲方式無關(guān),它用來

抽象地反映數(shù)據(jù)元素之間的邏輯關(guān)系,故A選項錯誤。存儲結(jié)構(gòu)分為順

序存儲結(jié)構(gòu)與鏈?zhǔn)酱鎯Y(jié)構(gòu),其中順序存儲結(jié)構(gòu)是將邏輯上相鄰的數(shù)據(jù)

元素存儲在物理上相鄰的存儲單元里,節(jié)點之間的關(guān)系由存儲單元的相

鄰關(guān)系來決定,它主要用于存儲線性結(jié)構(gòu)的數(shù)據(jù),故B選項錯誤。數(shù)組

的存儲方式連續(xù)是指其在計算機(jī)中的存儲方式,它可以用來處理非線性

結(jié)構(gòu),故C選項錯誤。

9.B解析:程序設(shè)計的相關(guān)概念。

10.C解析:所謂軟件危機(jī)是泛指在計算機(jī)軟件的開發(fā)和維護(hù)過程中所遇

到的一系列嚴(yán)重問題。選項A、B、D都屬于軟件危機(jī)的一種表現(xiàn),軟

件危機(jī)還包括軟件需求的增長得不到滿足、軟件開發(fā)成本和進(jìn)度無法控

制和軟件開發(fā)生產(chǎn)率的提高趕不上硬件的發(fā)展和應(yīng)用需求的增長。

11.D

12.B

Bo【解析】程序的三種基本控制結(jié)構(gòu)包括順序、選擇和重復(fù)(循環(huán)),

這三種結(jié)構(gòu)足以表達(dá)出各種其他形式的結(jié)構(gòu)。

13.B解析:本題考核拷貝構(gòu)造函數(shù)。上述程序中,拷貝構(gòu)造函數(shù)一共被

調(diào)用了3次:第一次是在執(zhí)行語句Datedate3(datel);時,用已經(jīng)建立

的對象datel對正在建立的對象date3進(jìn)行初始化;第二次是在調(diào)用fun

函數(shù)時,由于是傳值調(diào)用,因此實參對象date3要對形參對象d進(jìn)行初

始化;第三次是在執(zhí)行fun函數(shù)中的返回語句returntemp;時,系統(tǒng)用

返回初始化一個匿名對象時使用了拷貝構(gòu)造函數(shù)。

14.AA。【解析】棧是限定在一端進(jìn)行插入刪除的先入后出的線性表數(shù)據(jù)

結(jié)構(gòu),棧頂元素最后被插入到棧中,但是最先被刪除;而棧底元素最先

被插入,最后被刪除。

15.A解析:數(shù)據(jù)流圖包括4個方面,即加工(轉(zhuǎn)換)(輸入數(shù)據(jù)經(jīng)加工變

換產(chǎn)生輸出)、數(shù)據(jù)流CS箭頭方向傳送數(shù)據(jù)的通道,一般在旁邊標(biāo)注數(shù)

據(jù)流名)、存儲文件(數(shù)據(jù)源)(表示處理過程中存放各種數(shù)據(jù)的文件)、

源和潭(表示系統(tǒng)和環(huán)境的接口,屬系統(tǒng)之外的實體)。不包括選項中的

控制流。

16.B

17.C

18.C本題考查的是順序查找。在進(jìn)行順序查找過程中,如果線性表中

的第一個元素就是被查找元素,則只需做一次比較就查找成功,查找

效率最高;但如果被查找的元素是線性表中的最后一個元素,或者被查

找的元素根本就不在線性表中,則為了查找這個元素需要與線性表中

所有的元素進(jìn)行比較,這是順序查找的最壞情況。所以對長度為n的

線性表進(jìn)行順序查找,在最壞情況下需要比較n次。故本題答案為

Co

19.D

解析:建立派生類對象時,構(gòu)值函數(shù)的執(zhí)行順序為:執(zhí)行基類的構(gòu)造

函數(shù)一執(zhí)行成員對象的構(gòu)造函數(shù)一執(zhí)行派生類的構(gòu)造函數(shù)。D)選項定

義對象y4時沒有傳人任何值,則先調(diào)用基類的構(gòu)造函數(shù).XX(),輸

出,A。,然后調(diào)用派生類的構(gòu)造函數(shù)YY(),輸出yy=O,最終輸出為

A0。故本題答案為D)。

20.D解析:構(gòu)造函數(shù)是類的一個特殊成員函數(shù),它與類同名,并且沒有

返回值。C++在創(chuàng)建一個對象時,會自動調(diào)用類的構(gòu)造函數(shù),在構(gòu)造函

數(shù)中可以執(zhí)行初始化成員變量的操作。構(gòu)造函數(shù)可以是內(nèi)聯(lián)函數(shù),也可

以重載。

2LC解析:軟件測試的目標(biāo)是在精心控制的環(huán)境下執(zhí)行程序,以發(fā)現(xiàn)程

序中的錯誤,給出程序可靠性的鑒定。它有3個方面的重要特征,即測

試的挑剔性、完全測試的不可能性及測試的經(jīng)濟(jì)性。其中沒有測試的可

靠性這一說法。注意:軟件測試與軟件調(diào)試的概念,以及相應(yīng)的方法。

22.A

Ao【解析】本題考查混合運算表達(dá)式類型,由表達(dá)式中具有最高優(yōu)先

級的類型所確定,所以答案為A。

23.B解析:C++語言是對C語言進(jìn)行了擴(kuò)充,繼承了它的語法,開增加

了面向?qū)ο蟮脑O(shè)計方法。

24.抽象類抽象類解析:類中一旦有純虛函數(shù)的定義,那么這個類就再

也不能創(chuàng)建此類的對象了,我們把這種類叫做抽象類。

25.物理獨立性物理獨立性解析:邏輯獨立性是指,由于數(shù)據(jù)的局部邏

輯結(jié)構(gòu)與總體邏輯結(jié)構(gòu)之間也由系統(tǒng)提供映像,使得當(dāng)總體邏輯結(jié)構(gòu)改

變時,其局部邏輯結(jié)構(gòu)可以不變,從而根據(jù)局部,邏輯結(jié)構(gòu)編寫的應(yīng)用

程序也可以不必修改。物理獨立性是指,由于數(shù)據(jù)的存儲結(jié)構(gòu)與邏輯

結(jié)構(gòu)之間由系統(tǒng)提供映像,使得當(dāng)數(shù)據(jù)的存儲結(jié)構(gòu)改變時,其邏輯結(jié)構(gòu)

可以不變,所以,基于邏輯結(jié)構(gòu)的應(yīng)用程序不必修改。

26.選抒選抒

27.消息消息解析:在面向?qū)ο蟮脑O(shè)計中,用來請求對象執(zhí)行某一處理

或回答某些信息的要求稱為消息。

28.非格式化非格式化解析數(shù)據(jù)模型分為格式化模型和非格式化模型,

關(guān)系模型屬于非格式化模型。

29.cout<<Base::acout<<Base::a解析:本題考核作用域分辨符號的使

用。作用域分辨符號是它可以用來限定要訪問的成員所在的類的名

稱。一般來說,在派生類中對基類成員的訪問應(yīng)該是惟一的。但是,多

繼承情況下可能造成對基類中某個成員的訪問出現(xiàn)不惟一的情況,通過

使用對象作用域分辨符可以解決這種對基類成員訪問的二義性問題。題

中派生類Derived與基類Base定義了數(shù)據(jù)成員a,所以要訪問基類數(shù)據(jù)

成員可以通過作用域分辨符來實現(xiàn)。

30.1414解析:本題考核運算符的應(yīng)用。條件運算符是一種在兩個表達(dá)

式中選擇一個的操作,它是C++中惟一的三元運算符。在本題中,先計

算(a>B)?a:b,因為a<b,所以條件表達(dá)式的值為0,因此y=b=14,

而y>c的邏輯值為真,所以表達(dá)式的值為y的值,即14。

31.逐步求精逐步求精

32.抽象類抽象類

33.沒有重載口運算符沒有重載口運算符解析:ma不是一般的數(shù)組,而

是一個新定義的類,盡管該類封裝了一個數(shù)組,但新類并沒有提供口操

作符的具體實現(xiàn),因此是錯誤的。

34.this

35.尖括號<>尖括號<>

36.(1)應(yīng)改為"(3::TC”。

⑵應(yīng)改為“voidTC::display”。

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

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

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

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

為“TC::TC”,默認(rèn)構(gòu)造函數(shù)沒有參數(shù)。由第2處“TC::display”后

的語句看,這是在類外實現(xiàn)TC函數(shù),因此也有作用域運算符使用錯

誤問題,display函數(shù)返回值為void,因此第2處的語句應(yīng)改為

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

在類外實現(xiàn)析構(gòu)函數(shù),析構(gòu)函數(shù)是一個特殊的函數(shù),它的名稱和類名

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

的語句應(yīng)改為“TC::?TC”。

37.(1)應(yīng)改為"usingnamespacestd;

(2)應(yīng)改為"outl.open("1.txt",ios::binaryIios::app);

(3)應(yīng)改為“outl.put(s[i]);

【解析】本題第1處的“usingstd;”是在程序中引入標(biāo)準(zhǔn)命名空間std,

對于C++中引入標(biāo)準(zhǔn)命名空間的格式,缺少namespace,所以第1處

的語句修改為“usingnamespacestd;"。第2處,調(diào)用成員函數(shù)open

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

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

“outl.open("1.txt",ios::binaryIios::app);第3個標(biāo)識應(yīng)

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

“outl.put(s[i]);

38.(1)應(yīng)改為"TCobjl(l);

\n(2)應(yīng)改為“Objl.SetNumber(lO);”。

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

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

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

出結(jié)果兩1,所以補(bǔ)全參數(shù)1,即第1處的“TCobjl⑴;"。第2處處的

“objl.number=10;”應(yīng)該是調(diào)用成員函數(shù)SetNumber賦值。在C++中

成員函數(shù)的使用形式應(yīng)該是:對象名.成員函數(shù),所以修改為

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

第3處叮(3.561?41111^01'(100);”語句中的丁€:為類,并不是對象,這里

應(yīng)該使用定義的對象,即obj2,所以將語句修改為

“obj2.SetNumber(lOO);

39.(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;"。

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

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

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

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

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

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

TC”,默認(rèn)構(gòu)造函數(shù)沒有參數(shù)。由第2處“TC=display”后的語句看,這

是在類外實現(xiàn)TC函數(shù),因此也有作用域運算符使用錯誤問題,display

函數(shù)返回值為void,因此第2處的語句應(yīng)改為“voidTC::display"。由第

3處的語句叮(2::丁??芍?,顯然這里是在類外實現(xiàn)析構(gòu)函數(shù),析構(gòu)函

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

采與構(gòu)造函數(shù)加以區(qū)別,因此第3處的語句應(yīng)改為“TC::?TC”。

41.(l)“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=0x25;”或“intn=0x25;

42.(1)應(yīng)改為"TCobjl(l);

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

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

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

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

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

的“objl.number=10;”應(yīng)該是調(diào)用成員函數(shù)SetNumber賦值。在C+

+中成員函數(shù)的使用形式應(yīng)該是:對象名.成員函數(shù),所以修改為

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

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

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

“obj2.SetNumber(lOO);

43.(1)應(yīng)添加“public:

\n⑵“inti”應(yīng)改為"inti(10);

\n⑶“i++;”應(yīng)改為“i-;

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

保護(hù)和私有3種,而默認(rèn)的訪問屬性為私有,只有公有成員才能通過類

的對象被訪問。故應(yīng)在構(gòu)造函數(shù)前添加“public:“,否則該類無法被實例

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

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

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

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

44.(1)應(yīng)改為"catch(char*s)”。

⑵應(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)

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

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

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

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

改為“catch(…)”。

45.(1)應(yīng)改為"usingnamespacestd;

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

\n(3)應(yīng)改為“outl.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類中定義的,所以“outl.open('l.txt',binary|

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

binary|ios::app);”。第3個標(biāo)識應(yīng)該用流成員函數(shù)put輸出字符,所

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

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

溫馨提示

  • 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

提交評論