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

下載本文檔

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

文檔簡介

2022年甘肅省金昌市全國計算機等級考試

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

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

一、1.選擇題(10題)

1.下列敘述中正確的是0。

A.程序執(zhí)行的效率與數(shù)據(jù)的存儲結(jié)構(gòu)密切相關(guān)

B.程序執(zhí)行的效率只取決于程序的控制結(jié)構(gòu)

C.程序執(zhí)行的效率只取決于所處理的數(shù)據(jù)量

D.以上三種說法都不對

2.下面不是數(shù)據(jù)庫管理系統(tǒng)常見的數(shù)據(jù)模型的是()。

A.層次模型B.關(guān)系模型C.邏輯模型D.網(wǎng)狀模型

3.下列語句段落將輸出字符的個數(shù)為()。include<iostream.h>Void

main(){inti=100;while(l){i—;if(i==0)break;cout<<;}}

A.98個B.99個C.100個D.101個

4.若有int(*p)[3]:則以下表述中正確的是o

A.p是一個指向具有3個元素的整型數(shù)組的指針

B.p是一個指向int型變量的指針

C.p是一個有3個元素的指針數(shù)組,每個元素是一個int型指針

D.p是一個具有3個int型元素的一維數(shù)組

5.數(shù)據(jù)庫管理系統(tǒng)DBMS中用來定義模式、內(nèi)模式和外模式的語言為()

A.CB.BasicC.DDLD.DML

6.對于以下帶參數(shù)的main。函數(shù)的第二形參,voidmain(intargc,

),不可能的形式是

A.char*argv[]B.charargv[]C.char**aD.char*m[]

7.如果表達式++i*k中的“++”和“*”都是重載的非靜態(tài)成員運算符,則

采用運算符函數(shù)調(diào)用格式,該表達式還可表示為=O

A.operator*(i.perator++(),k)

B.operator*(operator++(i),k)

C.(i.operator++()).operator*(k)

D.k.operator*(operator++(i))

8.下列說法中錯誤的是

A.公有繼承時基類中的public成員在派生類中仍是public成員

B.私有繼承時基類中的protected成員在派生類中仍是protected成員

C.私有繼承時基類中的public成員在派生類中仍是private成員

D.保護繼承時基類中的public成員在派生類中仍是protected成員

9.下列敘述中正確的是

A.線性鏈表中的各元素在存儲空間中的位置必須是連續(xù)的

B.線性鏈表中的表頭元素一定存儲在其他元素的前面

C線性鏈表中的各元素在存儲空間中位置不一定的連續(xù)的,但表頭元素

一定存儲

D.線性鏈表中的各元素在存儲空間的位置不一定是連續(xù)的,且各元素的

存儲順序也是任意的

10.下面敘述錯誤的是()

A.對基類成員的訪問能力在private派生類中和public派生類中是相同

B.基類的private成員在public派生類中不可訪問

C.基類中的public成員在protected派生類中是protected的

D.基類中的public成員在protected派生類中仍然是public的

二、單選題(13題)

11.下面程序的結(jié)果是#include"iostream.h"voidmain(){char*str;Str

="test!";cout<<str[5];}

A.程序錯誤B.!C.、0,D.為空字符

12.有下列程序:

#include<stdiO.h>

voidmain()

{intx=l,y=2,z=3;

if(x>y)

if(y<z)print{("%d",++z);

elseprintf("%d",++y);

printf(,,%d\n,,>x++);

)

程序的運行結(jié)果是()。

A.A.331B.41C.2D.1

13.有以下程序:

classDate

(

public:

Date(inty,intm,intd);

(

year=Y:

month=m;

day=d;

)

Date(inty=2000)

(

year=y;

month=10;

day=l;

)

Date(Date&d)

(

year=d.year;

month=d.month;

day=d.day;

voidprint()

cout?year?"."<(month?"."?day?endl;

)

private:

intyear,month,day;

};

Datefun(Dated)

(

Datetemp;

temp=d;

returntemp;

)

intmain()

(

Datedatel(2000,1,1),date2(0,0,0);

Datedate3(datel);

date2=fun(date3);

returnO;

)

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

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

14.有如下函數(shù)模板定義:templateT2plus(Tltl,T3t3){retumtl+t3;}

則以下調(diào)用正確的是()。

A.plus(3,5L);

B.plus(3,5L);

C.plus(3,5L);

D.plus(3,5L);

15.

16.考慮函數(shù)原型voidtest(inib=7,charz='*'),下面的函數(shù)調(diào)用中,屬于不合

法調(diào)用的是().

A.test(5);B.test(5?8)j

C.test(6,'*');D.test(O,O.'*');

16.以下類定義中可能會引起錯誤的語句是()。

classA

(

public:

~A(){}//1

inti;//2

private:

intj;//3

A(inti){i++;}//4

};

A.lB.2C.3D.4

17.有如下程序:

#include<iostream>

usingnamespacestd:

classPoint{

intx,y;

public:

Point(intxl=0,intyl=O)):X(X1),y(yl){}

intget(){returnx+y;)

);

classCircle{

Pointcenter}

intradius;

public:

Circle(intCX,intcy,intr):center(cx,cy),radius(r)

{}

intget(){retumcenter.get()+radius;}

};

intmain(){

Circlec(3,4,5);

cout?c.get()?endl;

retumO;

)

運行時的輸出結(jié)果是()oA.5B.7C.9D.12

18.結(jié)構(gòu)化程序設(shè)計主要強調(diào)的是()。

A.程序的規(guī)模B.程序的效率C.程序設(shè)計語言的先進性D.程序易讀性

19.在結(jié)構(gòu)化設(shè)計方法中生成的結(jié)構(gòu)圖(SC)中,帶有箭頭的連線表示

A.模塊之間的調(diào)用關(guān)系B.程序的組成成份C.控制程序的執(zhí)行順序D.

數(shù)據(jù)的流向

20.打開文件時可單獨或組合使用下列文件打開模式:

(Dios

(2)ios_base::aopiosase::binary

(3)iosbase::

④iosbase::out

若要以二進制讀方式打開一個文件,需使用的文件打開模式為()。

A.①③B.①④C.②③D.②④

21.下列關(guān)于C++語言類的描述中錯誤的是

A.類用于描述事物的屬性和對事物的操作

B.類與類之間通過封裝而具有明確的獨立性

C.類與類之間必須是平等的關(guān)系,不能組成層次結(jié)構(gòu)

D.類與類之間可以通過一些方法進行通信和聯(lián)絡(luò)

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.下列敘述中錯誤的是()。

A.在程序中凡是以“#”開始的語句行都是預(yù)處理命令行

B.預(yù)處理命令行的最后不能以分號表示結(jié)束

C.#defineMAX是合法的宏定義命令行

D.C++中預(yù)處理命令行的處理是在程序執(zhí)行的過程中進行的

三、2.填空題(12題)

24.CASE是一組【】的集合,可以輔助軟件開發(fā)生命周期各階段進行

軟件開發(fā)。

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

26.下面程序的運行結(jié)果為【】。

#include<iostream.h>

voidmain()

{

unsignedcharvaluer127;

inttotal=100;

value++;

total+=value;

cout<<total<<endl;

A)227B)100C)127D)27

27.類中包含了一個靜態(tài)成員函數(shù),則main函數(shù)中和P.fl(P);語句具

有同樣功能的語句為【lo

#include<iostream,h>

classM

{

public,

M(inta){A=a;B+=a;

staticvoidfl(Mm)

private:

intA;

staticintB:

)

voidM::fl(Mm)

(

cout<<"A="<<m.A<<endl;

cout<<"B="<<m.B<<endl;

)

intM::B=10,

voidmain()

(

MP(5);

P.fl(P);

}

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

的一個【】。

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

30.operator是運算符重載時必須使用的關(guān)鍵字,它和被重載的運算符連

在一起,作為運算符函數(shù)的專用函數(shù)名,務(wù)必把該函數(shù)說明為的。

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

32.若有以下定義及初始化語句:

inti=100;

int*ip=&i;

intk=*ip;

并假設(shè)整型數(shù)i的地址為0x12345678,指針中的地址為0x21000000,則

k的值為【】。

33.語句cout<<'\n'還可表示為[]0

34.寫出下列程序的運行結(jié)果。

#include<iostream,h>

classX{public:

virtualvoiddisp(){cout<<“X類的disp函數(shù)<<"endl;}

);

classY:publicX{

public:

voiddisp(){cout<<“Y類的disp函數(shù)<<"endl;}

);

voidmain(){

Xa,*p=&a;

Yb;

p->disp();

p=&b;

p->disp();

}

運行結(jié)果為:[]

【】

35.一個C++語言程序的開發(fā)步驟通常包括編輯、【】、鏈接、運行和調(diào)

試。

四、程序改錯題(10題)

36.使用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********error********

assert(sizeof(s1)==3):

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

chars2[10]="ab":

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

assert(sizeof(s2)==2);

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

chars3=23:

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

assert(sizeof(s3)=4);

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

return;

)

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

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

能輸入多行,當輸入字符“?”時,默認字符輸入結(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);

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

while(str)

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

if(str[i])=a)

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

i++;

)

cout?str?endl;

return;

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

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

確。

程序輸出:

8

8

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

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

試題程序:

#include(iostream.h>

classCO

{

public:

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

staticintn=O:

CO

n++:

?CO

n—:

}:

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

intCO::n;

voidmain

COobj;

COobj2[7];

CO*C=NULL:

c=&obj:

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

eout?C.n?endl;

cout?C0::n?endl;

)

39.使用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***************

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

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

{

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

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;

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

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

TCobjl;

objl.Print;

TCobj2(3);

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

objl.number=10;

I/********error*%()******

TC.SetNumber(lOO);

objl.Print;

obj2.Print;

)

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

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

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

程序異常.,輸出信息為

error

0

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

)

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

catch

(

cout?i?endl;

)

try

(

throw(O);

throw("error");

)

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

catch

(

cout?"ERROR"?endl;

returnO;

)

42.使用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;

)

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

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

Constructor,i=0,

Destructor

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

可。

試題程序:

#include(iostream.h)

classTC

inti;

public:

TC;

voiddisplay;

?TC;

};

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

TC:TC

{

cout?"Constructor"?",";

i=0;

)

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

TC:display

(

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

)

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

TC:TC

(

COUI?"Destructor"?endl:

)

voidmain

TCa;

a.display;

)

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

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

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

中。

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

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

試題程序:

#include<iostream.h>

voidmain

(

inti=O;

charstr[120];

cout?"Enterastringendwith?."?endl;

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

cin.getline(str,120);

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

while(str)

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

if(str[i])=a)

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

i++;

)

cout?str?endl;

return;

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

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

inti;

TC04(10);

while(i>5)

(

I********errQr********

i++:

04.print;

)

cout?endl;

retumO;

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

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

義了用于表示矩形的CRect類,但類CRect的定義并不完整。請按要

求完成下列操作,將類CRect的定義補充完整。

(1)定義私有數(shù)據(jù)成員leftPoint、topPoint>rightPoint>bottomPoint,分

別用于表示矩形左上角及右下角的點的坐標,它們都是double型的數(shù)

據(jù)。請在注釋1之后添加適當?shù)恼Z句。

(2)完成默認構(gòu)造函數(shù)CRect的定義,指定默認實參為0,它們都是

double型的數(shù)據(jù)。請在注釋2之后添加適當?shù)恼Z句。

(3)定義函數(shù)體為空的析構(gòu)函數(shù)。請在注釋3之后添加適當?shù)恼Z句。

(4)在main函數(shù)中定義GReet類的實例rect2,并把re-

ctl的值賦給rect2。請在注釋4之后添加適當?shù)恼Z句。

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

試題程序:

#include<iostream.h>

classCRect

(

private:

public:

II

voidSetPoints(double,double,double,double);

voidSetLeftPoint(doublem){leftPoint=m;}

voidSetRightPoint(doublem){rightPoint=m;}

voidSetTopPoint(doublem){topPoint=m;}

voidSetBottomPoint(doublem){bottomPoint=m;}

voidDisplay();

};

CReet::CRect(doublel,doublet,doubler,doubleb)

(

leftPoint=l;topPoint=t;

rightPoint=r;bottomPoint=b;

voidCRect::Setpoints(doublel,doublet,doubler,doubleb)

leftPoint=l;topPoint=t;

rightPoint=n;bottomPoint=b;

)

voidCRect::Display()

{

cout?"left-toppointis("?leftPoint<<","?top-

Point?")"?\n;

cout?"right-bottompointis("?rightPoint<<","

<<bottomPoint?")"?\n;

}

voidmain()

(

CRectrectO;

rectO.Display();

rectO.SetPoints(20,20.6,30,40);

rectO.Display();

CRectrectl(O,0,150,150);

recti.SetTopPoint(10.5);

recti.SetLeftPoint(10.5);

!1********4********rect2Display().

47.(1)應(yīng)添力口“virtualvoidGetNamt!=0;

(2)應(yīng)添力口“constchar*GetName2”。

⑶應(yīng)添加“TC2(char*str)”。

(4)應(yīng)添加“m_str[i]=O;

【解析】本題第1處要求“在類TC1中定義接口函數(shù)GetName,為純虛

函數(shù)在C++中,在基類中用virtual聲明成員函數(shù)為虛函數(shù)。純虛

函數(shù)是在聲明虛函數(shù)時被“初始化'’為0的函數(shù),即

“virtualvoidGetName=0;"。第2處要求“函數(shù)GetName2實現(xiàn)獲得名字

的緩存,但只獲得讀允許操作這個緩存只能引用數(shù)據(jù)成員,而不能修

改,所以使用常成員函數(shù),其一般形式為“const函數(shù)類型函數(shù)名“,即

“constchar*GetName2"。第3處要求“實現(xiàn)TC2的構(gòu)造函數(shù)”。TC2的構(gòu)

造函數(shù)與類TC2的名稱應(yīng)該相同,而且第3處的大括弧中是對字符數(shù)

組str的操作,所以類TC2的構(gòu)造函數(shù)中的參數(shù)為str,即這里補全為

“TC2(char*str)”。第4處要求“完成TC2的構(gòu)造函數(shù),實現(xiàn)對名字的處

理”,補全類TC2的構(gòu)造函數(shù),構(gòu)造函數(shù)中的名字變量str對應(yīng)于類TC

中的成員變量m_str,所以這里補全變量賦值操作"m_str[i]=0;

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

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

test35_3.cpp,其中定義了時鐘類clock,但該類的定義并不完整。請按

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

(1)定義類clock的私有數(shù)據(jù)成員hour和minute,它們都是int型的數(shù)據(jù)。

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

(2)補充完全類clock的構(gòu)造函數(shù),私有數(shù)據(jù)成員hour和minute分別初

始化為參數(shù)h和m的值,請在注釋“〃**2**”之后添加適當?shù)恼Z句。

(3)完成類clock的成員函數(shù)printtime,的定義,該函數(shù)以“Nowthetime

ishour:minute”的格式輸出數(shù)據(jù)成員hour和minute的值,如hour=3、

minute=59,則輸出為"Nowthetimeis03:59”,請在注釋“〃**3**”之后

添加適當?shù)恼Z句。

(4)完成類clock的成員函數(shù)addoneminutetime的定義,該函數(shù)可將clock

類對象表示的時間加一分鐘,如現(xiàn)在hour=3、minute=59,運行該函數(shù)

后hour=4、minute=0o請在注釋“〃**4**”之后添加適當?shù)恼Z句。

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

Now,thetimeis12:59

Now,thetimeis13:00

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

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

#include<iostream.h>

classclock

(

private:

〃**]**

public:

clock(inth,intm)

{

H**2**

)

intpresenthour(){returnhour;}

intpresentminute(){returnminute;}

voidaddoneminutetime();

voidprinttime();

);

voidclock::printtime()

if(hour<10)cout<<'O';

H**3**

if(minute<10)cout<<'O';

cout<<minute<<endl;

)

v(oidclock::addoneminutetime()

〃**4**

if(minute>59)

(

minute-=60;

hour++;

)

if(hour>23)

hour=0;

)

voidmain()

{

clockc(12,59);

c.printtime();

c.addoneminutetime();

c.printtime();

)

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

test40_3.cpp,其中定義了類CVector,但該類的定義并不完整。請按要

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

⑴完成類CVector構(gòu)造函數(shù)的定義,把傳入的int型參數(shù)a和b分別賦

值給類的成員變量x和yo請在注釋“〃**1**”之后添加適當?shù)恼Z句。

(2)完成類CVector的運算符重載函數(shù)的定義,使Cvector類的兩個對

象相加時可以直接使用符號“+”,并且結(jié)果仍然為類Cvector的對象,請

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

⑶在主函數(shù)中添加適當?shù)恼Z句,把類Cvector的對象a和b相加,并且

把結(jié)果保存在對象c中,最后以“x,y”的形式輸出在屏幕上,請在注釋

“〃**3**”之后添加適當?shù)恼Z句。

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

#include<iostream.h>

classCVector

(

public:

intx,y;

CVector(){};

CVector(int,int);

CVectoroperator+(CVector);

);

CVector::CVector(inta,intb)

(

〃**]**

}

CVectorCVector::operater+(CVectorparam)

(

〃**2**

temp.y=y+param.y;

return(temp);

)

intmain()

(

CVectora(3,1);

CVectorb(1,2);

CVectorc;

〃**3**

return0;

)

參考答案

1.A本題考查程序效率。程序效率是指程序運行速度和程序占用的存儲

空間。影響程序效率的因素是多方面的,包括程序的設(shè)計、使用的算

法、數(shù)據(jù)的存儲結(jié)構(gòu)等。在確定數(shù)據(jù)邏輯結(jié)構(gòu)的基礎(chǔ)上,選擇一種合適

的存儲結(jié)構(gòu),可以使得數(shù)據(jù)操作所花費的時間少,占用的存儲空間少,

即提高程序的效率。因此,本題選項A的說法是正確的。

2.C解析:數(shù)據(jù)庫模型分為層次模型、網(wǎng)狀模型和關(guān)系模型,其中層次

模型和網(wǎng)狀模型稱為非關(guān)系模型。

3.B

4.A

5.C解析:選項A)、選項B)顯然不合題意。數(shù)據(jù)定義語言(Data

DefinitionLanguage,簡稱DDL)負責數(shù)據(jù)的模式定義與數(shù)據(jù)的物理存

取構(gòu)建;數(shù)據(jù)操縱語言(DataManipulationLanguage,簡稱DML)負責數(shù)

據(jù)的操縱,包括查詢及增、刪、改等操作。

6.B解析:本題要考查的實際是字符數(shù)組,用于向函數(shù)傳遞參數(shù),屬于

指針或引用傳遞方式。要注意的是考生不要被名稱所迷惑,即根據(jù)A和

D是相同類別的,故可以排除。對C來說,也屬于指針傳遞方式,而B

不僅不屬于指針傳遞,而且還沒有限定數(shù)組大小,編譯器在編譯時就會

產(chǎn)生錯誤。

7.B

8.B解析:本題考核派生類中的訪問權(quán)限問題。繼承方式包括:public(公

有派生),protected(保護派生)和private(私有派生)。不同的繼承方式會

導(dǎo)致原來具有不同訪問屬性的基類成員在派生類中的訪問屬性也有所

不同。這里的訪問主要來自兩個方面:一是派生類中的新增成員對從基

類繼承來的成員的訪問,?二是派生類外部通過派生類對象對從基類繼承

來的成員的訪問。私有繼承時基類中的protected成員在派生類中變成了

private成員,所以B選項的描述是錯誤的。

9.D解析:性表的鏈式存儲結(jié)構(gòu)中,各數(shù)據(jù)結(jié)點的存儲序號不連續(xù),且

各結(jié)點在存儲空間中的位置關(guān)系與邏輯關(guān)系也不一致。性鏈表中,各數(shù)

據(jù)元素之間的前后件關(guān)系是由各結(jié)點的指針域來指示的。所以,選項D

正確。

10.D

11.D解析:NO,輸出為不顯示,只代表一個字符串的結(jié)束。注意:C++語

言中各種字符轉(zhuǎn)義序列的意義和應(yīng)用。

12.D

Do【解析】C語言中規(guī)定,else與離它最近的if相匹配。

x=l,y=2,z=3,所以第一個if的條件(x>y)不成立,直接執(zhí)行

printf("%d\n",x+1);語句,輸出x的值1,再把x加1。

13.B\nBo【解析】本題考核拷貝構(gòu)造函數(shù)。上述程序中,拷貝構(gòu)造函數(shù)

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

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

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

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

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

\n

14.D

Do【解析】C++中對函數(shù)模板的調(diào)用有時候只使用了函數(shù)實參,而

沒有使用模板實參,模板實參都被省略了,但模板實參的省略并不是

必然的,而是有條件的:從模板函數(shù)實參表獲得的信息有矛盾;需要

獲得特定類型的返回值,而不管參數(shù)的類型如何;虛擬類型參數(shù)不出

現(xiàn)在模板函數(shù)的形參中;函數(shù)模板含有常規(guī)形參。題中定義的函數(shù)模

板中虛擬類型參數(shù)T2沒有出現(xiàn)在模板數(shù)的形參列表中,所以在調(diào)用時

不能省略,D選項的調(diào)用省略了T3,這是允許的。

15.C

16.D

Do【解析】本題考查關(guān)于C++語言類的定義方法。在C++語言中

類定義中的構(gòu)造函數(shù)是私有的,但是卻調(diào)用了其中的公有變量,在實

例化時會斟現(xiàn)錯誤。

17.D

Do【解析】簡單類之間繼承關(guān)系的調(diào)用,按照通常做法便可以得到答

案。center,get函數(shù)調(diào)用后,3和4的和被返回,接著再調(diào)用Circle類

的radius成員變量5相加后得到12。

18.D結(jié)構(gòu)化程序設(shè)計由迪杰斯特拉(E.W.dijkstra)在1969年提出,他主

張“清晰第一,效率第二”,以模塊化設(shè)計為中心,將待開發(fā)的軟件系統(tǒng)

劃分為若干個相互獨立的模塊,這樣使完成每一個模塊的工作變得單純

而明確,為設(shè)計一些較大的軟件打下了良好的基礎(chǔ)。

由于模塊相互獨立,因此,在設(shè)計其中一個模塊時,不會受到其他模塊

的牽連,因而可將原來較為復(fù)雜的問題化簡為一系列簡單模塊的設(shè)計。

模塊的獨立性還為擴充已有的系統(tǒng)、建立新系統(tǒng)帶來了不少的方便,因

為可以充分利用現(xiàn)有的模塊作為積木式的擴展。

結(jié)構(gòu)化程序設(shè)計的基本思想是采用“自頂向下,逐步求精”的程序設(shè)計方

法和“單入口單出口”的控制結(jié)構(gòu)。自頂向下、逐步求精的程序設(shè)計方法

從問題本身開始,經(jīng)過逐步細化,將解決問題的步驟分解為由基本程序

結(jié)構(gòu)模塊組成的結(jié)構(gòu)化程序框圖;“單入口單出口”的思想認為一個復(fù)雜

的程序,如果它僅是由順序、選擇和循環(huán)三種基本程序結(jié)構(gòu)通過組合、

嵌套構(gòu)成,那么這個新構(gòu)造的程序一定是一個單入口單出口的程序。據(jù)

此就很容易編寫出結(jié)構(gòu)良好、易于調(diào)試的程序。

19.A解析:在結(jié)構(gòu)圖中,用帶有箭頭的連線表示模塊之間的調(diào)用關(guān)系。

箭頭由前一個模塊指向后一個模塊,表示前一個模塊調(diào)用后一個模塊。

本題的正確答案為A。

20.D

解析:ios_base::binary是作為二進制文件打開,ios_base::out是

為輸出而打開;故因選D。

21.C解析:C++語言中的類是可以組成層次結(jié)構(gòu)的,類是用于描述事

物的屬性和對事物的操作,類與類之間有相對的獨立性,但其可以通過

一些方法進行信息的通信。

22.C

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

23.D

預(yù)處理命令是以“#”開始的語句,每一條預(yù)處理命令必須單獨占用一

行.由于不是C語言的語句。并且命令行的最后不能以分號表示結(jié)

束,定義格式為“#de-fine標識符字符串“,預(yù)處理命令行是系統(tǒng)對源程

序進行編譯之前進行處理的,不是在程序執(zhí)行的過程中。

24.軟件開發(fā)工具軟件開發(fā)工具

25.*p

26.410410解析:本題主要考察C++類中靜態(tài)數(shù)據(jù)成員的使用。程序首

先定義了類count,其內(nèi)部含有private類型數(shù)據(jù)成員staticintn;同時

含有public類型構(gòu)造函數(shù)count。和靜態(tài)成員函數(shù)staticinttest(),這兩個

函數(shù)的功能分別是為對象申請系統(tǒng)資源并將靜態(tài)數(shù)據(jù)成員n加1和將靜

態(tài)數(shù)據(jù)成員n加4。主函數(shù)前,程序?qū)㈧o態(tài)數(shù)據(jù)成員n初始化為0,該

數(shù)據(jù)成員為所有類count的對象所共有的數(shù)據(jù)成員;主函數(shù)中程序首先

執(zhí)行靜態(tài)成員函數(shù)test()(由于test聲明為static,因此其調(diào)用時無需通過

具體對象),其執(zhí)行過程中,靜態(tài)數(shù)據(jù)成員n應(yīng)該加4變成n=4,因此此

處輸出為4;此后程序創(chuàng)建對象cl和c2,由于在每次創(chuàng)建過程中都要

調(diào)用構(gòu)造函數(shù)count。,而每次調(diào)用count。函數(shù)后,靜態(tài)數(shù)據(jù)成員n值都

會加1。因此,創(chuàng)建兩個對象之后,n值變?yōu)閚=6;再次執(zhí)行test。函數(shù)

后,n的值再次加4,因此變?yōu)閚=6+4=10。故程序全部執(zhí)行后,變量n

值變?yōu)?0,而中間程序輸出為“410”。

27.M::fl(P);M::fl(P);解析:由于fl是類M的靜態(tài)成員函數(shù),即說明類

M的任何對象都共享一份fl,因此,不僅可以從對象那里訪問fl,還

可以用域操作符::通過類名來訪問。

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

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

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

29.抽象類抽象類

3O.public

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

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

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

32.100

33.cout<<endl;cout<<endl;解析:\\n表示換行,endl也可表示換

行。注意:endl和'\\n,可以通用。

34.X類的disp函數(shù)Y類的disp函數(shù)X類的disp函數(shù)\r\nY類的disp函

數(shù)

35.編譯編譯解析:C++語言程序開發(fā)的基本步驟是編輯、編譯、鏈接、

運行和調(diào)試。

36.(1)應(yīng)改為"assert(sizeof(sD==4);

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

\n⑶應(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,所以修改為

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

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

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

⑶應(yīng)改為“if(str[i]>=a&&st巾]<=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處的

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

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

4t,,

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

38.(1)€4staticintn=O,,^Z0(^t€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;

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

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

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

【解析】本題第1處的“usingstd;”是在程序中引入標準命名空間std,

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

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

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

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

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

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

“outl.put(s[i]);

40.⑴應(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ù),所以修改為

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

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

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

“obj2.SetNumber(lOO);

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個標識前的異常拋出語句為

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

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

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

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

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

改為“catch(…)”。

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

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

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

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

第3處叮(2.5611^11166?100);”語句中的T(2為類,并不是對象,這里

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

“obj2.SetNumber(lOO);

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

(2)應(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”。

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

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

,,

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

\n【解析】本題中要求以輸入字符“?”為結(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(st巾])”。第3處的“if(str[i]>=a)”語句是

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

,,

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

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

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

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

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

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

評論

0/150

提交評論