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

下載本文檔

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

文檔簡介

2023年江西省景德鎮(zhèn)市全國計算機(jī)等級考

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

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

一、1.選擇題(10題)

1.以下敘述正確的是()。

A.函數(shù)可以嵌套定義但不能嵌套調(diào)用

B.函數(shù)既可以嵌套調(diào)用也可以嵌套定義

C函數(shù)既不可以嵌套定義也不可以嵌套調(diào)用

D.函數(shù)可以嵌套調(diào)用但不可以嵌套定義

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

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

濟(jì)性

3.對于長度為n的線性表,在最壞情況下,下列各種排序法所對應(yīng)的比

較次數(shù)中正確韻是()。

A.冒泡排序為n/2B.冒泡排序為nC.快速排序為nD.快速排序為n(n-

1)/2

4.算法的空間復(fù)雜度是指()。

A.算法程序的長度B.算法程序中的指令條數(shù)C.算法程序所占的存儲

空間D.算法執(zhí)行過程中所需要的存儲空間

5.以下程序的執(zhí)行結(jié)果為()。#include<iostream.h>classSample{int

n;public:Sample(inti){n=i;}operator++(){n++;}〃前綴重載運算符

operator++(int){n+=2;)〃后綴重載運算符voiddisp(){cout<<"n="<<

n<<endl;}};voidmain(){SampleA(2),B(2);A++;++B;A.dispO;

B.dispO;}

A.n=4n=3B.n=ln=2C.n=3n=4D.n=5n=6

6.以下C++語言中用于單行注釋的是

A.//B./*C.*/D.|

7.有如下程序:#include{iostream)usingnamespacestd;classBase

{private:charc;public:Base(charn):c(n){}~Base(){cout〈〈c;}};

classDerived:publicBase{private:charc;public:Derived(char

n):Base(n+l),c(n){}~Derived(){cout〈〈c;}};intmain(){Derived

obj('x');return0;}執(zhí)行上面的程序?qū)⑤敵?)。

A.xyB.yxC.xD.y

8.對于順序存儲的隊列,存儲空間大小為n,頭指針為F,尾指針為R。

若在邏輯上看成一個環(huán),則隊列中元素的個數(shù)為O

A.R-FB.n+R-FC.(R-F+l)modnD.(n+R-F)modn

9.下列敘述中正確的是()。

A.順序存儲結(jié)構(gòu)的存儲一定是連續(xù)的,鏈?zhǔn)酱鎯Y(jié)構(gòu)的存儲空間不一定

是連續(xù)的

B.順序存儲結(jié)構(gòu)只針對線性結(jié)構(gòu),鏈?zhǔn)酱鎯Y(jié)構(gòu)只針對非線性結(jié)構(gòu)

C.順序存儲結(jié)構(gòu)能存儲有序表,鏈?zhǔn)酱鎯Y(jié)構(gòu)不能存儲有序表

D.鏈?zhǔn)酱鎯Y(jié)構(gòu)比順序存儲結(jié)構(gòu)節(jié)省存儲空間

10.下列說法正確的是()。

A.內(nèi)聯(lián)函數(shù)在運行時是將該函數(shù)的目標(biāo)代碼插入每個調(diào)用該函數(shù)的地

B.內(nèi)聯(lián)函數(shù)在編譯時是將該函數(shù)的目標(biāo)代碼插入每個調(diào)用該函數(shù)的地

C.類的內(nèi)聯(lián)函數(shù)必須在類體內(nèi)定義

D.類的內(nèi)聯(lián)函數(shù)必須在類體外通過加關(guān)鍵字inline定義

二、單選題(13題)

11.若有下面的函數(shù)調(diào)用:fun(fl+b,3,max(n-1,B.)則fun的實參

個數(shù)是()。

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

12.下列有關(guān)繼承和派生的敘述中,正確的是

A.派生類不能訪問基類的保護(hù)成員

B.作為虛基類的類不能被實例化

C.派生類應(yīng)當(dāng)向基類的構(gòu)造函數(shù)傳遞參數(shù)

D.虛函數(shù)必須在派生類中重新實現(xiàn)

13.下列關(guān)于成員函數(shù)特征的描述中錯誤的是()。

A.成員函數(shù)可以重載B.成員函數(shù)一定是內(nèi)聯(lián)函數(shù)C.成員函數(shù)可以是

靜態(tài)的D.成員函數(shù)可以設(shè)置參數(shù)的默認(rèn)值

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

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

()o

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

15.關(guān)于內(nèi)聯(lián)函數(shù)的說法,不正確的是()。

A.在說明類的同時定義成員函數(shù),則函數(shù)隱含為內(nèi)聯(lián)函數(shù)

B.也可在類外用inline關(guān)鍵字對成員函數(shù)進(jìn)行說明,則該函數(shù)也為內(nèi)聯(lián)

函數(shù)

C.當(dāng)內(nèi)聯(lián)函數(shù)被調(diào)用時,內(nèi)聯(lián)函數(shù)的代碼在調(diào)用處被展開

D.當(dāng)內(nèi)聯(lián)函數(shù)被調(diào)用時,內(nèi)聯(lián)函數(shù)將返回結(jié)果

16.有如下程序:

#include<iostream>

usingnamespacestd;

classMonkey{

public:

MonkeyO{cout?'M';}

Monkey(charn){cout?n;}

-Monkey(){cout?'Y';}

};

intmain(){

Monkeypl,*p2;

p2=newMonkey('X');

deletep2;

return0;

)

運行這個程序的輸出結(jié)果是

A.MYXB.MYMYC.MXYD.MXYY

17.下面關(guān)于虛函數(shù)的描述中正確的是()o

A.虛函數(shù)是一^靜態(tài)成員函數(shù)

B.虛函數(shù)是一個非成員函數(shù)

C.虛函數(shù)可以在函數(shù)說明時定義,也可以在函數(shù)實現(xiàn)時定義

D.派生類的虛函數(shù)與基類中對應(yīng)的虛函數(shù)具有相同的參數(shù)個數(shù)和類型

18.下列關(guān)于數(shù)據(jù)庫系統(tǒng)的敘述中正確的是()。

A.數(shù)據(jù)庫系統(tǒng)減少了數(shù)據(jù)冗余

B.數(shù)據(jù)庫系統(tǒng)避免了一切冗余

C.數(shù)據(jù)庫系統(tǒng)中數(shù)據(jù)的一致性是指數(shù)據(jù)類型一致

D.數(shù)據(jù)庫系統(tǒng)比文件系統(tǒng)能管理更多的數(shù)據(jù)

19.以下程序的輸出結(jié)果是#include<iostream.h>voidreverse(inta[],

intn){inti,t;for(i=0;<n/2;i++){t=a[i]=a[i]=a[n-l-i];a[n-l-i]=t;}}

voidmain(){intb[10]={l,2,3,4,5,6,7,8,9,10};inti,s=0;

reverse(b,8);for(i=6;i<10;i++)s+=b[i];cout<<s;}

A.22B.10C.34D.30

20.語句int*P=&k;定義了指針P,與這個語句等效的語句序列是()。

A.int*p;P=&k;

B.int*P;P=k;

C.int*p;*P=&k;

D.int*p;*P=k;

21.下列選項,不正確的是()。

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++;

22.模板對類型的參數(shù)化提供了很好的支持,因此()。

A.類模板的主要作用是生成抽象類

B.類模板實例化時,編譯器將根據(jù)給出的模板實參生成一個類

C.在類模板中的數(shù)據(jù)成員都具有同樣類型

D.類模板中的成員函數(shù)都沒有返回值

23.假定MyClass為一個類,那么下列的函數(shù)說明中,()為該類的

析構(gòu)函數(shù)。

A.void-MyClass();

B.~MyClass(intn);

C.MyClass();

D.~MyClass();

三、2.填空題(12題)

24.數(shù)據(jù)的邏輯結(jié)構(gòu)在計算機(jī)存儲空間中的存放形式稱為數(shù)據(jù)的

25.以下程序的輸出結(jié)果是【】。

#include<iostream.h>

voidmain()

)

inta=0;

a+=(a=8);

cout<<a;

)

26.C++語言中的基本符號可以分為____三類。

27.在關(guān)系模型中,把數(shù)據(jù)看成一個二維表,每一個二維表稱為一個【】。

28.面向?qū)ο蟮某绦蛟O(shè)計方法中涉及的對象是系統(tǒng)中用來描述客觀事物

的一個【】。

29.數(shù)據(jù)結(jié)構(gòu)分為邏輯結(jié)構(gòu)與存儲結(jié)構(gòu),線性鏈表屬于【】。

30.測試的,目的是暴露錯誤,評價程序的可靠性;而【】的目的是發(fā)

現(xiàn)錯誤的位置并改正錯誤。

31.以下函數(shù)模板min的功能是返回數(shù)組a中最小元素的值。請將橫線

處缺失部分補(bǔ)充完整。

template<typenameT>Tmin(Ta[],intn)

(

Ttemp=a[01;

for(inti=l,i<n;i++)

if(a[i]<temp);

returntemp;

)

32.虛函數(shù)必須是類的【】。

33.假定用戶沒有給一個名為MyClass的類定義析構(gòu)函數(shù),則系統(tǒng)為其

定義的默認(rèn)析構(gòu)函數(shù)首部形式為【】。

34.插入排序算法的主要思想:每次從未排序序列中取出一個數(shù)據(jù),插

入到已排序序列中的正確位置。Insert類的成員函數(shù)sort。實現(xiàn)了插入排

序算法,請?zhí)羁铡?/p>

classInsert{

public:

Insert(int*bO,intnO):b(bO),n(nO)<);〃參數(shù)bO是某數(shù)組首地址,n是數(shù)組

元素個數(shù)

voidsort()

{〃此函數(shù)假設(shè)已排序序列初始化狀態(tài)只包含b[0],未排序序列初始為

for(inti=l;i<n;++i)

intt=b[i];

intj;

for(;j>0;-j)

(

if(t>=bU-l])

break;

b[j]=b[j-l];

b[j]=t;

}

)

)

35.重載的運算符保持其原有的【】、優(yōu)先級和結(jié)合性不變。

四、程序改錯題(10題)

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

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

確。

程序輸出:

8

8

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

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

試題程序:

#include(iostream.h>

classCO

{

public:

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

staticintn=O:

CO

n++:

?CO

n—:

):

<!>*1**1**1**1**1**1**1**A?*A?*1**!*/

/不不不不不不不不crrcr不不不不不不下不/

intCO::n;

voidmain

COobj;

COobj2[7];

CO*C=NULL:

c=&obj:

<!**!>>1**1**1**.1**.£**4*?X**1**1**5**1**!*/

/不不小不不不不下errcr不不不個不不不不/

eout?C.n?endl;

cout?C0::n?endl;

37.使用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

{

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

TCobjl;

objl.Print;

TCobj2(3);

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

objl.number=10;

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

TC.SetNumber(lOO);

objl.Print;

obj2.Print;

)

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

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

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

程序異常,輸出信息為

error

0

ERROR

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

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

試題程序:

#include<iostream.h)

intmain

try

(

throw("error");

)

/*1**1**1**!**1*、上*1*7,*1**1**1**1**1*、1,

//個不不不■不平不個errcr個不不不不不不不

catch(chars)

{

cout?s?endl;

)

try

(

throw((int)0);

)

/*1>*1**1**1**1**1*、1,

//不不不不不不不個prrcr不不不不不不不不

catch

(

cout?i?endl;

)

try

(

throw(O);

throw("error");

}

/*1**1**1**1*、卜*1*、,,*1**1^>1*<1**1**1*、!,

//小不不小不下不不ermr不不不不不不不不

catch

(

cout?"ERROR"?endl;

returnO;

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

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

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

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

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

I!******error******-jx'p^~|

試題程序:

#include<iostream>

#include<fstream>

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

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[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;

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

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

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;

)

41.使用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

(

returnnumber;

)

voidPrintconst

(

cout?"number="?number?endl;

)

private:

intnumber;

voidmain

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

TCobjl;

objl.Print;

TCobj2(3);

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

objl.number=10;

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

TC.SetNumber(lOO);

objl.Print;

obj2.Print;

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

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

入多行,當(dāng)輸入字符“?”時,默認(rèn)字符輸入結(jié)束,最后把結(jié)果輸出到屏幕

中。

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

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

試題程序:

#include<iostream.h>

voidmain

(

inti=O;

charstr[120];

cout?"Enterastringendwith?."?endl;

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

cin.getline(str,120);

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

while(str)

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

if(str[i])=a)

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

i++;

)

cout?str?endl;

return;

)

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

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

為:

sizeof(Sl)=5

sizeof(s2)=10

sizeof(s3)=l

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

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

⑴不能刪除assert()語句。

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

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

試題程序:

#include<iostream.h>

#include<assert.h>

voidmain()

(

char*sl="abc":

II********ej*ror********

assert(sizeof(s1)==3):

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

chars2[10]="ab":

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

assert(sizeof(s2)==2);

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

chars3=23:

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

assert(sizeof(s3)==4);

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

return;

)

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

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

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

程序異常,輸出信息為

error

0

ERROR

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

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

試題程序:

#include<iostream.h)

intmain

(

try

{

throw("error");

catch(chars)

(

cout?s?endl;

)

try

{

throw((int)0);

)

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

catch

(

cout?i?endl;

)

try

{

throw(O);

throw("error");

}

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

catch

(

cout?"ERROR"?endl;

)

retumO;

}

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

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

9,8,7,6,5

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

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

試題程序:

#include(iostream.h>

classTC

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

TC(inti)

(

m_i=i;

)

voidprint

(

cout?—m_i?,;

)

public:

intm_i;

);

intmain

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

inti;

TC04(10);

while(i>5)

I**************!

1++:

04.print;

)

cout?endl;

returnO;

)

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

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

(

};

II********2********

classCl:

public:

voidprint

cout<",,Cl"<<endl;

classC2:

public:

voidprint

cout<<"C2"<<endl;

};

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

classC3:

public:

voidprint

cout<<"C3"<<endl;

};

voidmain

C3Obj3;

C20bj2;

obj3.print;

obj2.print;

return;

)

47.請使用VC6或使用【答題】菜單打開考生文件夾proj3下的工程

proj3,其中包含了類IntegerSet和主函數(shù)main的定義。一個IntegerSet

對象就是一個整數(shù)的集合,其中包含。個或多個無重復(fù)的整數(shù);為了

便于進(jìn)行集合操作,這些整數(shù)按升序存放在成員數(shù)組elem的前若干單

元中。成員函數(shù)add的作用是將一個元素添加到集合中(如果集合中不

存在該元素),成員函數(shù)remove從集合中刪除指定的元素(如果集合中

存在該元素)。請編寫成員函數(shù)remove。在main函數(shù)中給出了一組測

試數(shù)據(jù),此時程序的正確輸出結(jié)果應(yīng)為:

23452728316675

234562728315675

23456192728316675

3456192728316675

3456192728316675

要求:

補(bǔ)充編制的內(nèi)容寫在“〃***********333************與

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

注意:程序最后將結(jié)果輸出到文件out.dat中。輸出函數(shù)writeToFile

已經(jīng)編譯為。bj文件,并且在本程序中調(diào)用。

//IntegorSet.h

#ifndefINTEGERSET

#defineINTEGERSET

#include<iostream>

usingnamespacestd;

constintMAXELEMENTS=100;

//集合最多可擁有的元素個數(shù)

classIntegerSet{

intelem[MAXELEMENTS];

//用于存放集合元素的數(shù)組

intcounter;//用于記錄集合中元素個數(shù)的計數(shù)器

public:

IntegerSet:counter(0){}

〃創(chuàng)建一個空集合

IntegerSet(intdata[],intsize);

//利用數(shù)組提供的數(shù)據(jù)創(chuàng)建一個整數(shù)集合

voidadd(intelement);

〃添加一個元素到集合中

voidremeve(intelement);

〃刪除集合中指定的元素

intgetCountconst{returncounter;}

〃返回集合中元素的個數(shù)

intgetElement(inti)const{returnelem[i];}〃返回集合中指定的元素

voidshowconst;

};

voidWriteToFile(char*);

#endif

//main,cpp

#include,,IntegerSet.h"

#include<inmanip>

IntegerSet::IntegerSet(intdata[],intsize):counter(0){

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

add(data[i]);

)

)

voidIntegerSet::add(intelement){

intj;

〃從后往前尋找第一個小于等于element的元素

for(j=counter;j>0;j-)

if(element>=elem[j一l])break;

〃如果找到的是等于element的元素,說明要添加的元素已經(jīng)存在,直

接返回

if(element==elemfj-1])return;

〃如果找到的是小于element的元素,j就是要添加的位置

//該元素及其后面的元素依次后移,騰出插入位置

for(intk=counter;k>j;k一)

elem[k]=elem[k一1];

elem[j]=element;〃將element插入到該位置

counter++;〃計數(shù)器加1

voidIntegerSet::remove(intelement){

〃***************333***************

voidIntegerSet::showconst{

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

cout?setw(4)?getElement(i);

cout?endl:

)

intmain{

intd[]={5,28,2,4,5,3,2,75,27,66,31);

IntegerSetS(d,11);S.show;

S.add(6);s.show;

S.add(19);S.show;

S.remove(2);s.show;

S.add(4);S.show;

,,,,

writeToFile();

return0;

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

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

序文件MyMain8.cpp,該程序?qū)崿F(xiàn)棧的入棧和出棧的操作。其中有兩個

類:一個是節(jié)點類node,它包含節(jié)點值和指向上一個節(jié)點的指針prey;

另一個類是棧類stack,它包含棧的頭指針top。但類的定義并不完整。

請按要求完成下列操作,將類Sample的定義補(bǔ)充完成:

①定義私有節(jié)點值data,它是血型的數(shù)據(jù),以及定義一個指向上一個節(jié)

點的指針prev。請在注釋“〃**1**”之后添加適當(dāng)?shù)恼Z句。

②完成構(gòu)造函數(shù)node(intd,node*n)的定義,使得私有成員data和prev分

別初始化為d和no請在注釋“//**2**”之后添加適當(dāng)?shù)恼Z句。

③完成類stack的成員函數(shù)push(inti)的類體內(nèi)的定義。函數(shù)push()實現(xiàn)

入棧這個操作,即把形參i壓入棧中,那么此時應(yīng)該創(chuàng)建一個新的節(jié)點,

并讓這個節(jié)點的prev指針指向棧頂。請在注釋“//**3**”之后添加適當(dāng)

的語句。

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

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

//MyMain8.cpp

#include<iostream>

usingnamespacestd;

classstack;

classnode

(

private:

〃**]**

public:

node(intd,node*n)

(

〃**2**

)

friendclassstack;

);

classstack

node*top;//棧頭

public:

stack()

{

top=0;

)

voidpush(inti)

(

〃**3**

)

intpop()

{

node*t=top;

if(top)

(

top=top->prev;

intc=t->data;

deletet;

returnc;

)

return0;

)

);

intmain()

(

stacks;

s.push(6);

s.push(3);

s.push(l);

return0;

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

test32_3.cpp,其中定義了復(fù)數(shù)類complex,但該類的定義并不完整。請

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

(1)定義復(fù)數(shù)類complex的私有數(shù)據(jù)成員real和image,用來分別表示復(fù)

數(shù)的實部和虛部,它們都是double型的數(shù)據(jù)。請在注釋“〃**1**”之后添

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

(2)添加復(fù)數(shù)類complex的帶一個參數(shù)的構(gòu)造函數(shù),分別將real和image

賦值為參數(shù)r的值和0.0,請在注釋“〃**2**”之后添加適當(dāng)?shù)恼Z句。

⑶完成復(fù)數(shù)類complex的“+”運算符重載成員函數(shù)的定義,兩個復(fù)數(shù)相

加是將復(fù)數(shù)的實部和虛部分別進(jìn)行相加,請在注釋“〃**3**”之后添加適

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

(4)完成復(fù)數(shù)類complex的友元函數(shù)isequal(complex*cl,complex*c2)的

定義,如果復(fù)數(shù)cl與c2相等即cl與c2的實部和虛部分別相等,則返

回1,否則返回0。請在注釋“〃**4**”之后添加適當(dāng)?shù)恼Z句。

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

36+0i=36+0i

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

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

#include<iostream.h>

classcomplex

{

public:

complex(){real=image=O.O;}

complex(doubler)

〃**2**

)

complexoperator+(constcomplex&c);

friendboolisequal(complex*cl,complex*c2

voiddisplayO;

);

complexcomplex::operator+(constcomplex&c)

{

〃**3**

temp.real=real+c.real;

temp.image=image+c.image;

returntemp;

)

boolisequal(complex*cl,complex*c2)

(

//**4**

return1;

else

return0;

)

voidcomplex::display()

(

cout<<real;

if(image>=0)cout<<<<image<<"i";

elseif(image<0)cout<<image<<"i";

)

voidmain()

(

complexcl,c2(36.0);

cl=cl+c2;

cl.displayO;

if(isequal(&cl,&c2))cout<<

elsecoat<<"<>

c2.display();

cout<<end1;

)

參考答案

1.D解析:在C語言中,所有的函數(shù)都是平行的,即在定義函數(shù)時是互

相獨立的,一個函數(shù)并不從屬于另一個函數(shù),即函數(shù)不能嵌套定義,但

可以互相調(diào)用,但不能調(diào)用main函數(shù)。注意:函數(shù)不能嵌套定義,但

可以嵌套調(diào)用,故選項A)、B)和C)中的描述都錯誤。

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

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

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

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

3.D

4.D【解析】算法的空間復(fù)雜度是指執(zhí)行這個算法所需要的內(nèi)存空間。一

個算法所占用的存儲空間包括算法程序所占的空間、輸入的初始數(shù)據(jù)所

占的存儲空間以及算法執(zhí)行中所需要的額外空間。其中額外空間包括算

法程序執(zhí)行過程中的工作單元以及某種數(shù)據(jù)結(jié)構(gòu)所需要的附加存儲空

間。如果額外空間量相對于問題規(guī)模來說是常數(shù),則稱該算法是原地工

作的。在許多實際問題中,為了減少算法所占的存儲空間,通常采用壓

縮存儲技術(shù),以便盡量減少不必要的額外空間。

5.A解析:此題考查的是“++”運算符的重載。為了區(qū)分前綴和后綴運算

符,規(guī)定:重載后綴運算符時必須多一個虛擬參數(shù):int。本題中,A(2)

首先給n賦值2,語句A++,調(diào)用的是后綴運算符重載語句,使得n加

2變?yōu)?。B(2)首先給n賦值2,然后語句++B,調(diào)用前綴運算符重載函

數(shù),使得n加1。因此最終的輸出結(jié)果是n=4n=3。

6.A解析:C++語言中的注釋與C潔言不同,C語言的注釋符號只有/*

*/,而C++在此基礎(chǔ)上又加上了//,此注釋用于單行注釋。注意:注釋

不影響程序的運行。

7.A解析:在C++中,由于析構(gòu)函數(shù)不能被繼承,因此在執(zhí)行派生類的

析構(gòu)函數(shù)時,基類的析構(gòu)函數(shù)也將被調(diào)用。執(zhí)行順序是先執(zhí)行派生類的

析構(gòu)函數(shù),再執(zhí)行基類的析構(gòu)函數(shù),其順序與執(zhí)行構(gòu)造函數(shù)的順序正好

相反。在此題的程序中,在主函數(shù)結(jié)束時,派生類Derived對象。obj將

被刪除,所以就會調(diào)用對象的析構(gòu)函數(shù)。先調(diào)用派生類的析構(gòu)函數(shù),輸

出x,然后調(diào)用基類的析構(gòu)函數(shù),輸出y。

8.D解析:循環(huán)隊列中,頭指針指向的是隊頭元素的前一個位置,而尾

指針的是隊尾元素所在的位置,因此隊列中元素的個數(shù)為(n+R.F)mod

no

9.A

解析:順序存儲結(jié)構(gòu)就是用一組地址連續(xù)的存儲單元依次存儲該線性

表中的各個元素,鏈?zhǔn)酱鎯Y(jié)構(gòu)中各數(shù)據(jù)結(jié)點的存儲序號是不連續(xù)

的,并且各結(jié)點在存儲空間中的位置關(guān)系與邏輯關(guān)系也不一致,所以

選項A是正確的。兩者都可以存儲線性的、有序的邏輯結(jié)構(gòu),所以選

項B、C不正確。順序結(jié)構(gòu)使用的是連續(xù)物理空間,鏈?zhǔn)浇Y(jié)構(gòu)可以使

用零散的物理空間存儲,鏈?zhǔn)浇Y(jié)構(gòu)更靈活,不存在誰節(jié)約空間的說

法,所以選項D不正確。

10.B解析:本題考查的是內(nèi)聯(lián)函數(shù)的定義,引入內(nèi)聯(lián)函數(shù)是為了解決

程序中函數(shù)調(diào)用的效率問題,是以目標(biāo)代碼的增加為代價換取時間的節(jié)

??;一般函數(shù)在運行時被調(diào)用,而調(diào)用的內(nèi)聯(lián)函數(shù)在編譯時就被替代了,

如果不加inline關(guān)鍵字,則編譯器會將在類說明部分定義的任何函數(shù)都

被認(rèn)定為內(nèi)聯(lián)函數(shù)。

11.A

本題考查函數(shù)實參個數(shù)的基礎(chǔ)知識,根據(jù)實參的概念,(a+b)、3、

mflJc(n-1,b)分別為其中的3個實參。故答案為A。

12.C

解析:本題考查的知識點是:繼承和派生。無論使用哪種繼承方式,

派生類中的成員都不能訪問基類中的私有成員,而可以訪問基類中的

公有成員和保護(hù)成員,因此選項A)不正確。在C++中,只有抽象類

不能被實例化,而虛基類不一定非得是抽象類,所以選項B)不正確。

在派生類中可以重新定義從基類繼承下來的虛函數(shù),也可以不重新定

義,因此選項D)不正確。故本題應(yīng)該選擇C。

13.B解析:C++中,成員函數(shù)可以是內(nèi)聯(lián)函數(shù),也可以不是內(nèi)聯(lián)函數(shù)。

在類定義體外實現(xiàn)的函數(shù)可以通過在函數(shù)說明和定義上分別加上inline

來表示函數(shù)是內(nèi)聯(lián)函數(shù),否則就不是內(nèi)聯(lián)函數(shù)。

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

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

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

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

控制流。

15.D解析:內(nèi)聯(lián)函數(shù)被調(diào)用時,只是把代碼在被調(diào)用處展開,不是把函

數(shù)的運算結(jié)果返回。

16.A

17.DD。【解析】本題考查虛函數(shù)的概念。虛函數(shù)是非靜態(tài)的成員函數(shù),

它不能是友元函數(shù),但可以在另一個類中被聲明為友元函數(shù)。虛函數(shù)必

須是類的成員函數(shù),虛函數(shù)聲明只能出現(xiàn)在類定義的函數(shù)原型聲明中,

而不能在成員函數(shù)的函數(shù)體實現(xiàn)的地方,一般要求基類中說明了虛函數(shù)

后,派生類說明的虛函數(shù)應(yīng)該與基類中虛函數(shù)的參數(shù)個數(shù)相等,對應(yīng)參

數(shù)的類型相同。如果不相同,則將派生類虛函數(shù)的參數(shù)類型強(qiáng)制轉(zhuǎn)換為

基類中虛函數(shù)的參數(shù)類型。

18.A

19.A解析:在main函數(shù)中,調(diào)用reverse函數(shù)將b數(shù)組中的前8個成員

進(jìn)行互置,執(zhí)行完畢后,b數(shù)組中的成員為{8,7,6,5,4,3,2,1,

9,10),在執(zhí)行for循環(huán)結(jié)構(gòu)后,將b[6],b[7]……b[9]的值相加,結(jié)果

為1+2+9+10=22。注意:在計算累加和時,應(yīng)將累加變量賦值為零。

20.A

解析:本題考查的知識點是:指針的賦值。題目中的語句int*p=&k;

有兩個作用:首先,定義了一個int型指針p;然后,將變量k的地址

&k賦給剛定義的指針p。所以等效的語句序列為:int*p;p=&k;,應(yīng)

該選擇Ao

21.B解析:本題考查的是基本循環(huán)語句的使用,選項A),選項C)和選

項D)都為正確的形式,在選項B)中的while(a<=10)后缺少結(jié)束符分號

,,

22.B

本題考查類模板的基本概念。類模板的定義和聲明都以關(guān)鍵字template

開頭。關(guān)鍵字后面是一個用逗號分隔的模板參數(shù)表,用尖括號“<>”括

起來,這個表被稱為類模板的模板參數(shù)表。類模板是類的抽象,類是

類模板的實例。類模板使類中的一些數(shù)據(jù)成員和成員函數(shù)的參數(shù)或返

回值可以取任意的數(shù)據(jù)類型。所以B選項正確。

23.D解析:本題考核類的析構(gòu)函數(shù)。在C++中,析構(gòu)函數(shù)名為符號“?”

加類名,析構(gòu)函數(shù)沒有參數(shù)和返回值。根據(jù)以上知識可知,MyClass類

的正確析構(gòu)函數(shù)的說明為~MyClass()。

24.模式或邏輯模式或概念模式模式或邏輯模式或概念模式

25.1616解析:賦值表達(dá)式的值就是所賦值變量的值,本題中a+=8相當(dāng)

于a=a+8,對表達(dá)式逐步進(jìn)行求解:a+=(a=8)此時,a的值由于賦值為8,

而不是o

a+=8

a=a+8

a=16

注意:要掌握“+=”等相關(guān)運算符的用法。

26.字母數(shù)字特殊符號字母數(shù)字特殊符號

27.關(guān)系關(guān)系解析:在關(guān)系模型中,把數(shù)據(jù)看成一個二維表,每一個二

維表稱為一個關(guān)系。表中的每一列稱為一個屬性,相當(dāng)于記錄中的一個

數(shù)據(jù)項,對屬性的命名稱為屬性名;表中的一行稱為一個元組,相當(dāng)于

記錄值。

28.實體實體解析:面向?qū)ο蟮某绦蛟O(shè)計方法中涉及的對象是系統(tǒng)中用

來描述客觀事物的一個實體,是構(gòu)成系統(tǒng)的一個基本單位,它由一組表

示其靜態(tài)特征的屬性和它可執(zhí)行的一組操作組成。

29.存儲結(jié)構(gòu)存儲結(jié)構(gòu)解析:數(shù)據(jù)的邏輯結(jié)構(gòu)是指反映數(shù)據(jù)元素之間邏

輯關(guān)系的數(shù)據(jù)結(jié)構(gòu);數(shù)據(jù)的存儲結(jié)構(gòu)是指數(shù)據(jù)的邏輯結(jié)構(gòu)在計算機(jī)存儲

空間中的存放形式。在數(shù)據(jù)的存儲結(jié)構(gòu)中,不僅要存放各數(shù)據(jù)元素的信

息,還需要存放各數(shù)據(jù)元素之間的前后件關(guān)系的信息。

30.調(diào)試調(diào)試

31.temp=a[i]或temp=*(a+i)或temp=*(i+a)temp=a[i]或temp=*(a+i)或

temp=*(i+a)

32.成員函數(shù)成員函數(shù)解析:C++中,只有類的成員函數(shù)才能說明為虛

函數(shù)。這是因為,虛函數(shù)僅適用于有繼承關(guān)系的類對象,所以普通函數(shù)

不能說明為虛函數(shù)。

33.?MyClass()

34.j=ij=i解析:在函數(shù)sort。中,外層for循環(huán)中依次將數(shù)組b中的值賦

值給變量t,然后在內(nèi)層循環(huán)中依次與已經(jīng)排序的數(shù)組元素進(jìn)行比較,

并在符合條件的位置插入該元素。由語句可知,數(shù)組中有i個

元素已經(jīng)排好了序。因此,根據(jù)內(nèi)層循環(huán)中的語句,知道內(nèi)層

循環(huán)是將當(dāng)前的第i個元素與j個元素進(jìn)行比較,前面已知數(shù)組中有i

個元素已經(jīng)排好了序根據(jù)題干中的要求“插入到已排序序列中",即j=i。

35.操作符個數(shù)操作符個數(shù)解析:本題考查的是運算符重載的概念,用

戶重新定義的運算符不改變原運算符的優(yōu)先性和結(jié)合性,也不改變運算

符的語法結(jié)構(gòu).也就是說重載運算符不會產(chǎn)生新的運算符。

36.(1)44staticintn=O,,lS0t^/t€staticintn;"。

(2)“intC0::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;

37.(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)該使用定義的對象,即。bj2,所以將語句修改為

“obj2.SetNumber(lOO);

38.(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(…)”。

39.(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。1.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]);

40.(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;

41.⑴應(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(l);第2處處的

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

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

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

第3處刀(3.56時110收式100);”語句中的T(2為類,并不是對象,這里

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

“obj2.SetNumber(lOO);

42.(1)應(yīng)改為“ein.getline(str,120,?);

\n⑵應(yīng)改為"while(st巾])”。

>,

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

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

函數(shù)getline函數(shù)讀入一行字符,格式為“cin.g

溫馨提示

  • 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

提交評論