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

下載本文檔

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

文檔簡介

2023年甘肅省天水市全國計算機等級考試

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

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

一、1.選擇題(10題)

1.下面是關(guān)于派生類聲明的開始部分,其中正確的是

A.classvirtualB:publicA

B.virtualclassBipublicA

C.classB:publicAvirtual

D.classB:virtualpublicA

2.下面程序的運行結(jié)果為()。#include<iostream>

usingnamespacestd;voidmain(){int

a=l;switch(a){case1:

cout<<"1";case2:cout<<"2";

break;default:cout<<

"0";}}

A.12B.120C.1D.10

3.若有以下程序:#include<iostream>usingnamespacestd;classA

{private:inta;public:A(imi){a=i;}voiddisp()cout<<a<<}};

classB{private:intb;public:B(intj){歸;}voiddispO{cout<<b<<

}};classC:publicB,publicA{private:intc;public:C(intk):A(k-

2),B(k+2){c=k;}voiddispO{A::disp();B::disp();cout<<c<<endl;}};

intmain(){Cobj(10);obj.dispQ;return0;}程序執(zhí)行后的輸出結(jié)果是0。

A.10,10,10B.10,12,14C.8,10,12D.8,12,10

4.下列各項中不符合函數(shù)重載必須滿足的條件的是o

A.必須有不同的參數(shù)個數(shù)B.對應(yīng)的參數(shù)類型必須不相同C.A和B必須

同時滿足D.A和B只要滿足一個即可

5.面向?qū)ο蟪绦蛟O(shè)計將數(shù)據(jù)和0放在一起,作為一個相互依存、不可分

割的整體來處理。

A.對數(shù)據(jù)的操作B.信息C.數(shù)據(jù)隱藏D.數(shù)據(jù)抽象

6.對于模板定義關(guān)鍵字class和typename說法不正確的是()。

A.程序中的class并不能都替換為typename

B.class和typename都可互相替換

C.程序中的typename都能替換為class

D.程序中的部分class可以替換為typename

7.設(shè)intx[]=(l,3,5,7,9,11,13),*p=x;則不能正確引用數(shù)組元

素的表達式是O

A.*(p—)B.*(-p)C.*(p++)D.*(++p)

下列敘述中正確的是

A)軟件測試的主要目的是發(fā)現(xiàn)程序中的錯誤

B)軟件測試的主要目的是確定程序中錯誤的位置

0為了提高軟件測試的效率,最好由程序編制者自己來完成軟件測試的工作

8.D)軟件測試是證明軟件沒有錯誤

9.下列關(guān)于運行符重載的描述中,正確的是()。

A.運算符重載可以改變操作數(shù)的個數(shù)

B.運算符重載可以改變操作數(shù)的優(yōu)先級

C.運算符重載可以改變運算符的結(jié)合性

D.運算符重載可以使運算符實現(xiàn)特殊功能

10.在進行任何CH流的操作后,都可以用C++流的有關(guān)成員函數(shù)檢測

流的狀態(tài):其中只能用于檢測輸入流狀態(tài)的操作函數(shù)名稱是()。

A.failB.eofC.badD.good

二、單選題(13題)

11.按照“先進先出”組織數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)是()o

A.隊列B.棧C.雙向鏈表D.二叉樹

12.下列關(guān)于賦值運算符“=”重載的敘述中,正確的是

A.賦值運算符只能作為類的成員函數(shù)重載

B.默認的賦值運算符實現(xiàn)了“深層復(fù)制”功能

C.重載的賦值運算符函數(shù)有兩個本類對象作為形參

D.如果已經(jīng)定義了復(fù)制(拷貝)構(gòu)造函數(shù),就不能重載賦值運算符

13.數(shù)據(jù)庫管理系統(tǒng)是()。

A.操作系統(tǒng)的一部分B.在操作系統(tǒng)支持下的系統(tǒng)軟件C一種編譯系

統(tǒng)D.一種操作系統(tǒng)

14.若磁盤上已存在某個文本文件,其全路徑文件名為d:\shiti\tes.txt,

下列語句中不能打開該文件的是()o

A.ifstreamfile("d:\shiti\test.txt");

B.ifstreamfile("d:\\shiti\\test.txt");

C.ifstreamfile;file.open("d:\\shiti\\test.txt");

D.ifstream*pFile=newifstream("d:\\shiti\\test.txt");

15.有下列程序:

#include<stdiO.h>

voidmain()

{chara=4;

printf("%d\n",a=a?l);

)

程序的運行結(jié)果是()oA.40B.16C.8D.4

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

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

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

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

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

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

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

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

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

B.disp();}

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

18.假定MyCIass為一個類,那么下列的函數(shù)說明中,()為該類的析構(gòu)

函數(shù)。

A.void?MyClass();

B.~MyClass(intn);

C.MyClass();

D.~MyClass();

19.派生類對象對其基類中的什么成員是可訪問的?()

A.公有繼承的私有成員B.私有繼承的公有成員C.私有繼承的保護成

員D.保護繼承的保護成員

20.設(shè)有charstr[80];以下不能將輸入數(shù)據(jù)first\nsecond\n<CR>讀取到

數(shù)組str中的語句是

A.cin.get(str,strlen(str));

B.cin.getline(str,strlen(str));

C.cin>>str;

D.cin.read(str,strlen(str));

21.有如下程序:

#included<iostream>

usingnamespacestd;

classTestClass{

protected:

TestClass(){cout?X;}

TestClass(charc){cout?c;}};

classTestClassl:publicTestClass{

public:

TestClassl(charc){cout?C;}};

intmain(){

TestClassldl(y);

returnO;}

執(zhí)行這個程序,屏幕上將顯示輸出()。A.yB.yxC.xyD.yy

22.下列程序的運行結(jié)果為

#include<iostream.h>

inti=0;

classA{

public:

A(){i++;)

};

voidmain()

(

Aa,b[3],*c;

c=b;

cout<<i<<endl;

)

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

23.面關(guān)于類的靜態(tài)成員,說法正確的是o

A.類的靜態(tài)成員函數(shù)只能訪問類的靜態(tài)數(shù)據(jù)成員

B.類的靜態(tài)成員函數(shù)可直接訪問類的所以數(shù)據(jù)成員

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

D.靜態(tài)數(shù)據(jù)成員只能通過“類名::”進行訪問

三、2.填空題(12題)

24.在數(shù)據(jù)庫管理系統(tǒng)提供的數(shù)據(jù)定義語言、數(shù)據(jù)操縱語言和數(shù)據(jù)控制

語言中,負責數(shù)據(jù)的模式定義與數(shù)據(jù)的物理存取構(gòu)建。

25.已知類sample是一個抽象類,其成員函數(shù)display是無形參、無返

回類型的純虛函數(shù),請完成其聲明:

classsample{

public:

sampleQ{};

【】

);

26.C++語言的基本控制結(jié)構(gòu)為順序結(jié)構(gòu)、選擇結(jié)構(gòu)和【】。

27.對待排序文件的初始狀態(tài)作要求的排序方法是【】。

28.重載的關(guān)系運算符和邏輯運算符的返回類型應(yīng)當是【】。

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

線處缺失部分補充完整。

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

(

Tm=a[O];

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

if(a[i]>m);

returnm;

)

30.若要把voidffim()定義為類A的友元函數(shù),則應(yīng)在類A的定義中加

入語句O

31.有如下的程序:

#include<iostream>

usingnamespacestd;

classAT{

fi'iendostream&operator<<(ostream&,AT);

}at;

ostream&operator<<(ostream&os,AT){returnos<<;}

intmain(){

cout<<"MyHome"<<at<<"isH";

}

執(zhí)行上面的程序?qū)⑤敵鰋

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

#include<iostream.h>

voidmain()

inta(5),b(6),i(O)lj(O);

switch(a)

case5:switch(b)

(

case5:i++;break;

case6:j++;break;

defaun:i++;j++;

}

case6:i++;

j++/

break;

default:i++;j++;

}

cout<<i<<","<<j<<endl;

}

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

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

35.下面程序的功能是將字符數(shù)組a中下標值為偶數(shù)的元素從小到大排

列,其他元素不變,請?zhí)羁铡?/p>

#include<iostream.h>

#include<string.h>

voidmain()

{chara[]="clanguage",t;

inti,j,k;

k=strlen(a);

fbr(i=O;i<=k-2;i+=2)

for(j=i+2;j<=k;[]=

if([1)

{t=a[i];a[i]=a[j];a[j]=t;}

cout<<a;

cout<<endl;=

四、程序改錯題(10題)

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

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

number=l

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

(

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

TCobjl;

objl.Print;

TCobj2(3);

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

objl.number=10;

!1********ej*j*or*******

TC.SetNumber(lOO);

objl.Print;

obj2.Print;

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

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

9,8,7,6,5

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

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

試題程序:

#include(iostream.h>

classTC

!********ej*ror********/

TC(inti)

m_i=i;

voidprint

{

cout?~m_i?,;

s

public:

intmi;

intmain

!********ej*i*oi*********!

inti;

TC04(10);

while(i>5)

(

I****************I

i++:

04.print;

}

cout?endl;

returnO;

}

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

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

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

程序異常,輸出信息為

error

O

ERROR

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

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

試題程序:

#include<iostream.h)

intmain

{

try

throw("error");

)

/*1**1**4**4**1**1**1**1**1**4**4**!>

//不不不不不不不不prrcr不不不不不不不不

catch(chars)

(

cout?s?endl;

)

try

(

throw((int)0);

)

/*4**1**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**1**1*、1*

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

catch

(

cout?"ERROR"?endl;

returnO;

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

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

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

到屏幕中。

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

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

試題程序:

#include<iostream.h>

voidmain

(

inti=0;

charstr[]20];

cout?"Enterastringendwith?."?endl;

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

cin.getline(str,120);

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

while(str)

(

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

if(str[i])=a)

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

i++;

)

cout?str?endl;

return;

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

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

Constructor,i=0,

Destructor

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

試題程序:

#include(iostream.h)

classTC

(

inti;

public:

TC;

voiddisplay;

~TC;

TC:TC

cout?"Constructor"?","

i=0;

)

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

TC:display

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

TC:TC

(

COUI?"Destructor"?endl:

)

voidmain

(

TCa;

a.display;

}

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

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

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

程序異常,輸出信息為

error

0

ERROR

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

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

試題程序:

#include<iostream.h)

intmain

(

try

throw("error");

)

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

catch(chars)

{

cout?s?endl;

)

try

(

throw((int)0);

)

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

catch

(

cout?i?endl;

)

try

(

throw(O);

throw("error");

)

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

catch

(

cout?"ERROR"?endl;

)

returnO;

)

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

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

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

中。

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

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

試題程序:

#include<iostream.h>

voidmain

(

inti=O;

charstr[120];

cout?"Enterastringendwith?."?endl;

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

cin.getline(str,120);

!1********ej*j*0j*********

while(str)

1I********ej*j*0j*********

if(str[i])=a)

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

i++;

)

cout?str?endl;

return;

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

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

確。

程序輸出:

8

8

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

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

試題程序:

#include(iostream.h>

classCO

public:

I********epj*or********I

staticintn=O:

CO

n++:

-CO

):

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

intCO::n;

voidmain

COobj;

COobj2[7];

CO*C=NULL:

c=&obj:

I********ei*j*0r********/

eout?C.n?endl;

cout?C0::n?endl;

)

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

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

為:

sizeoRSl)=5

sizeof(s2)=10

sizeo心3)=1

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

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

⑴不能刪除assert()語句。

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

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

試題程序:

#include<iostream.h>

#include<assert.h>

voidmain()

char*sl="abc”:

!1********ej*j*or********

assert(sizeof(s1)=3):

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

chars2[10]="ab":

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

assert(sizeof(s2)=2);

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

chars3=23:

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

assert(sizeof(s3)=4);

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

return;

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

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

100

37

32

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

可。

試題程序:

#include<iostream.h>

Ii******e*or******

voidmain

{

Ii******errc)r******

intm=0142:

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

intn=0X27:

intq=32;

cout<<m<<endl;

cout<<n<<endl;

cout<<q<<endl;

return;

)

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

46.

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

prog3,其中聲明了ValArray類,該類在內(nèi)部維護一個動態(tài)分配的整型

數(shù)組。ValArray類的復(fù)制構(gòu)造函數(shù)應(yīng)實現(xiàn)對象的深層復(fù)制。請編寫

ValArray類的復(fù)制構(gòu)造函數(shù)。在main函數(shù)中給出了一組測試數(shù)據(jù),此

種情況下程序的輸出應(yīng)該是:

VaiArrayvl={1,2,3,4,5}VaiArrayv2={1,2,3,4,5}要求:

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

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

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

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

//VaiArray.h

#include<iostream>usingnamespacestd;classValArray{

int*v:intsize;public:

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

v=newint[size];

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

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

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

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

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

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

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

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

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

23452728316675

234562728315675

23456192728316675

3456192728316675

3456192728316675

要求:

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

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

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

已經(jīng)編譯為obj文件,并且在本程序中調(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(O){

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(j>0)

if(element==elem[j-1])return;

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

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

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

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

elemfjl=element;〃將element插入到該位置

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

)

voidIntegerSet::remove(intelement){

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,]1);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打開考生文件夾下的工程test38_3o此工程包含一個

test38_3.cpp,其中定義了類complex,但類的定義并不完整。請按要求

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

(1)添加類complex的無參數(shù)的構(gòu)造函數(shù)的定義,將私有成員real和imag

都初始化為0。請在注釋“〃**1**”之后添加適當?shù)恼Z句。

⑵添加類complex的帶兩個參數(shù)的重載構(gòu)造函數(shù),兩個參數(shù)r和i都是

double類型,要求將r賦值給私有成員real,i賦值給私有成員imag,

同時允許調(diào)用時參數(shù)i可是省略,請在注釋“〃**2**”之后添加適當?shù)恼Z

句。

⑶完成類complex重載加法函數(shù)的定義,該函數(shù)直接返回一個類

complex的對象,同時把參數(shù)對象c的實部real和虛部imag分別與當前

對象對應(yīng)部分分別相加,請在注釋“〃**3**”之后添加適當?shù)恼Z句。

(4)完成類complex的友元函數(shù)print的定義,使其以格式“real+imagi”輸

出,請在注釋“〃**4**”之后添加適當?shù)恼Z句。

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

#include<iostream.h>

classcomplex

i

public:

//**]**

〃**2**

(

real=r;imag=i;

I

s

complexoperator+(complex&c);

friendvoidprint(complex&c);

private:

doublereal,imag;

};

complexcomplex::operator+(complex&c)

{

H**3**

}

H**4**

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

}

voidmain()

i

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

c3=cl+c2;

print(c3);

c3=c3+complex(3.5);

print(c3);

}

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

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

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

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

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

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

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

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

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

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

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

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

的語句。

注意:除在指定位置添加語句之外,請不要改動程序中的其他內(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;

參考答案

LD解析:本題考核虛基類的聲明。C++中,虛基類說明格式如下:class

〈類名〉:virtual(繼承方式><基類名>。其中,virtual是虛基類的

關(guān)鍵詞。虛基類的說明是用在定義派生類時,寫在派生類名的后面。

2.A解析:switch語句檢測到符合條件case執(zhí)行后面語句不再判斷。

3.D

4.A

5.A解析:面向?qū)ο笳Z言包含3個要素,即對象、類和繼承。這3個要

素反映了面向?qū)ο蟮膫鹘y(tǒng)觀念。面向?qū)ο蟪绦蛟O(shè)計的本質(zhì)是把數(shù)據(jù)和對

數(shù)據(jù)的操作當成一個整體即對象。

6.BB?!窘馕觥吭贑++程序中的typename是都可以替換為class的,但

class不能都替換為typename。

7.B

8.A解析:就軟件測試而言,它的目的是發(fā)現(xiàn)軟件中的錯誤。但是,發(fā)

現(xiàn)錯誤并不是最終目的,最終目的是通過測試發(fā)現(xiàn)錯誤之后還必須診斷

并改正錯誤,這才是測試的目的。由于測試的目標是暴露程序中的錯誤,

所以從心理學角度看,由程序的編寫者自己進行測試是不恰當?shù)摹R虼?

在軟件測試階段通常由其他人員組成測試小組來完成測試工作。經(jīng)過上

述分析可知,選項A的說法是正確的,而選項B、C、D的說法是錯誤

的。

9.D解析:本題考核運算符重載的概念。C++把重載的運算符視為特殊

的函數(shù),稱為運算符函數(shù),函數(shù)名就是在運算符前加上保留字operator。

運算符重載就是賦予已有的運算符多重含義。C++中通過重新定義運算

符,使它能夠用于特定類的對象執(zhí)行特定的功能。但是用戶重新定義運

算符,不改變原運算符的操作符個數(shù)、優(yōu)先級和結(jié)合性.同時運算符重

載后,也不改變運算符的語法結(jié)構(gòu),即單目運算符只能重載為單目運算

符,雙目運算符只能重載為雙目運算符。所以A,B,C選項的描述都

是錯誤的。

10.B解析:C++中可以用文件流對象的下列成員函數(shù)來判別文件流的當

前狀態(tài)。

①函數(shù)is_open():判定流對象是否與一個打開的文件相聯(lián)系,若是,返

回true,否則返回falseo

②函數(shù)good。:剛進行的操作成功時返回true,否則返回false。

③函數(shù)fail。:與good。相反,剛進行的操作失敗時返回true,否則返回

falseo

④函數(shù)bad():如果進行了非法操作返回true,否則返回false。

⑤函數(shù)eof()進行輸入操作時,若到達文件尾返回true,否則返回false。

其中,eof函數(shù)只能用于輸入流操作。

11.A

隊列是一種特殊的線性表,只允許在表的一端插八元素,在表的另一端

刪除元素,插入元素的一端叫“隊尾”,刪除元素的一端叫“隊頭”。先插

入的元素先被刪除,是按“先進先出”的原則組織數(shù)據(jù)的。

【知識拓展】“隊列”和“?!倍际且环N特殊的線性表。之所以稱之為“隊列”,

其形式如“排隊要講究“先來后到”,先進先出,后進后出。

12.A

解析:=、口、()、->以及所有的類型;轉(zhuǎn)換運算符只能作為成員函數(shù)

重載,A項正確。默認的賦值運算符只實現(xiàn)了淺層復(fù)制,B項錯誤。

賦值運算符只能作為成員函數(shù)重載,形參表中只有一個參數(shù),對應(yīng)于

第二操作數(shù),C項錯誤。一個類中如果需要重載運算符“=”,通常也

就需要定義自己特有的復(fù)制構(gòu)造函數(shù),反之亦然,故D項錯誤。

13.B

數(shù)據(jù)庫管理系統(tǒng)是數(shù)據(jù)庫的機構(gòu),它是一種系統(tǒng)軟件,負責數(shù)據(jù)庫中的數(shù)據(jù)組織、數(shù)據(jù)操

縱、數(shù)據(jù)維護、控制及保護和數(shù)據(jù)服務(wù)等,是一種在操作系統(tǒng)支持下的系統(tǒng)軟件,因此本

題答案為B)o

14.A

15.C

Co【解析】本題考查位操作,將4轉(zhuǎn)化成二進制為0100,左移一位

后為1000,轉(zhuǎn)成十進制為8,所以輸出8。

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

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

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

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

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

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

符,規(guī)定:重載后綴運算符時必須多一個虛擬參數(shù):into本題中,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。

18.D解析:C抖語言中析構(gòu)函數(shù)為符號“~”加類名,且析構(gòu)函數(shù)沒有

返回值和參數(shù),故前不加void關(guān)鍵字。所以正確的形式應(yīng)該是-MyClass。。

19.D

20.B解析:本題考察C++中輸入輸出流對象的一些常用成員函數(shù)的用

法。其中g(shù)et和getline的區(qū)別在于getline讀取中以作為輸入結(jié)束符。

故本題中g(shù)etline只能接收第一個換行符之前的字符,即first。后面的字

符被丟棄。因此正確答案應(yīng)為B。

21.A

Co【解析】本題中類TestClass為基類,TestClassl為TestClass的派

生類。由main主函數(shù)入手,定義TestClassl類型的對象dl,參數(shù)值為

yoTestClassl類繼承TestClass,所以主函數(shù)中“TestClassldl(y);”語句

首先調(diào)用“TestClassl(charc){colll?C;}“然后調(diào)用基類中的

uTestClass{COUt?X;)”輸出X,然后執(zhí)行

uTestClass(charc){cout?c;}“輸出y,即答案為"xy”。

22.C解析:外部變量i實際上記錄的是調(diào)用構(gòu)造函數(shù)的次數(shù)。

23.A

24.數(shù)據(jù)定義語言數(shù)據(jù)定義語言

25.virtualvoiddisplay()=0;

virtual\u3000void\u3000display()=0;解析:本題考查的知識點是:純

虛函數(shù)。純虛函數(shù)定義格式是在虛函數(shù)的后面加上“=0”。與虛函數(shù)不

同的是,純虛函數(shù)允許沒有函數(shù)體。故本題應(yīng)該填入的內(nèi)容是;

virtual\u3000void\u3000display()=0;。

26.循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)解析:C++語言3種基本結(jié)構(gòu)就是順序結(jié)構(gòu),選

擇結(jié)構(gòu),循環(huán)結(jié)構(gòu)。

27.歸并排序歸并排序解析:只有歸并排序要求待排序文件,,部分排

序”(把待排序的文件分成若干個子文件,每個子文件內(nèi)的記錄是己排序

的)。

28.bool

29.m=a[i]m=a[i]解析:此題考查的是函數(shù)模板、if語句、for循環(huán)等知

識點。函數(shù)模板max()的功能是返回數(shù)組a中最大元素的值,所以當a[i]

是最大值時,應(yīng)將a[i]的值賦給m。

30.friendvoidffun()

31.Myhome@isH

32.12

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

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

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

記錄值。

34.*q

35.j+=2]a[i]>=a[j]或a[i]>a[jlj+=2\r\n]a[i]>=a[j]或a[i]>a[j]解析:

strlen函數(shù)是測試字符串長度的函數(shù),函數(shù)的值為字符串中的實際長度,

不包括NO'在內(nèi)。

36.⑴應(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,所以補全參數(shù)1,即第1處的“TCobjl(l);第2處處

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

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

5,

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

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

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

“obj2.SetNumber(lOO);

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

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

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

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

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

的對象被訪問。故應(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)永遠不會退出。

38.(1)應(yīng)改為"catch(char*s)"°

⑵應(yīng)改為“cateh(inti)”。

(3)應(yīng)改為"catch(…廣。

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

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

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

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

€4throw((int)0);",其中的類型為int。對應(yīng)的異常捕捉語句catch中應(yīng)

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

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

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

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

改為“catch(…)”。

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

⑵應(yīng)改為“while(str[i])"°

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

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

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

個數(shù),終止標志字符廣,所以第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),,o

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

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

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

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

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

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

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

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

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

3處的語句“TC::TC”可知,顯然這里是在類外實現(xiàn)析構(gòu)函數(shù),析構(gòu)函

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

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

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

⑵應(yīng)改為“cateh(inti)”。

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

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

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

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

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

€tthrow((int)0);",其中的類型為int。對應(yīng)的異常捕捉語句catch中應(yīng)

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

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

的語句修改為“catch

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論