2023年四川省成都市全國計算機(jī)等級考試C語言程序設(shè)計真題(含答案)_第1頁
2023年四川省成都市全國計算機(jī)等級考試C語言程序設(shè)計真題(含答案)_第2頁
2023年四川省成都市全國計算機(jī)等級考試C語言程序設(shè)計真題(含答案)_第3頁
2023年四川省成都市全國計算機(jī)等級考試C語言程序設(shè)計真題(含答案)_第4頁
2023年四川省成都市全國計算機(jī)等級考試C語言程序設(shè)計真題(含答案)_第5頁
已閱讀5頁,還剩44頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

2023年四川省成都市全國計算機(jī)等級考試

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

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

一、1.選擇題(10題)

1.以下程序運(yùn)行后,輸出結(jié)果是#definePT5.5

#defineS(x)PT*x*xmain(){inta=l,b=2;

printf("%4.1f\nM,S(a+b);}

A.49.5B.9.5C.22D.45

2.下列有關(guān)數(shù)據(jù)庫的描述,正確的是____o

A.數(shù)據(jù)庫是一個DBF文件B.數(shù)據(jù)庫是一個關(guān)系C.數(shù)據(jù)庫是一個結(jié)構(gòu)

化的數(shù)據(jù)集合D.數(shù)據(jù)庫是一組文件

3.程序設(shè)計方法要求在程序設(shè)計過程中

A.先編制出程序,經(jīng)調(diào)試使程序運(yùn)行結(jié)果正確后再畫出程序的流程圖

B.先編制出程序,經(jīng)調(diào)試使程序運(yùn)行結(jié)果正確后再在程序中的適當(dāng)位置

處加注釋

C.先畫出流程圖,再根據(jù)流程圖編制出程序,最后經(jīng)調(diào)試使程序運(yùn)行結(jié)

果正確后再在程序中的適當(dāng)位置處加注釋

D.以上三種說法都不對

4.下列有關(guān)運(yùn)算符重載的敘述中,正確的是()o

A.運(yùn)算符重載是多態(tài)性的一種表現(xiàn)

B.C++中可以通過運(yùn)算符重載創(chuàng)造新的運(yùn)算符

C.C++中所有運(yùn)算符都可以作為非成員函數(shù)重載

D.重載運(yùn)算符時可以改變其結(jié)合性

5.在軟件測試中,白盒測試方法是通過分析程序的來設(shè)計測

試用例的方法。

A.應(yīng)用范圍B.內(nèi)部邏輯C.功能D.輸入數(shù)據(jù)

6.派生類中的成員不能直接訪問基類中的()成員。

A.publicB.privateC.virtualD.protected

7.下列敘述中,錯誤的是()o

A.派生類可以使用private派生

B.對基類成員的訪問必須是無二義性的

C.基類成員的訪問能力在派生類中維持不變

D.賦值兼容規(guī)則也適用于多繼承的組合

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

素的表達(dá)式是0

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

9.下列字符串中不能作為C++標(biāo)識符使用的是()o

A.WHILEB.userC.JvarD.9stars

10.在公有派生情況下,有關(guān)派生類對象和基類對象的關(guān)系,下列敘述不

正確的是0

A.派生類的對象可以賦給基類的對象

B.派生類的對象可以初始化基類的引用

C.派生類的對象可以直接訪問基類中的成員

D.派生類的對象的地址可以賦給指向基類的指針

二、單選題(13題)

11.關(guān)于關(guān)鍵字class和typename,下列表述中正確的是()。

A.程序中的lypename都可以替換為class

B.程序中的class都可以替換為typename

C.在模板形參表中只能用{ypename來聲明參數(shù)的類型

D.在模板形參表中只能用class或typenanle來聲明參數(shù)的類型

12.對于類定義

classA{

public:

voidfunc2{}

};

classB:publicA{public:

w)idfuncl|cout?HclassBfiincl”v〈endl:}

virtualvoillfimc2{cout?MclassBfunc2"?endl:}

};

下面正確的敘述是()。

A.A::rune2和B::fund都是虛函數(shù)

B.A::func2和B::funel都不是虛函數(shù)

C.B::fund是虛函數(shù),而A::func2不是虛函數(shù)

D.B::fund不是虛函數(shù),而A::func2是虛函數(shù)

13.要定義整型數(shù)組x,使之包括初值為0的三個元素,下列語句中

錯誤的是

A.intx[3]={0,0,0};

B.intx[]={0};

C.staticintx[3]={0};

D.intx[]={0,0,0);

14.

21.可以用p.a的形式訪問派生類對象p的基類成員a?其中a是().

A.私有繼承的公有成員B.公有繼承的私有成員

C.公有繼承的保護(hù)成員D.公有繼承的公有成員

15.下列關(guān)于運(yùn)算符重載的敘述中,錯誤的是()。

A.有的運(yùn)算符可以作為非成員函數(shù)重載

B.所有的運(yùn)算符都可以通過重載而被賦予新的含義

C.不得為重載的運(yùn)算符函數(shù)的參數(shù)設(shè)置默認(rèn)值

D.有的運(yùn)算符只能作為成員函數(shù)重載

30.有如下函數(shù)模板定義:

template<typenameT1?typenameT2,typenameT3>

T2plus(Tltl,T3t3){returntl+t3;}

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

A.plus(3?5L);B.plus<X3.5L);

16C.plus<int>(3?5L)>D?plus<int.double)(3?5L);

17.對于類定義classA{public:virtualvoidfuncl(){}voidfunc2(){}};

classD:publicA{public:voidfuncl(){cout<<"classBrune1n<<endl;}

virtualvoidfunc2(){cout<<"classBfunc2"<<endl;}};下面正確的

敘述是o

A.A::func2()和都是虛函數(shù)

B.A::func2()和B::funcl()都不是虛函數(shù)

C.B::funcl()是虛函數(shù),而A::func2()不是虛函數(shù)

D.B::funcl。不是虛函數(shù),而A::func2()是虛函數(shù)

18.對于拷貝構(gòu)造函數(shù)和賦值操作的關(guān)系,正確的是()。

A.拷貝構(gòu)造函數(shù)和賦值操作是完全一樣的操作

B.進(jìn)行賦值操作時,會調(diào)用類的構(gòu)造函數(shù)

C.當(dāng)調(diào)用拷貝構(gòu)造函數(shù)時,類的對象正在被建立并被初始化

D.拷貝構(gòu)造函數(shù)和賦值操作不能在同一個類中被同時定義

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

A.ASPB.CC.VBD.Java

20.下列程序的運(yùn)行結(jié)果為()。

#include<iostream.h>template<classTT>

classFF

{TTal,a2,a3;public:

FF(TTbl,TTb2,TTb3){al=bl;a2=b2;a3=b3;}TTSum{return

al+a2+a3;};

}

voidmain

{FF<int>x(int(l.1),2,3),Y(int(4.2),5,6);

cout?x.Sum??Y.Sum?endl;)

A.6.115.2B.615C.615.2D.6.115

21.有以下程序:

classDate

(

public:

Date(inty,intm,intd);

(

year=Y:

month=m;

day=d;

)

Date(inty=2000)

(

yearly;

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

rcturnO;

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

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

22.有如下程序:

#included<iostream>

usingnamespacestd;

classTestClass

{inta;

public:

TestClass(intx){a=x;}

voidshow(){cout?a;)};

classTestClassl:publicTestClass

{intb;

public:

TestClassl(inti):TestClass(i+1),b(i){}

voidshow(){cout?b;)};

intmain()

{TestCIassb(5),*P;

TestClassld(l):

p=&d;

p->show();

returnO;}

該程序運(yùn)行后的打印結(jié)果是()oA.5B.lC.OD.2

23.有如下程序#include<iostream.h>intfunc(inta,intb)

{return(a+b);}voidmain(){intx=2,y=5,z=8,r;r=func(func(x,

y),Z);cout<<r;)該程序的輸出的結(jié)果是

A.12B.13C.14D.15

三、2.填空題(12題)

24.軟件需求規(guī)格說明書應(yīng)具有完整性、無歧義性、正確性、可驗(yàn)證性、

可修改性等特性,其中最重要的是______O

25.軟件設(shè)計模塊化的目的是【】。

26.有以下程序:

#include<iostream>

usingnamespacestd:

classBase

(

public:

Base()

(

K=0;

)

intx;

};

classDerived!:virtualpublicBase

public:

Derivedl()

(

x=10;

)

};

classDerived!:virtualpublicBase

27.以下程序執(zhí)行后的輸出結(jié)果是【

#include<iostream.h>

main()

(

inti,m=0,n=0,k=0;

for(i=9;i<=11;i++)

switch(i/10)

(

case0:m++;n++;break;

case10:n++;break;

default:k++;n++;

)

cout<<m<<n<<k;

)

28.若要把類B定義為類A的友元類,則應(yīng)在類A的定義中加入語句

29.有如下定義:

classMA{

intvalue;

public:

MA(intn=0):value(n){}

};

MA*ta,tb;

其中MA類的對象名標(biāo)識符是_____o

30.對象根據(jù)所接受的消息而做出動作,同樣的消息被不同的對象所接

受時可能導(dǎo)致完全不同的行為,這種現(xiàn)象稱為0

31.在下面程序橫線處填上適當(dāng)內(nèi)容,使得程序的輸出為9876。

#include<iostream>

usingnamespacestd;

template<classT>

voidf([])

(

Tt;

for(inti=0;i<n/2;i++)

(

t=ali];

a[i]=a[n-l-i];

a[n-l-i]=t;

)

}

intmain()

(

intx[]={6,7,8,9);

f(x,4);

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

cout<<x[i];

cout<<endl;

return0;

32.若有以下程序:

#include<iostream>

usingnamespacestd;

classSample

(

private:

constintn;

public:

Sample(inti):n(i){)

voidprint()

(

cout<<,,n="<<n<<endl;

)

);

intmain()

(

samplea(10);

a.print();

return0;

1

上述程序運(yùn)行后的輸出結(jié)果是【】。

33.樹L中,度為1、2、3、4、5和6的節(jié)點(diǎn)個數(shù)為6、4、3、3、5、

1,則L中葉子的個數(shù)是【】。

34.下列程序的運(yùn)行結(jié)果是【】。

#include<iostream,h>

classBase

(

public:

virtualvoidfunc(inti){cout<<"classBase:“<<i<<endl;}

};

classDerived:publicBase

public:

voidfunc(doubled){cout<<"classDerived:'1<<d<<endl;}

);

voidmain()

(

Basea,*p=&a;

Derivedb;

p=&b;

(*p).func(3.3);

)

35.類。stream的成員函數(shù)【】用于執(zhí)行無格式輸出,成員函數(shù)put用

于輸出單個字符。

四、程序改錯題(10題)

36.使用VC++6.0打開考生文件夾下的源程序文件1.cpp,該程序運(yùn)

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

Constructor,i=0,

Destructor

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

試題程序:

#inckide(iostream.h)

classTC

(

inti;

public:

TC;

voiddisplay;

~TC;

);

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

TC:TC

cout?'^Constructor'^?'^,”

i=0;

)

/小小小小小小errcr不不不不不不

TC:display

tout?ni=n?i?M,M?endl;

1?*?

//不不不不不不ermr,。。*卒不**

TC:TC

COUI?"Destructorn?endl:

)

voidmain

(

TCa;

a.display;

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

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

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

到屏幕中。

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

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

試題程序:

#include<iostream.h>

voidmain

(

inti=O;

charstr[120J;

cout?HEnterastringendwith?.n?endl;

/?>1?*>1**>1?*>1??>1?

//不不不不不不不小prrcr不不不不不不予不

cin.getline(str,120);

f

//不不不不不不不不prr()r不不不不干不不不

while(str)

!*1**1**1**1*?*?

//****舉***pj*!*cr*不******

if(str[i])=a)

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

i++;

}

cout?str?endl;

return;

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

1.cpp,該程序運(yùn)行時有錯誤,請改正程序中的錯誤。本程序要求實(shí)

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

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

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

******errc)r******的下面°

試題程序:

#include<iostream>

#include<fstream>

/

//*5*5*5*5*5*5*rprmr不不不不不不不不

usingstd;

voidWriteFile(char*s)

ofstreamoutI;

/小小小小年年小小prrcr不不不不不不不不

outl.open("l.txt"jbinary|app);

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

/小小小小小小小小prmr不不不不不不不不

outl.puts(sfi]);

)

outl.close;

}

voidClearFile

ofstreamoutl;

outl.open("l.txt");

outl.close;

)

intmain

(

charsL1024J;

ClearFile;

cout?"pleaseinputastrin9:"?endl;

cin.getline(s,1024);

WriteFile(s);

returnO;

}

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

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

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

程序異常,輸出信息為

error

O

ERROR

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

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

試題程序:

#include<iostream.h)

intmain

throw(nerrorn);

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

catch(chars)

cout?s?endl;

throw((int)0);

|/********error**字**¥字不

catch

(

cout?i?endl:

)

try

(

throw(O):

throw(',errorH);

}

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

catch

cout?nERROR"?endl;

}

returnO:

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

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

number=l

number=10

number=100

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

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

試題程序:

#include<iostrearn.h>

classTC

(

public:

TC(inti)

(

number=i;

)

voidSetNumber(intm)

(

number=m;

)

intGetNumberconst

(

returnnumber;

)

voidPrintconst

cout?"number="?number?endl;

private:

intnumber;

voidmain

TCobjl;

objl.Print;

TCobj2(3);

個個個個個個個個介rrcr個不不干不干不不

objl.number=10;

********errcr*%c******

TC.SetNumber(lOO);

objl.Print;

obj2.Print;

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

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

100

37

32

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

可。

試題程序;

#include<iostream.h>

/?£*?*??*?**??*??*?

//*平*平不平prrc廣’?、不’?、*?'

voidmain

/?1??)??1???*

//******errcr不不不不不不

intm=0142:

/*1**1**1**1**1**1*?!?*1?

//小小小小?年prmr不不不不不不

intn=0X27:

intq=32;

cout<<m<<endl;

cout<<n<<endl;

cout<<q<<endl;

return;

}

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

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

確。

程序輸出:

8

8

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

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

試題程序;

#include(iostream.h>

classCO

public:

*ta/

/冰冰冰冰不斗不不prmr,『亭亭亭不不予不/

staticintn=O:

CO

n++:

?CO

n—:

}:

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

intCO::n:

voidmain

COobj;

COobj2[7];

COCNULL:

c=&obj:

半年年年半**汴prmr‘/**不不不不不

eout?C.n?endl;

cout?C0::n?endl;

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

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

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

中。

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

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

試題程序:

#include<iostream.h>

voidmain

(

inti=0;

charstr[120J;

cout?"Enterastringendwith?."?endl;

/不不不不不不不小prrcr不不不不不不不不

cin.getline(str,120);

while(str)

/1―X-**?

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

if(str[i])=a)

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

i++;

cout?str?endl;

return;

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

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

Constructor,i=0,

Destructor

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

可。

試題程序:

#include(iostream.h)

classTC

(

inti;

public:

TC;

voiddisplay;

?TC;

);

/不不不不不不error不不不不不不

TC:TC

(

cout?nConstructorn?M,”;

i=0;

)

小小?1?小?!?小小小error一不江?<L*<>*><*<*

TC:display

tout?Hi=',?i?H,M?endl;

/****舉舉pji*cr***不**

TC:TC

COUI?"Deslructor"?endl:

voidmain

TCa;

a.display;

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

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

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

程序異常,輸出信息為

error

O

ERROR

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

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

試題程序:

#include<iostream.h)

intmain

throw(nerror");

}

/*p*i**i**i**i**r*r*r不不不不不不不不

catch(chars)

(

cout?s?endl;

}

try

(

throw((int)0);

)

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

catch

(

coul?i?endl:

)

try

(

throw(O);

throw("error");

catch

(

cout?nERRORn?endl;

1

returnO:

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

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

proj3,此工程中包含一個源程序文件proj3.cpp,補(bǔ)充編制C++程序

proj3.cpp,其功能是讀取文本文件in.dat中的全部內(nèi)容,將文本存

放到doc類的對象myDoc中。然后將myDoc中的字符序列反轉(zhuǎn),并

輸出到文件out.dai中。文件in.dat的長度不大于1000字節(jié)。

要求:

補(bǔ)充編制的內(nèi)容寫在“〃**********”與“〃**********''兩行之間。實(shí)現(xiàn)

將myDoc中的字符序列反轉(zhuǎn),并將反轉(zhuǎn)后的序列在屏幕上輸出。不得

修改程序的其他部分。

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

writeToFile已經(jīng)給出并且調(diào)用。

//proj3.cpp

#include<iostream>

#include<fstream>

#include<catting>

usingnamespacestd;

classdoc

private:

char*sir;//文本字符串首地址

intlength;〃文本字符個數(shù)

public:

〃構(gòu)造函數(shù),讀取文件內(nèi)容,用于初始化新對象,用ename是文件名字

符串首地址

doc(char*filename);

voidreverse;〃將字符序列反轉(zhuǎn)

一doc;

voidwriteToFile(char*filename);

doc::doc(char}filename)

(

ifstreammyFile(filename);

intlen=1001,tmp;

atr=newchar[len];

length=0:

while((trap=myFile.get)!=EOF)

(

str[length++]=trap;

)

str[length]=<\0,;

myFile.close;

}

voiddoc::reverse{

//將數(shù)組atr中的length個字符中的第一個字符與最后一個字符交換,

第二個字符與倒數(shù)第二個

〃字符交換

//*!**!**1**1**1**1**1*?!*?!*、]?、].、]■*1*、[,、1.*1**1*、]■*1**1*?!**1**1*

(I,|、<,**,**.?*.?*.?*.?*.?**?*,?*,?444,.?*.?*??/4、*???.、*,**,?*,?***,.、***

doc::?doe

(

delete[Jstr;

)

voiddoc::writeToFile(char*filename)

(

OfstreamoutFile(filename);

outFile?str;

outFile.close;

}

voidmain

(

docmyDoc("in.dat");

myDoc.reveme;

myDoc.writeToFilef'out.dat");

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

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

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

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

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

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

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

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

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

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

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

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

他的程序代碼。

試題程序:

#include(iostream.h>

classTCFruit

private:

floatWeight;

*1*

*7**7**7**7*I*1*?7w*7**7**7*

staticintAHNo;

public:

TCFruit(floatw)

/*1*

//年種半舉半水水2水半*水半***

AllWeight+=w:

AllNo++:

?TCFruit

/9??。?1**1*4,

/t^T**^*^T^L*j**T**T**^*

AllWeight-=Weight:

)

voiddisplay

(

cout?',SellaFruitwithn?Weight?,'k9,'?

endl;

coutw''Allsellnumber:n?AllNo?endl;

cout?nAllsellweight:,,?AllWeight?"k9,'?

endl?endl;

}

};

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

floatTCFruit::AIIWeight=O.0;

intmain

(

TCFruitFruitl(l.2);

Fruitl.display;

TCFruitFruit2(2.3);

Fruit2.display;

returnO;

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

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

testll_3.cpp,其中定義了類CPosition,但該類的定義都并不完整。請按

要求完成下列操作,將類CPosition的定義補(bǔ)充完整。

⑴在類定義外完成重載的兩個構(gòu)造函數(shù)CPosition。和CPosition(double

dx,doubledy),其中前者為不帶參數(shù)的構(gòu)造函數(shù),使CPosition對象的

默認(rèn)值為x=0,y=0_后者為帶參數(shù)的構(gòu)造函數(shù),把數(shù)據(jù)成員x和y分

別初始化為參數(shù)dx和dy的值。請在注釋“〃**1***之后添加適當(dāng)?shù)恼Z句。

(2)在類體中添加函數(shù)move(doubleax,doubleay)的定義,使得點(diǎn)的坐標(biāo)

x和y分別移動ax和ay個單位,請在注釋“〃**2**”之后添加適當(dāng)?shù)恼Z

句。

(3)完成函數(shù)doubledistance(doublebx,doubleby)的定義,該函數(shù)返回

*this和點(diǎn)(bx,by)的距離,請在注釋“〃**3**”之后添加適當(dāng)?shù)恼Z句。

注意:除在指定的位置添加語句外,請不要改動程序中的其他語句。

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

#include<iostream.h>

#include<math.h>

classCPosition

(

public:

CPosition();

CPosition(doubledx,doubledy);

doublegetx();

doublegety();

H**2**

doubledistance(doublebx,doubleby);

private:

doublex;

doubley;

);

//**]**

(

x=0;y=0;

)

CPosition::CPosition(doubledx,doubledy)

(

x=dx;y=dy;

}

doubleCPosition::getx()

(

returnx;

}

doubleCPosition::gety()

(

returny;

)

doubleCPosition::distance(doublebx,doubleby)

voidmain()

(

doublea,b;

cout<<''Inputx,ypositionofapoint:

cin>>a>>b;

CPositionpsA(a,b);

cout<<"Inputx,ypositionofanotherpoint:";

cin>>a>>b;

cout<<"Thedistanceis"<<psA.distance(a,b)<<endl;

}

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

序文件MyMain5.cpp,其中定義了用于表示日期的類Date,但類Date

的定義并不完整。請按要求完成下列操作,將類Date的定義補(bǔ)充完成:

①定義私有數(shù)據(jù)成員length,width和label,其中l(wèi)ength,width是int

型Jabel是類point的對象。它們分別表示長方形的長、寬以及坐標(biāo)點(diǎn)。

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

②完成構(gòu)造函數(shù)square的定義,使square對象的默認(rèn)值為:

length=0,width=0,label(0,0),請在注釋“〃**2**”之后添加適當(dāng)?shù)恼Z句0

③完成重載構(gòu)造函數(shù)square(inthintw,intx,inty)的定義,把數(shù)據(jù)成員

length、width和對象label分別初始化為參數(shù)1、w、x和y的值,請在

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

④完成成員函數(shù)gel_area()的類外定義,此函數(shù)的功能是返回此長方形

的面積,及返回length*width的值。請在注釋“〃**4***之后添加適當(dāng)?shù)?/p>

語句。

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

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

//MyMain5.cpp

#include<iostream>

usingnamespacestd;

classpoint

(

private:

intx,y;

public:

voidset(inti,intj)

(

x=i;

y=j;

)

intget_y()

(

returny;

)

);

classsquare

〃(**]**

public:

〃**2**

square(intl,intw,intx,inty)

(

〃**B**

)

voidset(intl,intw)

(

length=l;

width=w;

)

intget_area()const

(

returnlength*width;

)

);

intsquare::getarea()const

(

〃**4**

}

intmain()

squaresmall(2,4J,35);

cout<<small.get_area()<<endI;

return0;

參考-fry答案r-f-1

LB解析:本題考察宏定義的使用,宏在使用是如同函數(shù)一樣,但卻是

在編譯時展開,而函數(shù)卻是在運(yùn)行時進(jìn)行計算的。

2.C解析:數(shù)據(jù)庫(Database,簡稱DB)是數(shù)據(jù)的集合,它具有統(tǒng)一的結(jié)

構(gòu)形式并存放于統(tǒng)一的存儲介質(zhì)內(nèi),是多種應(yīng)用數(shù)據(jù)的集成,并可被各

個應(yīng)用程序所共享。數(shù)據(jù)庫中的數(shù)據(jù)具有“集成”、“共事”之特點(diǎn)。

3.D解析:在程序設(shè)計過程中,一個很重要的環(huán)節(jié)是首先確定實(shí)現(xiàn)各種

功能的算法,并且用某種工具將它精確地表達(dá)出來。流程圖是其中的工

具之一°因此,程序設(shè)計的過程應(yīng)是先畫出流程圖,然后根據(jù)流程圖編

制出程序。因此,選項A中的說法是錯誤的。程序中的注釋是為了提高

程序的可讀性,使程序易于理解、易于維護(hù),注釋必須在編制程序的同

時加入。因此,選項B和C中的說法也都是錯誤的。

4.A

重載運(yùn)算符的規(guī)則如F:①C++不允許用戶自己定義新的運(yùn)算符,只能

對己有的C++運(yùn)算符進(jìn)行重載;②C++不能直載的運(yùn)算符只有5個;③

重載不能改變運(yùn)算符運(yùn)算對象的個數(shù);④重載不能改變運(yùn)算符的優(yōu)先

級和結(jié)合性;⑤重載運(yùn)算符的函數(shù)不能有默認(rèn)的參數(shù);⑥重載的運(yùn)算

符必須和用戶定義的自定義類型的對象一起使用,至少應(yīng)有一個是類

對象,即不允許參數(shù)全部是C++的標(biāo)準(zhǔn)類型。故本題答案為A。

5.B

6.B解析:即使是共有繼承,其私有成員仍為私有,無法訪問。

7.C解析:在建立派生類時,并不是簡單地把基類的私有成員直接作為

派生類的私有成員,把基類的公用成員直接作為派生類的公用成員。涉

及如何確定基類的成員在派生類中的訪問屬性問題,不僅要考慮對基類

成員所聲明的訪問屬性,還要考慮派生類所聲明的對基類的繼承方式,

根據(jù)這兩個因素共同決定基類成員在派生類中的訪問屬性。所以本題選

擇選項C)o

8.B

9.D解析:在C++中,變量標(biāo)識符必須以大小寫字母或下劃線開始,由

數(shù)字或者字母以及下畫線等組成的一個字符串,其中C++關(guān)鍵字不能作

為標(biāo)識符,不能包含-、+、?、*、/等運(yùn)算符號。C++變量區(qū)分大小寫,

不能以數(shù)字開頭。

10.C解析友元函數(shù)的定義既可以在類內(nèi)部進(jìn)行,也可以在類外部進(jìn)行。

它提高了程序的運(yùn)行效率,但破壞了類的封裝性和隱藏性,使得類的非

成員函數(shù)可以訪問類的私有成員。

11.A

程序中的typename都可以替換為class,但程序中的class不可以全部

替換為typenameo在模板類型形參中除了typename和class以外,也

可以用常規(guī)類型來聲明參數(shù)的類型,所以C、D選項錯誤。

12.C

基類中說明的虛函數(shù),在派生類中自然就是虛函數(shù),所以類B中fund

是虛函數(shù);而類A中的func2沒有被關(guān)鍵字virtual修飾,所以不是虛

函數(shù)。

13.D

14.D

15.B

解析:此題考查的是運(yùn)算符的重載。C++中運(yùn)算符重載是多態(tài)性的一

種表現(xiàn),在C++語言中,這5個運(yùn)算符不

能重載,所以選項B)錯誤。山于很多符號是一元運(yùn)算符和二元運(yùn)算符

公用的,為了避免含混,不得為重載的運(yùn)算符函數(shù)設(shè)置默認(rèn)值,調(diào)用

時也就不得省略實(shí)參。其中及所有的類型轉(zhuǎn)換運(yùn)算符

只能作為成員函數(shù)重載:如果允許第一操作數(shù)不是同類對象,而是其

他數(shù)據(jù)類型,則只能作為非成員函數(shù)重載。

16.D

17.C

18.C解析:在賦值操作中,將發(fā)生對象的拷貝操作,但并不說明兩者是

完全一樣的.一般情況下,如果紿類定義了賦值操作符,則應(yīng)該同時定

義合適的拷貝構(gòu)造函數(shù),除非系統(tǒng)默認(rèn)生成的拷貝構(gòu)造函數(shù)滿足賦值操

作。實(shí)際上,系統(tǒng)默認(rèn)的拷貝構(gòu)造函數(shù)僅僅將數(shù)據(jù)成員進(jìn)行簡單的對應(yīng)

賦值,而在多數(shù)特殊應(yīng)用中,這么簡單的對應(yīng)關(guān)系是不適用的,這就需

要程序員重新定義拷貝構(gòu)造函數(shù)。

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

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

20.B

本題考查模板函數(shù)的應(yīng)用,表達(dá)式int(l.1)和int(4.2)足將1.1和

4.2強(qiáng)制轉(zhuǎn)換為整型。

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

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

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

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

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

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

\n

22.D

Do【解析】TestClass為TestClassl的基類,在主函數(shù)main中定義

TestClass對象b,*P。TestClassl對象d,P指向d,調(diào)用其show函

數(shù)。44TestClass(inti):TestClass(i+1),b⑴{”吾句中的TestClass基類

參數(shù)為2,所以show輸出2。

23.D解析:語句r=func(func(x,y),z);中,fun(x,y)是一次調(diào)用函數(shù),

它的值作為func另一次調(diào)用的實(shí)參。注意本題調(diào)用兩次函數(shù)。

24.無歧義性無歧義性解析:軟件需求規(guī)格說明書是需求分析階段的最

后成果,是軟件開發(fā)中的重要文檔之一。包括正確性、無歧義性、完整

性、可驗(yàn)證性、一致性、可理解性、可修改性和可追蹤性等。其中最重

要的特性是無歧義性,即需求規(guī)格說明書應(yīng)該是精確的、無二義的,需

求說明書越精確,則以后出現(xiàn)錯誤、混淆、反復(fù)的可能性越小。

25.降低復(fù)雜性降低復(fù)雜性解析:模塊化是指解決一個復(fù)雜問題時自頂

向下逐層把軟件系統(tǒng)劃分成若干模塊的過程,由此分解來降低復(fù)雜性。

26.20。20o解析:本題中,雖然Derived1和Derived?由于引入了虛

基類,使得它們分別對應(yīng)基類的不同副本。這時數(shù)據(jù)成員x只存在一份

拷貝,不論在類Derived1中修改,還是在類Derived2中修改,都是直

接對這惟一拷貝進(jìn)行操作。本題程序執(zhí)行語句“Derivedobi;”時,就會

先調(diào)用虛基類Base的構(gòu)造函數(shù),使得x=0,然后執(zhí)行類Derived1的構(gòu)

造函數(shù)使得x=10,再執(zhí)行類Derived2的構(gòu)造函數(shù),使得x=20。最后輸

出x的值為20。

27.132

28.friendclassB

29.tbtb解析:此題考查的是對象的定義。對象的定義格式如下:類名對

象名(參數(shù)表):所以題目中的也是對象名標(biāo)識符,而ta被定義成類MA

的指針,故空格處應(yīng)填tb。

30.多態(tài)性多態(tài)性解析:對象根據(jù)所接受的消息而做出動作,同樣的消

息被不同的對象接受時可導(dǎo)致完全不同的行為,該現(xiàn)象稱為多態(tài)性。

31.Ta[]intnTa[],intn解析:函數(shù)f的形參之一為T類型的數(shù)組a,形參

之二為整型數(shù)n。

32.n=10n=10解析:本題考核常成員數(shù)據(jù)的應(yīng)用。類Sample中,定義了

一個常數(shù)據(jù)成員n,所以構(gòu)造函數(shù)只能通過初始化列表來初始化它,

33.4545解析:節(jié)點(diǎn)的度——節(jié)點(diǎn)擁有子樹的個數(shù)。

樹中節(jié)點(diǎn)總數(shù)為:1*6+2*4+3*3+4*3+5*5+6*1=66與根節(jié)點(diǎn)之和,即

66+1=67

樹中非葉子節(jié)點(diǎn)數(shù)為6+4+3+3+5+1=22

樹中葉子節(jié)點(diǎn)數(shù)為:67-22=45

34.classBase:3classBase:3解析:題中基類和派生類中有同名函數(shù).但

是參數(shù)不同。有的考生可能判斷為重載.卻是錯誤的。重載僅發(fā)生在水

平方向,即同一類的成員函數(shù)或全局函數(shù)間。在垂直關(guān)系上,即派生關(guān)

系中,只有完全相同的函數(shù)類型、函數(shù)名和參數(shù)個數(shù),參數(shù)類型時,才

表現(xiàn)多態(tài)性。本題中參數(shù)不同,編譯器便認(rèn)為是兩個完全不同的函數(shù)。

通過基類的指針指向派生類對象時,該指針只能訪問到派生類中具有多

態(tài)性的成員函數(shù),而與基類無關(guān)的函數(shù)是無法通過基類指針來訪問的。

故系統(tǒng)強(qiáng)制轉(zhuǎn)化為整型,調(diào)用的是base類的func函數(shù)°如果將派生類

中的func的形參改為int型,則執(zhí)行的就會是派生類的func函數(shù),比時

表現(xiàn)為多態(tài)。

35.write

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

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

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

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

和作用域運(yùn)算符“::作用域運(yùn)算符用采表示某個成員屬于哪個類」吏

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

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

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

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

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

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

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

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

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

(3)應(yīng)改為巾]>=a&&str[i]v=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,所以修改為

uif(str[i]>=a&&str[i]>=z)5,o

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

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

(3)應(yīng)改為"outLput(s[i]);”。

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

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

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

中,輸入、輸出方式是在ios類中定義的,所以“outl.openC'l.txf,

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

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

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

“outl.put(s[i]);

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

(2)應(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ù),使程序終止運(yùn)行。即第2處

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

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

改為“catch(…)”。

40.⑴應(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處的叮Cobjl(l);:第2處處的

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

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

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

第3處=(2.$9m0^「(100);”語句中的T(2為類,并不是對象,這里

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

“obj2.SetNumber(lOO);"。

,,

41.(irvoidmaino

(2)“intm=0144;

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

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

進(jìn)制到八進(jìn)制,十進(jìn)制到十六進(jìn)制。主函數(shù)定義的定義形式為

“main”,函數(shù)名之后必須是一對括號,因此第1處應(yīng)改為“voidmain”。

cout輸出默認(rèn)是以十進(jìn)制方式輸出的,根據(jù)題目要求輸出的結(jié)果可發(fā)

現(xiàn)變量的初值不正確,十進(jìn)制的100對應(yīng)八進(jìn)制的144,卡進(jìn)制的37

對應(yīng)十六進(jìn)制的25,因此2和3應(yīng)分別改成“intm=0144;”,

“intn=0x25;”或“intn=0x25;

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

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

(3)44cout?c.n?endl;”應(yīng)改為"coutvvc->n?endl;"。

【解析】本題要在屏幕上輸出兩個字符,首先要靜態(tài)變量初始化,第1

處應(yīng)改為“staticintn;工第2處要給n賦值,第3處輸出時引用c的對

象,應(yīng)改為飛0出《0>0<<?11(11;''。

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

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

,,

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

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

函數(shù)getline函數(shù)讀入一行字符,格式為“cin.gelline(字符數(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(st巾]>=a)”語句是

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

但是小寫字符應(yīng)該是a到2,所以修改為-a&&str[i[4-z)”。

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

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

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

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

和作用域運(yùn)算符作用域運(yùn)算符用采表示某個成員屬于哪個

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

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

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

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

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

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

相同,并在前面加“?

溫馨提示

  • 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

提交評論