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

下載本文檔

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

文檔簡介

2023年甘肅省隴南市全國計算機等級考試

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

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

一、1.選擇題(10題)

1.語句cout<<setfill("")<<setw(4)<<setfill('i')<<setv^7)<<'m'<

<endl;的輸出結(jié)果為()。

A.iiiimmmmnmmB.iiiimmmmmmC.iiiimmmD.iiiiimm

2.以下不能正確定義二維數(shù)組的選項是()。

A.inta[2][2]={{l},{2}};

B.inta[][2]={l,2,3,4);

C.inta[2][2]={{l},2,3};

D.inta[2][]={{l,2},{3,4});

3.存取指針?biāo)傅闹禃r,采用的運算符是

A.#B.&C.%D.*

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

割的整體來處理。

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

5.以下程序運行后的輸出結(jié)果是0。#include<iostream.h>voidmain()

{charaft="abbcabbcabbc";inti=O,j=O,k=O;while(a[i]){if(a[i]=='a')j++;

if(a[i]=='b')k++;i++;}cout<<j<<""<<k<<endl;}

A.2,6B.3,5C.4,7D.3,6

6.若有定義:intk,*q;,則下列各選項中賦值表達式正確的是()。

A.q=(&k+1)B.q=&kC.q=kD.*q=&k

7.設(shè)有基類定義:classCbase{private:inta;protected,intb;public:

intc;};派生類采用何種繼承方式可以使成員變量b成為自己的私有成

員()。

A.私有繼承B.保護繼承C.公有繼承D.私有、保護、公有均可

8.在下列程序的橫線處填上適當(dāng)?shù)膬?nèi)容,使程序執(zhí)行后的輸出結(jié)果為

ABCDO#include<iostream>usingnamespacestd;classA{public:

A(){cout<<€A5;}};ClassB:{public:B(){cout<<'B';}};class

C:virtualpublicA{public:C(){cout<<'C';}};classD:p

A.publicAB.privateAC.protectedAD.virtualpublicA

9.下述關(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ù)

10.下列不屬于結(jié)構(gòu)化分析的常用工具的是

A.數(shù)據(jù)流圖B.數(shù)據(jù)字典C.判定樹D.PAD圖

二、單選題(13題)

11.有下列程序:

#include<iostream>

#include<cstring>

usingnamespacestd;

classXCD{

char*a;

intb;

public:

XCD(char*aa,intbb){

a=newchar[strlen(aa)+l];

strcpy(a,aa);

b=bb;

)

char*Geta(){returna;}

intGetb(){returnb;}

);

intmain(){

char*pl="abcd",*p2="weirong";

intdl=6,d2=8;

XCDx(pl,dl),y(p2,d2);

cout?strlen(x.Geta())+y.Getb()?endl;

return0;

)

運行時的輸出結(jié)果是O

A.12B.16C.14D.11

12.在類的定義中,用于為對象分配內(nèi)存空間,對類的數(shù)據(jù)成員進行初始

化并執(zhí)行其他內(nèi)部管理操作的函數(shù)是()。

A.友元函數(shù)B.虛函數(shù)C.構(gòu)造函數(shù)D.析構(gòu)函數(shù)

13.下列工具中為需求分析常用工具的是()。

A.PADB.PFDC.N-SD.DFD

14.下列選項中,不是一個算法的基本特征的是()。

A.完整性B.可行性C有窮性D.擁有足夠的情報

15.下列關(guān)于抽象類的敘述不正確的是()。

A.含有純虛函數(shù)的類稱作抽象類B.抽象類只能是基類C.抽象類不能

被實例化D.純虛函數(shù)可以被繼承

16.若有以下程序:#include<iostream>usingnamespacestd;intf()

{staticinti=0;ints=1;s+=i;i++;returns;}intmain(){inti,a=0;for(i=

0;i<5;i++)a+=f();cout<<a<<endl;return0;}程序運行后,輸出的結(jié)

m日

A.20B.24C.25D.15

17.下列程序段中包含4個函數(shù),其中具有隱含this指針的是

()O

intfunl();

classTest{

public:

intfun2();

friendintfun3();

staticintfun4();

};

A.funlB.fun2C.fun3D.fun4

18.假定MyClass為一個類,則執(zhí)行MyClassa,b(2),*p;語句時,自動

調(diào)用該類構(gòu)造函數(shù)()次。

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

19.下面對靜態(tài)數(shù)據(jù)成員的描述中,正確的是()。

A.靜態(tài)數(shù)據(jù)成員可以在類體內(nèi)進行初始化

B.靜態(tài)數(shù)據(jù)成員不可以被類的對象調(diào)用

C靜態(tài)數(shù)據(jù)成員不能受private控制符的作用

D.靜態(tài)數(shù)據(jù)成員可以直接用類名調(diào)用

20.有如下的程序:#include<cstring.h)#ingclude<iostream.h)using

namespacestd;ClassMyString{public:MyString(constchar*s);

~MyString(){delete[]data;}protected:unsignedlen;char*data;};

MyString::MyString(constchar*S){1

A.構(gòu)造函數(shù)的實參不允許是本類的對象

B.沒有定義實現(xiàn)深層復(fù)制(深拷貝)的復(fù)制構(gòu)造函數(shù)

C.構(gòu)造對象a時實參與形參類型不符

D.系統(tǒng)不能生成默認的復(fù)制構(gòu)造函數(shù)

21.下列關(guān)于嚴格控制got。語句使用的理解中,錯誤的是()。

A.用一個非結(jié)構(gòu)化的程序設(shè)計語言實現(xiàn)一個結(jié)構(gòu)化的構(gòu)造

B.若不使用goto語句會使功能模糊

C.在某種可以改善而不是損害程序可讀性的情況下

D.goto語句可以完全不用

22.下面程序輸出的結(jié)果為()。

#include"iostream.h"

classA

{public:

A(){cOUt<<"CLASSA"<<end];}

-A(){}};

ClaSSB:publicA

{public:

B(){cout<<"CLASSB"<<endl;}

-B(){}};

voidmain()

{A*P;

P=newB:

B*q:

q=newB;}

A.CLASSA

B.CLASSACLASSBCLASSBCLASSB

C.CLASSA

D.CLASSACLASSBCLASSBCLASSACLASSBCLASSBCLASSB

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

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

B.class和typename都可互相替換

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

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

三、2.填空題(12題)

24.程序的測試方法分為靜態(tài)分析和動態(tài)分析。使用測試用例在計算機

上運行程序,使程序在運行過程中暴露錯誤,這種方法稱為【lo

25.根據(jù)下列程序的執(zhí)行結(jié)果,可以斷定劃線部分的修飾符應(yīng)為o

執(zhí)行結(jié)果:

i9afootballiscreated.

afootballiscreated.

i=10

afootballisdestroyed.

afootballiscreated.

i=20

afootballisdestroyed.

afootballisdestroyed.

源程序:

#include<iostream.h>

classFootball

(

public:

Football(){cout<<"afootballiscreated."<<endl;}

?Football(){tout<<"afootballisdestroyed."<<endl;}

};

voidfunc(inti)

{

Footballfl;

Footballf2;

cout<<"i="<<i<<endl;

voidmain()

(

func(10);

func(20);

)

26.函數(shù)中的形參和調(diào)用時的實參都是變量時,參數(shù)傳遞方式為【】。

27.在多繼承中基類和派生類中同時出現(xiàn)存在二義性。

28.在C++中,一個數(shù)組名字實際上是指向該數(shù)組【】的指針。

29.在一個容量為25的循環(huán)隊列中,若頭指針front=15,尾指針rear=6,

則該循環(huán)隊列中共有【】個元素。

30.下列程序的輸出結(jié)果為:

Objectid=0

Objectid=l

請將程序補充完整。

#include<iostream>

usingnamespacestd;

classPoint

(

public:

Point(intxx=0,intyy=0){X=xx;Y=yy;countP++;}

-Point(){countP—;}

intGetX(){returnX;}

intGetYO{returnY;}

staticvoidGetCO{cout<<"Objectid="<<countp<<endl;}

private:

intX,Y;

staticintcountP;

);

[]〃靜態(tài)數(shù)據(jù)成員的初始化

intmain()

(

Point::GetC();

PointA(4,5);

A.GetC();

return0;

)

31.分析以下程序執(zhí)行結(jié)果【】。

#include<iostream.h>

intf(intx,inty){

returnx,y;

)

doublef(doublex,doubley){

returnx,y;

)

voidmain(){

inta=4,b=6;

doublec-2.6,d=7.4;

cout<<f(a,b)<<<<f(c,d)<<endl;

)

32.將一個函數(shù)聲明為一個類的友元函數(shù)必須使用關(guān)鍵字【】。

33.派生類中的成員不能直接訪問基類中的____成員。

34.數(shù)據(jù)庫的邏輯模型設(shè)計階段的任務(wù)是將轉(zhuǎn)換成關(guān)系模式。

35.請將下列棧類Stack補充完整。

classStack{

private:

intpList[100];〃int數(shù)組,用于存儲占的元素

inttop;〃棧頂元素(數(shù)組下標(biāo))

public:

Stack():top(0){}

voidPush(constint&item);〃新元素item壓入棧

intPop(void);//將棧頂元素彈出棧

};

voidStack::Push(constint&item){

if(top==99)exit(l);〃如果棧滿,則程序終止

top++;〃棧頂指針增1

intStack::Pop(){

if(top<0)exit(l);//如果??眨瑒t程序終止

returnPlistftop—1;

}

四、程序改錯題(10題)

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

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

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

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

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

II******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++)

!1********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;

}

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

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

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

中。

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

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

試題程序:

#include<iostream.h>

voidmain

(

inti=O;

charstr[120];

cout?"Enterastringendwith?."?endl;

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

cin.getline(str,120);

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

while(str)

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

if(str[i])=a)

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

1++;

cout?str?endl;

return;

)

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

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

為:

sizeof(Sl)=5

sizeof(s2)=10

sizeof(s3)=l

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

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

⑴不能刪除assert()語句。

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

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

試題程序:

#include<iostream.h>

#include<assert.h>

voidmain()

char*sl="abc":

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

assert(sizeof(s1)==3):

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

chars2[10]="ab":

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

assert(sizeof(s2)==2);

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

chars3=23:

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

assert(sizeof(s3)==4);

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

return;

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

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

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

到屏幕中。

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

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

試題程序:

#include<iostream.h>

voidmain

(

inti=O;

charstr[120];

cout?"Enterastringendwith?."?endl;

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

cin.getline(str,120);

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

while(str)

(

IJ********error*********

if(str[i])=a)

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

i++;

)

cout?str?endl;

return;

)

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

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

inti;

TC04(10);

while(i>5)

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

i++:

04.print;

)

cout?endl;

retumO;

)

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

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

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

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

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

II******error******白勺-|什|~。

試題程序:

#include<iostream>

#include<fstream>

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

usingstd;

voidWriteFile(char*s)

ofstreamoutl;

II********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);

returnO;

)

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

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

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

程序異常.,輸出信息為

error

O

ERROR

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

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

試題程序:

#include<iostream.h)

intmain

(

try

(

throw("error");

)

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

catch(chars)

(

cout?s?endl;

)

try

(

throw((int)0);

)

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

catch

(

cout?i?endl;

)

try

(

throw(O);

throw("error");

)

II********e口*******

catch

(

cout?"ERROR"?endl;

)

returnO;

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

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

確。

程序輸出:

8

8

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

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

試題程序:

#include(iostream.h>

classCO

public:

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

staticintn=O:

CO

n++:

?CO

n—:

):

I********ej*ror********/

intCO::n;

voidmain

(

COobj;

COobj2[7];

CO*C=NULL:

c=&obj:

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

eout?C.n?endl;

cout?C0::n?endl;

)

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

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

Constructor,i=0,

Destructor

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

可。

試題程序:

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

)

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

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

100

37

32

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

可。

試題程序:

#include<iostream.h>

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

voidmain

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

intm=0142:

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

intn=0X27:

intq=32;

cout<<m<<endl;

cout<<n<<endl;

cout<<q<<endl;

return;

)

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

46.(1『while”應(yīng)改為“while(infile.get(ch))”。

(2)應(yīng)添加"bur[len++]=ch;bur[len]=ch;len++;

(3)應(yīng)添力口”0出m62??11也++];”或“outfile2?buf[i];i++;”。

(4)“TCobj;”應(yīng)改為“TCobi("in.txt");”。

【解析】本題考查了文件流的使用。根據(jù)題意,第1處要獲得一個字符,

并判斷是否到文件結(jié)尾,所以應(yīng)使用get函數(shù);第2處應(yīng)將ch存入buf

數(shù)組,同時讓len增1;第3處將buf中的字節(jié)輸出給outfile2,注意同

時讓i增1,否則while循環(huán)將進入死循環(huán),?第4處TC只確一個帶char*

參數(shù)的構(gòu)造函數(shù),所以創(chuàng)建對象時必須使用構(gòu)造參數(shù),根據(jù)題意這個參

數(shù)應(yīng)該是“"in.txt"”。

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

義的類不完整,按要求完成下列操作,將類的定義補充完整。每賣出

一個水果,則計算水果的重量,還要計算所有賣出水果的總重量以及

總個數(shù),同時允許退貨,請按照以下的操作,把類補充完整。

⑴定義類TCFruit的私有靜態(tài)數(shù)據(jù)成員float型變量AllWeight和int型

變量AUN0,請在注釋1后添加適當(dāng)?shù)恼Z句。

(2)完成類TCFruit的帶一個float型變量w的構(gòu)造函數(shù),并把這個w加

到AllWeight中,并且AllNo自加。請在注釋2后添加適當(dāng)?shù)恼Z句。

(3)在析構(gòu)函數(shù)中,在AHWeight中減去weight,然后AHNo自減,請

在注釋3后添加適當(dāng)?shù)恼Z句。

⑷完成靜態(tài)成員變量的初始化為0,請在注釋4后添加適當(dāng)?shù)恼Z句。

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

他的程序代碼。

試題程序:

#include(iostream.h>

classTCFruit

(

private:

floatWeight;

staticintAllNo;

public:

TCFruit(floatw)

(

[I

AllWeight+=w:

AUNo++:

)

?TCFruit

(

AllWeight-Weight:

)

voiddisplay

cout?"SellaFruitwith"?Weight?"k9"<<

endl;

cout<<"Allsellnumber:"?AllNo?endl;

cout?"Allsellweight:"<<AllWeight?"k9"?

endl?endl;

)

};

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

floatTCFruit::AllWeight=O.0;

intmain

{

TCFruitFruitl(l.2);

Fruitl.display;

TCFruitFruit2(2.3);

Fruit2.display;

retumO;

)

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

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

test34_3.cpp,其中定義了表示棧的類stack。源程序中stack類的定義并

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

⑴定義類stack的私有數(shù)據(jù)成員sp和size,它們分別為整型的指針和變

量,其中SP指向存放棧的數(shù)據(jù)元素的數(shù)組,size為棧中存放最后一個元

素的下標(biāo)值。請在注釋“〃**1**”之后添加適當(dāng)?shù)恼Z句。

⑵完成類stack的構(gòu)造函數(shù),該函數(shù)首先從動態(tài)存儲空間分配含有100

個元素的血型數(shù)組,并把該數(shù)組的首元素地址賦給指針sp,然后將該

數(shù)組的所有元素賦值為0,并將size賦值為-l(size等于-1表示棧為空)。

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

⑶完成類stack的成員函數(shù)push的定義。該函數(shù)將傳入的整型參數(shù)x壓

入棧中,即在size小于數(shù)組的最大下標(biāo)情況下,size自力口1,再給x賦

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

(4)完成類stack的成員函數(shù)pop的定義,該函數(shù)返回棧頂元素的值,即

在size不等于-1的情況下,返回數(shù)組中下標(biāo)為size的元素的值,并將

size減lo請在注釋“〃**4**”之后添加適當(dāng)?shù)恼Z句。

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

thetopelem:1

thepopelem:1

thestackisempty

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

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

#include<iostream.h>

classstack

{

〃**?**

public:

stack();

boolempty(){returnsize==-l;}

boolfull(){returnsize==99;}

voidpush(intx);

voidpop();

voidtop();

);

stack::stack()

(

〃**2**

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

*(sp+i)=0;

size=-l;

)

voidstack::push(intx)

(

〃**3**

cout<<"thestackisfull"<<endl;

else

{

size++;

*(sp+size)=x;

)

)

voidstack::pop()

{

〃**4**

cout<<"thestackisempty"<<endl;

else

(

cout<<nthepopelem:n<<*(sp+size)<<endl;

size—;

}

)

voidstack::top()

(

ifiemptyO)

cout<<"thestackisempty"<<endl;

else

cout<<"thetopelem:"<<*(sp+size)<<endl;

voidmain()

(

stacks;

s.push(l);

s.top();

s.popO;

s.top();

)

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

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

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

⑴完成類ARRAY的帶一個參數(shù)的構(gòu)造函數(shù),參數(shù)i為int型,如果i不

是正數(shù)則輸出錯誤信息并退出,否則申請int型的大小為i的空間,然

后把i賦值給類的數(shù)據(jù)成員num。請在注釋“〃**1**”之后添加適當(dāng)?shù)恼Z

句。

⑵完成類ARRAY的拷貝初始化構(gòu)造函數(shù),注意解決重復(fù)刪除的問題,

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

⑶完成類ARRAY的重載的運算符函數(shù)口,參數(shù)i為int型,如果i超界

則輸出錯誤信息并退出,否則把下標(biāo)為i的元素返回,請在注釋“〃**3**”

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

(4)完成類ARRAY的重載的運算符函數(shù)二,同樣需要注意解決重復(fù)刪除

的問題,不能只是簡單的賦值,請在注釋“〃**4**”之后添加適當(dāng)?shù)恼Z句。

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

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

#include<iostream.h>

#include<stdlib.h>

classARRAY

(

private:

int*p,num;

public:

ARRAY(){p=newint[10],num=10;}

ARRAY(inti)

**

cout<(”錯誤!數(shù)組長度應(yīng)為正。\n”;

exit(0);

}

p=newint[i];

num=i;

)

ARRAY(constARRAY&a);

int&operator[](inti);

-ARRAY(){deletep;}

ARRAY&operator=(constARRAY&a);

friendARRAYoperator+(ARRAY&a,ARRAY&b);

friendostream&operator<<(ostream&os,ARRAY&a);

);

A(RRAY::ARRAY(constARRAY&a)

〃*2**

fbr(inti=0;i<num;i++)

p[i]=a.p[i];

)

int&ARRAY::operator[](inti)

〃**3**

{

cout<<“越界訪問!”;

exit(0);

returnp[i];

ARRAY&ARRAY::operator=(constARRAY&a)

(

num=a.num;

p=newint[num];

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

p[i]=a.p[i];

〃**4**

)

ARRAYoperator+(ARRAY&a,ARRAY&b)

(

if(a.num!=b.hum)

(

cout<<“數(shù)組長度不相同!”<<endl;

exit(0);

)

ARRAYt(a.num);

for(inti=0;i<a.num;i++)

t.p[i]=a.p[i]+b.p[i];

returnt;

)

ostream&operator?(ostream&os,ARRAY&a)

{

inti=0;

for(;i<a.num;i++)

cout<<a.p[i]<<'

if(!((i+l)%10))cout<<endl;

)

returnos;

)

voidmain()

(

ARRAYa(3);

a[0]=a[l]=a[2]=3;

cout<<'a'<<a<<endl;

ARRAYb(a);

cout<<'b'<<b<<end1;

ARRAYc(2);

c=a+b+b;

cout<<'c'<<c<<endl;

c=((b=(a+b))+c);

cout<<'a'<<a<<'b'<<b<<'c'<<c<<end1;

參考答案

l.A

2.B

3.D解析:對指針?biāo)赶虻牡刂啡≈禃r,采用的存取運算符為*。&為取

地址符。

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

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

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

5.D解析:程序中首先定義字符數(shù)組a,然后在while循環(huán)中統(tǒng)計字符a

和b的個數(shù)。其中j記錄a的個數(shù),k記錄b的個數(shù)。第一個if語句是

當(dāng)?shù)趇個字符為a時,i加1;第二個if語句是當(dāng)?shù)趇個字符為b時,k

加1。

6.B解析:本題考核指針的賦值操作。A)選項中,&k表示變量k在內(nèi)

存中的地址,而后面的1是整型常量,所以此選項不正確。C)選項中,

是把整型變量的值直接賦給指針變量q,由于賦值沒有兼容性,所以這

是錯誤的。D)選項中,企圖把k在內(nèi)存中的地址賦給一個整型變量(*q

在此代表一整型變量),這也是不允許的,地址值不能直接轉(zhuǎn)換為一個整

數(shù)。

7.A解析:類的繼承中有三種繼承方式,他們和類的訪問級別相結(jié)合在

派生類中可以產(chǎn)生多種訪問級別?;愔谐蓡T為保護的,在派生類中要

為私有的,可以采用私有繼承。基類中的保護成員在派生類中不是私有

就是保護,即級別只能降低而不能升高?;愔械墓谐蓡T則可能為私

有、保護和私有。

8.D解析:由主函數(shù)main入手,定義了類D對象obj。其中D為類B

和C的公有繼承,A是C的虛基類。題目中要求的輸出結(jié)果為“ABCD”,

依次為類A,類B,類C,類D沖構(gòu)造函數(shù)的輸出語句。為了保證基類

通過多條路徑被派生類“voidprint()const",輸出為print2o

9.A解析:數(shù)據(jù)庫是一個通用化的、綜合性的數(shù)據(jù)集合,它可以為各種

用戶所共享,具有最小的冗余度和較高的數(shù)據(jù)與程序的獨立性,而且能

并發(fā)地為多個應(yīng)用服務(wù),同時具有安全性和完整性。即數(shù)據(jù)庫系統(tǒng)減少

了數(shù)據(jù)冗余,但不能避免一切冗余。所以選項A正確,選項B錯誤。在

數(shù)據(jù)庫管理階段中,數(shù)據(jù)是結(jié)構(gòu)化的,面向系統(tǒng),數(shù)據(jù)冗余度小,從而

節(jié)省了數(shù)據(jù)的存儲空間,也減少了對數(shù)據(jù)的存取時間,提高了訪問效率,

避免了數(shù)據(jù)的不一致性。數(shù)據(jù)的不一致性,是指對數(shù)據(jù)的存取方式,選

項C錯誤。數(shù)據(jù)庫系統(tǒng)比文件系統(tǒng)能管理更多的數(shù)據(jù),并非是數(shù)據(jù)庫

系統(tǒng)的特點,選項D錯誤。本題正確答案是A。

10.D

屬于結(jié)構(gòu)化分析的常用工具數(shù)據(jù)流圖,數(shù)據(jù)字典,判定樹和判定表,

PAD是詳細設(shè)計的工具

11.A

本題主要考查了構(gòu)造函數(shù)。構(gòu)造函數(shù)在對象被創(chuàng)建的時候由系統(tǒng)自動

調(diào)用。在mian()函數(shù)中,語句XCDx(pl,dl),y(p2,d2);\r\n創(chuàng)建了兩個

對象x和y,在創(chuàng)建對象x時系統(tǒng)自動調(diào)用類的構(gòu)造函數(shù),使對象x的

數(shù)據(jù)成員字符指針a指向的內(nèi)存空間的值為字符串"abed”;成員函數(shù)

Geta的功能是獲取數(shù)據(jù)成員a,庫函數(shù)strlen()的功能是獲取字符串的

長度,故strlen(x.Geta())的值為4;在創(chuàng)建對象y時系統(tǒng)自動調(diào)用類的構(gòu)

造函數(shù),使對象y的數(shù)據(jù)成員b的值為8,成員函數(shù)Getb的功能是獲

取數(shù)據(jù)成員b,故y.Getb()的值為8。因此程序運行的輸出結(jié)果是

4+8,即120

12.C

13.D解析:需求分析常用的工具有數(shù)據(jù)流圖(DFD)、數(shù)據(jù)字典(DD)、

判定樹和判定表。PAD(問題分析圖)、PFD(程序流程圖)、N-S(盒式

圖)都是詳細設(shè)計的常用工具,不是需求分析的工具。

14.A解析:作為一個算法,一般應(yīng)該具有下列4個特征:(1)可行

性,即考慮到實際的條件能夠達到一個滿意的結(jié)果;(2)確定性,算法

中的每一個步驟都必須是有明確定義的,(3)有窮性,一個算法必須在

有限的時間內(nèi)做完;(4)擁有足夠的情報。

15.B

抽象類是指包含純虛函數(shù)的類,它主要用于基類,給其他派生類提供

參考,由于含純虛函數(shù),故抽象類不能實例化。

16.D解析:本題考核靜態(tài)局部變量在函數(shù)中的使用。靜態(tài)局部變量就是

將局部變量說明為靜態(tài)的。靜態(tài)局部變量既有在局部域作用的特性(即

變量只能在變量的作用范圍內(nèi)被訪問),又可以永久存在(變量的值得以

保留,并可繼續(xù)使用)。靜態(tài)局部變量只在第一次執(zhí)行時初始化一次。在

函數(shù)f中定義了一個靜態(tài)局部變量i,它的初始值為0,還定義了一個局

部變量s(它的初始值為1),用來返回計算所得值。函數(shù)f中所進行的數(shù)

據(jù)加工是s+=i和i++。即每調(diào)用一次函數(shù)f,返回(i+1)的值后,i的值增

lo再看主函數(shù),在主函數(shù)main中,通過一個for語句連續(xù)調(diào)用f函數(shù)

5次,并把每次調(diào)用f函數(shù)的返回值相加并存入ao最后輸出a的值。在

了解各函數(shù)功能以及調(diào)用關(guān)系后就可計算出a的值為15。

17.B

Bo【解析】this指針是成員函數(shù)所屬對象的指針,是指向類對象的地

址,是一個隱含的指針,隱含于每個類的非靜態(tài)成員函數(shù)中。funl是

外部函數(shù),fun3是友元函數(shù),fun4是靜態(tài)成員函數(shù),故選B。

18.A解析:C++在創(chuàng)建一個對象時,會調(diào)用類的構(gòu)造函數(shù)。語句MyClass

ab(2),*p;創(chuàng)建了兩個對象a、b和指針p,在創(chuàng)建對象a和b后會調(diào)用構(gòu)

造函數(shù),而創(chuàng)建指針p時,由于p本身不是對象,所以不調(diào)用類的構(gòu)造

函數(shù)。

19.D解析:靜態(tài)數(shù)據(jù)成員必須在類體外初始化,它是類的所有對象的共

有成員,需要使用類名調(diào)用,靜態(tài)數(shù)據(jù)成員的初始化與權(quán)限控制無關(guān)。

20.B解析:C++語宮中當(dāng)一個新對象被另一個已存在的同類型對象初

始化時要調(diào)用復(fù)制構(gòu)造函數(shù),語句'MyS-trmgb(a),“符合此條件將調(diào)用

類MyString的復(fù)制構(gòu)造函數(shù),但是類MyString沒有定義此復(fù)制構(gòu)造函

數(shù),所以會出錯。

21.D解析:goto語句會造成程序的混亂,但在某些地方goto語句還是

需要的,若不使用got。語句會使功能模糊。

22.C

Co【解析】本題考查類的繼承、類的實例化和構(gòu)造函數(shù)、析構(gòu)函數(shù)的

調(diào)用方式以及何時調(diào)用。每實例化一個類就要調(diào)用其構(gòu)造函數(shù),結(jié)束

運行該實例后調(diào)用析構(gòu)函數(shù)。

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

但class不能都替換為typenameo

24.動態(tài)分析動態(tài)分析解析:程序的測試方法分為靜態(tài)分析和動態(tài)分析。

使用測試用例在計算機上運行程序,使程序在運行過程中暴露錯誤,這

種方法稱為動態(tài)分析。

25.staticstatic解析:觀察一下輸出中對象的構(gòu)造函數(shù)和析構(gòu)函數(shù)的執(zhí)行

次數(shù)可以看出,再次進入時某對象沒有被構(gòu)造,亦即該對象在func執(zhí)行

后沒有被銷毀,再次進入時則不需要重構(gòu),可以體現(xiàn)這種功能的標(biāo)識符

只有statico

26.值傳遞方式值傳遞方式

27.同名函數(shù)同名函數(shù)解析:如果一個派生類有多個直接基類,而這些

直接基類又有一個共同的基類,這樣存在的同名函數(shù)無法判斷調(diào)用的確

定性。即存在二義性。

28.首元素首元素解析:在C++中,數(shù)組的名字就是指向該數(shù)組第1個

元素的指針,即該數(shù)組第1個元素的地址,也即數(shù)組的首地址。

29.1616解析:設(shè)循環(huán)隊列的容量為m.

如果rear>front.則循環(huán)隊列中的元素個數(shù)為rear-front;

如果rear<front,則循環(huán)隊列中的元素個數(shù)為m+(rear-front)0

在本題中,front=15,rear=6,即rear<front,因此,循環(huán)隊列中的元素

個數(shù)為

m+(rear-front)=25+(6-15)=16O

3O.intPoint::countP=0;intPoint::countP=0;解析:根據(jù)靜態(tài)數(shù)據(jù)成員

初始化的原則來定義。

31.2419.24

32.A或者friendA或者friend解析:友元的定義。

33.私有私有解析:派生類成員在私有繼承方式下不能訪問基類的所有

成員,在保護繼承方式下不能訪問基類的私有成員,在公有繼承方式下

不能訪問基類的私有成員。

34.E-R圖E-R圖解析:數(shù)據(jù)庫邏輯設(shè)計的任務(wù)是將概念模型進一步轉(zhuǎn)

化成相應(yīng)的數(shù)據(jù)模型。而E-R圖是主要的概念模型,因此數(shù)據(jù)庫的邏輯

設(shè)計的主要工作是將E-R圖轉(zhuǎn)換成關(guān)系模式。

35.plist[top]=item

36.(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)準命名空間std,

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

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

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

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

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

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

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

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

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

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

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

數(shù),終止標(biāo)志字符)”,所以第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&&st巾]>=z)”。

38.(1)應(yīng)改為"assert(sizeof(sl尸=4);

\n(2)應(yīng)改為"assert(sizeof(s2)=lO);

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

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

常執(zhí)行輸出結(jié)果,那么assert函數(shù)只有為真,才不會產(chǎn)生中斷異常。

€tassert(sizeof(s1)=3);”語句中"sizeof(sl尸=3”為假,這會使程序產(chǎn)生異

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

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

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

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

“assert(sizeof(s3)=l);”。

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

(2)應(yīng)改為"while(str[i])”。

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

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

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

個數(shù),終止標(biāo)志字符)“,所以第1處改為“cin.getline(str,

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

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

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

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

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

,,

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

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

\n(2)''inti”應(yīng)改為"inti(10);”。

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

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

保護和私有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)永遠不會退出。

41.(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)準命名空間std,

對于C++中引入標(biāo)準命名空間的格式,缺少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]);

42.(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)

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

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

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

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

改為“catch(…)”。

43.(1)“staticintn=O”應(yīng)改為“staticintn;"。

(2)“intC0::n;”應(yīng)改為“intCO::n=0;

(3)€4cout?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;

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

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

(3)應(yīng)改為“TC::?TC",

【解析】在類的外部定義成員函數(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)改為

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

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

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

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

u,,

45.(l)voidmaino

(2)uintm=0144;

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

【解析】本題主要考查了主函數(shù)定義及基同進制之間的轉(zhuǎn)換,包括十

進制到八進制,十進制到十六進

溫馨提示

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

評論

0/150

提交評論