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

下載本文檔

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

文檔簡介

2023年吉林省白城市全國計算機等級考試

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

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

一、1.選擇題(10題)

I.在下列數(shù)據(jù)管理的各階段中,數(shù)據(jù)獨立性最高的階段是

A.手工管理B.文件系統(tǒng)C.數(shù)據(jù)項管理D.數(shù)據(jù)庫系統(tǒng)

2.下面關(guān)于運算符重載的描述錯誤的是

A.運算符重載不能改變操作數(shù)的個數(shù)、運算符的優(yōu)先級、運算符的結(jié)合

性和運算符的語法紜構(gòu)

B.不是所有的運算符都可以進行重載

C.運算符函數(shù)的調(diào)用必須使用關(guān)鍵字operator

D.在C++語言中不可通過運算符重載創(chuàng)造出新的運算符

3.軟件生命周期中所花費用最多的階段是()。

A.詳細設(shè)計B.軟件編碼C.軟件測試D.軟件維護

4.若有以下程序:

main()

{intk=2,i=2,m;

m=(k+=i*=k);

cout<<m<<"J<<i<<endl;

執(zhí)行后的輸出結(jié)果是

A.8,6B.8,3C.6,4D.7,4

5.采用面向?qū)ο蠹夹g(shù)開發(fā)的應(yīng)用系統(tǒng)的特點是()。

A.重用性更強B.運行速度更快C.占用存儲量小D.維護更復(fù)雜

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

分割的整體來處理?

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

7.下面程序的輸出結(jié)果是()。#include<iostream.h>Classexample{int

a;public:example(intB.{a=b++;}voidprint(){a=a+1cout<<a<<"";}

voidprint()const{cout<<a<;}};voidmain(){examplex(3);Const

exampley(2);x.print();

A.22B.43C.42D.32

8.語句cout<<setprecision(2)<<1024.4567;的輸出結(jié)果為

A.1024.4567B.1024C.1024.45D.le+003

9.表達式10>5&&6%3的值是

A.-lB.非零值C.OD.l

10.面向?qū)ο蟪绦蛟O(shè)計思想的主要特征中不包括

A.繼承性B.功能分解,逐步求精C.封裝性和信息隱藏D.多態(tài)性

二、單選題(13題)

11.有如卜程序:

#include<iostream>

usingnamespacestd;

classBasel

(

public:

Basel(intD.{cout?d;}

一Basel{}

};

classBase2

(

public:

Base2(intD.{tout?d;}

~Base2{}

};

classDerived:publicBasel,Base2

(

public:

Derived(inta,intb,intc,intD.:Basel(B.,Base2(A.,bl(D.

b2(C.{}

private:

intbl:

intb2:

);

intmain

(

Derivedd(1,2,3,4);

return0;

執(zhí)行這個程序的輸出結(jié)果是()oA.1234B.2134c.12D.21

12.下列關(guān)于運算符函數(shù)的敘述中,錯誤的是

A.運算符函數(shù)的名稱總是以operator為前綴

B.運算符函數(shù)的參數(shù)可以是對象

C.運算符函數(shù)只能定義為類的成員函數(shù)

D.在表達式中使用重載的運算符相當(dāng)于調(diào)用運算符重載函數(shù)

13.C++語言對C語言做了很多改進,C++語言相對于C語言的最根本的

變化是()

A.增加了一些新的運算符B.允許函數(shù)重載,并允許設(shè)置缺省參數(shù)C.規(guī)

定函數(shù)說明符必須用原型D.引進了類和對象的概念

14.有如下程序:

#nclude<iostream>

usingnamespacestd;

classMyClass{

public:MyClass(intx):val(x){}

voidSet(intx){Val=x;}

voidPrint()const{cout<<Mval="<<Vai<<*\t';}

private:intval;

};

intmain(){

constMyClassobj1(10);

MyClassobj2(20);

objl.Print();〃語句1

obj2.Print();〃語句2

objl.Set(20);〃語句3

obi2.Set(30);〃語句4

return0;

)

其主函數(shù)中錯誤的語句是()o

A.語句1B.語句2C.語句3D.語句4

6已知類A有公用數(shù)據(jù)成員a,并重載了二運算符,且有Aobj2;

constA*ptr=newA;,則下列語句錯誤的是()。

A.ptr->a=100;B.ptr=&obj2;C.ptr++;D.obj2=*ptr;

16.下列程序的執(zhí)行結(jié)果為()。

#include<iostream.h>

voidmain

(

inta=3,b=0;

int*P=&a;

b=+a++;

cout?*P?,7,?b?endl;

)

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

17.關(guān)于在調(diào)用模板函數(shù)時模板實參的使用,下列表述中正確的是()0

A.對于虛擬類型參數(shù)所對應(yīng)的模板實參,如果能從模板函數(shù)的實參中獲

得相同的信息,則君可以省略

B.對于虛擬類型參數(shù)所對應(yīng)的模板實參,如果它們是參數(shù)表中的最后的

若干個參數(shù),則都可以省略

C.對于虛擬類型參數(shù)所對應(yīng)的模板實參,若能夠省略則必須省略

D.對于常規(guī)參數(shù)所對應(yīng)的模板實參,任何情況下都不能省略

18.對于類定義

classA{

public:

voidfunc2{}

};

classB:publicA{public:

w)idfuncl|cout?HclassBfuncl”vvendl:}

virtualvoillfimc2{cout?"classBfunc2"?endl:}

};

下面正確的敘述是0。

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

19.下面程序的運行結(jié)果是()。

#include<iostream.h>

voidmain()

(

inti=l:

while(i<=8)

if(++i%3!=2)continue;

elsecout?i;

}

A.25B.36C.258D.369

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

A.派生類不能訪問基類的保護成員

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

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

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

21.己知有數(shù)組定義

chara[3][4];

下列表達式中錯誤的是

A.a⑵=“WIN”

B.strcpy(a[2],"WIN")

C.a[2][3]=W

D,a[0][1]=a[0][1]

22.有如下程序:

#include<iostream>

usingnamespacestd;

classVAC{public;

intf()const(return3;}

intf(){return5;}

):

Intmain(){

VACvl;constVACv2;

cout<<vl.f()<<v2.f();

return0:

}

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

A.53B.35C.55D.33

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

A.如果一個派生類公有繼承其基類,則該派生類對象可以訪問基類的保

護成員

B.派生類的成員函數(shù)可以訪問基類的所有成員

C.基類對象可以賦值給派生類對象

D.如果派生類沒有實現(xiàn)基類的一個純虛函數(shù),則該派生類是一個抽象類

三、2.填空題(12題)

24.軟件開發(fā)過程主要分為需求分析、設(shè)計、編碼與測試4個階段,其

中階段產(chǎn)生“軟件需求規(guī)格說明書

25.軟件生命周期包括8個階段。為了使各時期的任務(wù)更明確,又可分

為3個時期:軟件定義期、軟件開發(fā)期、軟件維護期。編碼和測試屬于

[]期。

26.有一種只在循環(huán)語句或switch語句中使用的流程控制語句,表示該

語句的關(guān)鍵字是______0

27.有以下程序:

#include<iostream>

usingnamespacestd;

classCFactorial

(

private:

intvalue;

intfact;

public:

CFactorial(intval);

voidCalculateFactorial();

voidDisplayO;

CFactorial::CFactorial(intval)

(

value=val;

fact=1;

)

voidCFactorial::CalculateFactorial()

(

inti=value;

while(i>1)

fact*=i—;

)

voidCFactorial::DisplayO

(

cout<<value<<”!="<<fact<<endl;

)

intmain()

(

CFactorialA(5);

A.CalculateFactorial();

A.DisplayO;

return0;

)

程序中,類CPactorial的功能是【】,該程序運行的結(jié)果是[】。

28.閱讀以下程序:

#include<iostream.h>

voidmain()

(

staticintalJ[3]={9,7,5,3,1,2,4,6,8};

inti,j,sl=Ots2=0;

for(i=0;i<3;i++)

for(j=0;j<3;j++)

(

if(i==j)sl=sl+a[i][j];

if(i+j==2)s2=s2+a[i][j];

)

cout<<s1<<'*,"<<s2<<endl;

I

則該程序的輸出結(jié)果為【】。

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

#defineMIN(a,b)(((a)<(b))?a:b)

#include<iostream.h>

voidmain()

(

intx=3,y=5;

cout<<MIN(x,y)<<end1;

}

30.有以下程序:

#include<iostream>

#include<string>

usingnameSpacestd;

classperson

(

intage;

Char*name;

public:

person(inti,Char*str)

(

intj;

j=strlen(str)+1;

name=newchar[j];

strcpy(name,str);

age=i;

)

?person()

(

deletename;

cout<<;

)

voiddisplayO

(

cout<<name<<'*:"<<age;

)

);

intmain()

(

persondemo(30,"Smith");

demo.displayO;

return0;

則該程序的輸出結(jié)果為:【】。

31.請將下列類定義補充完整。

classBase(public:voidfun(){cout<<HBase::fun"<<endl;}};

classDerived:publicBase

(

public:

voidfun()

(

______〃顯式調(diào)用基類的fun函數(shù)

cout<<"Derived::funH<<endl;

1

);

32.請在下列程序中的橫線處填寫正確的語句。

#include<iostream>

usingnamespacestd;

classBase{

public:

voidfun(){cout<<"Basefun"<<endl;}

);

classDerivde:publicBase{

public:

voidfun(){

______〃調(diào)用基類的函數(shù)fun()

cout<<"Derivedfun'*<<endl;

}

);

33.下列程序的輸出結(jié)果是

#include<iostream>

usingnamespacestd:

template<typenameT>

Tfun(Ta,Tb){return(a<=b)?a:b;}

intmain()

(

cout<<fun(3,6)<<4,'<<fun(3.14F,6.28F)<<endl;

return0;

}

34.如果表達式-x中的是重載的類運算符,采用運算符函數(shù)調(diào)用格

式,及表達式還可以表示為0

35.在C++語言的結(jié)構(gòu)化程序設(shè)計中,【】是程序的基本組成單元;在

C++語言的面向?qū)ο笤O(shè)計框架中,【】是程序的基本組成單元。

四、程序改錯題(10題)

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

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

為:

sizeof(S1)=5

sizeof(s2)=10

sizeof(s3)=l

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

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

(1)不能刪除assert()語句。

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

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

試題程序:

#include<iostream.h>

#include<assert.h>

voidmain()

chartsl=nabc":

/1

assert(sizeof(s1)==3):

cout?Hsizeof(s1)=5u?endl;

chars2llOJ=Mabn:

/小小小小年年?小prrcr不不不不不不予不

assert(sizeof(s2)==2);

cout?,,sizeof(s2)=10,'?endl;

chars3=23:

//

|/******汴*errr)r不不不不不不予不

assert(sizeof(s3)==4);

cout?Msizeof(s3)=1u?endl;

return;

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

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

Constructor,i=0,

Destructor

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

試題程序:

#include(iostream.h)

classTC

(

inti;

public:

TC;

voiddisplay;

~TC;

TC:TC

cout?',Constructor',?n,

i=0;

)

//

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

TC:display

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

/汴汴汴不不不prmr不不不不不不

TC:TC

COUI?"Destructof'?endl:

}

voidmain

TCa;

a.display;

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

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

Constructor,i=0,

Destructor

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

可。

試題程序:

#include(iostream.h)

classTC

inti;

public:

TC;

voiddisplay;

?TC;

);

!?*??*?

//****^**不**

TC:TC

(

cout?',Constructorn?n,";

i=0;

)

//?1?^1*?S??1??1??1**&**&*

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

TC:display

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

!!******e[Tor******

TC:TC

(

COUI?',Destructor,'?endl:

)

voidmain

(

TCa;

a.display;

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

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

number=l

number=10

number=100

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

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

試題程序:

#include<iostream.h>

classTC

(

public:

TC(inti)

(

number=i;

)

voidSetNumber(intmi

(

number=m;

}

intGetNumberconst

(

returnnumber;

)

voidPrintconst

(

cout?Hnumber="?number?endl;

)

private:

intnumber;

);

voidmain

/

/f不*T*不*T**?*小*T*小m*/**^1**^不不小小不不不

TCobjl;

objl.Print;

TCobj2⑶;

/-X*

//********errcr不不不不不卻亭予

objl.number=10;

II********error*%o******

TC.SetNumber(lOO);

objl.Print;

obj2.Print;

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

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

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

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

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

!!******error******白勺卜山^。

試題程序:

#include<iostream>

#include<fstream>

/1

usingstd;

voidWriteFile(char*s)

ofstreamout1;

f*1**1**!**1**4**£?*£**£**4?

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

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

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

(

l*1**1**1**1**1**1**1**1**4*?£**4*

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

outl.puts(s[i]);

)

outl.close;

}

voidClearFile

(

ofstreamout1;

outl.open("l.txt");

outl.close;

}

intmain

(

chars[1024];

ClearFile;

cout?"pleaseinputastrin9:u?endl;

cin.getline(s,1024);

WriteFile(s);

returnO;

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

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

確。

程序輸出:

8

8

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

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

試題程序:

#include(iostream.h>

classCO

public:

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

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

staticintn=O:

CO

n++:

?CO

):

?^/

/********e]Tcr不不不不不不不不/

intCO:;n;

voidmain

COobj;

COobj2[7J;

CO*C=NULL:

c=&obj:

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

eout?C.n?endl;

cout?C0::n?endl;

}

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

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

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

到屏幕中。

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

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

試題程序:

#include<iostream.h>

voidmain

(

inti=O;

charstr[120J;

cout?HEntcrastringcndwith?."?cndl;

/*1**2**1*?<>*1**1**2**2**2*

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

cin.getline(str,120);

1*1**1**1*?*?????*?

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

while(str)

/?,?*t??[??,??,??£??1?*X**X**X**£??£??£?

//小小小小小小小小error不<**><?<**><**>

if(str|jD二a)

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

i++;

}

cout?str?endl;

return;

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

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

number=l

number=10

number=100

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

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

試題程序:

#include<iostream.h>

classTC

public:

TC(inti)

number=i;

voidSetNumber(intmi

(

number=m;

}

intGetNumberconst

(

returnnumber;

)

voidPrintconst

(

cout?"number=H?number?endl;

)

private:

intnumber;

voidmain

TCobjl;

objl.Print;

TCobj2(3);

//

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

objl.number=10;

II********error*%o******

TC.SetNumber(lOO);

objl.Print;

obj2.Print;

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

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

9,8,7,6,5

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

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

試題程序:

#include(iostream.h>

classTC

Ii

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

TC(inti)

m_i=i;

)

voidprint

cout?—m_i?,

)

public:

intm_i;

intmain

l^1*^1*__?!?/

/不不不不不不不不error不不不不予不不苓/

inti;

TC04(10);

while(i>5)

!***************!

i++

04.print;

)

cout?endl;

returnO;

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

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

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

程序異常,輸出信息為

error

O

ERROR

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

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

試題程序:

#include<iostream.h)

intmain

(

try

throw(nerror");

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

catch(chars)

(

cout?s?endl;

try

(

throw((int)0);

)

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

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

catch

(

cout?i?endl;

)

try

(

throw(O);

throwC^rror");

/*t?*t?*t?*t?*t?*1*-L■>■的■的一^

//年小不小不小小小prrcr不不早亭不壽壽壽

catch

(

cout?MERROR"?endl;

}

returnO;

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

46.(1)應(yīng)添加“virtualvoidGetNamt!=0;"。

(2)應(yīng)添力CTconstchar*GetName2”。

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

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

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

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

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

4t,5

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

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

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

44,,

constchar*GetName2o第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[i]=0;?。

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

People包括姓名和年齡兩個字段。函數(shù)fun獲得年齡比較大的人的姓

名,然后輸出這個姓名到屏幕。

其中定義的類并不完整,按要求完成下列操作,將類的定義補充完

整。

⑴完成類的構(gòu)造函數(shù)功能,請在注釋1后添加適當(dāng)?shù)恼Z句。

⑵完成構(gòu)造函數(shù)對姓名的賦值,請在注釋2后添加適當(dāng)?shù)恼Z句。

⑶定義類的友元函數(shù)fun,請在注釋3后添加適當(dāng)?shù)恼Z句。

(4)補充函數(shù)fun的年齡比較功能,請在注釋4后添加適當(dāng)?shù)恼Z句。

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

他的程序代碼。

試題程序:

#include<iostream.h>

classPeople

(

public:

/fat*

/fI?Y??Yw?T??T?

(

inti;

for(i=0:sUserName[i]!=O:i++)

{m_UserName[i]=sUserName[i];

f*1**1**1**1**1*?1**1**1**1*

/f*T**7*f*T**T**T**T*

m_Old=nOld;

)

private:

charm_UserNamef32];

intm_01d;

/7,*2**2^*2**2*

/f?卜?卜?卜?[??[??[??[??卜4?卜,卜,;、q、;、(、,j、

};

voidfun(char*s,People&personl,People&person2

/I********4********

if

for(inti=0;person!.m_UserName[i]!=0;i+

+)

s[i]=personl.m_UserName[i];

s[i+l]=0;

)

else

for(inti=0;person?.m_UserName[i]!=0;i+

+)

{s[il=person2.m_UserName[i];

s[i+l]=0;

)

)

)

voidmain

(

chars[32];

PeopleplC'abc1',20);

Peoplep2(ndef,,30):

fun(S,pl,p2);

cout?s?endl:

return;

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

48.使用VC6打開考生文件夾下的工程testl6_3,此工程

⑴定義類Cat的保護數(shù)據(jù)成員itsAge用于表示年齡,它是int型的數(shù)

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

⑵定義類Cat的保護數(shù)據(jù)成員GetAgeO的類外定義,返回成員的itsAge

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

⑶完成成員函數(shù)SetAge(intage)的類外定義,把數(shù)據(jù)成員itsAge賦值為

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

(4)完成成員函數(shù)Meow的類外定義,使其輸出字節(jié)符串“meow.”到屏幕

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

輸出結(jié)果如下:

meow.

kittyisacatwhois5yearsold.

meow.

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

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

#include<iostream.h>

classCat

public:

intGetAge();

voidSetAge(intage);

voidMeow();

protected:

〃**]**

};

intCat::GetAge()

(

)

voidCat::SetAge(intage)

(

)

voidCat::Meow()

(

)

voidmain()

(

Catkitty;

kitty.Meow();

kitty.SetAge(5);

cout<<"kittyisacatwhois

cout<<kitty.GetAge();

cout<<*'yearsold.Vn";

kitty.Meow();

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

序文件test4_3.cpp,其對一個學(xué)校的教師和考生情況進行了描述。由于

教師和考生之間有相同的信息,如姓名、年齡等,所以可抽象出一個基

類person,考生類student和教師類teacher作為person類的派生類。請

按要求完成下列操作,將程序中的類定義補充完整。

⑴定義基類person的私有數(shù)據(jù)成員name和age,分別用于表示姓名和

年齡,name為字符指針,age為血型的數(shù)據(jù)。請在注釋“〃**1**?之后添

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

(2)完成基類person的重載構(gòu)造函數(shù)person(char*minta)的定義,把數(shù)據(jù)

成員name,age分別初始化為參數(shù)n,a的值,請在注釋“//**2**”之后

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

⑶根據(jù)主函數(shù)main中對si的聲明,定義派生類student的構(gòu)造函數(shù)。

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

(4)完成派生類teacher成員函數(shù)voidsetinf(ehar*n,inta,char*d,char*1)

的定義,其功能為記錄教師的姓名、年齡、院,系與職稱信息。請在注

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

輸出結(jié)果如下:

劉雷(45)destruclor

蔣軍(23)destructor

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

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

#include<iostream.h>

classperson

(

〃**]**

public:

person(){}

person(char*n,inta)

(

〃**2**

voidsetname(char*n){name=n;)

voidsetage(inta){age=a;}

?person。{cout<<name<<"(u<<age<<")destructor'^<<endl;)

);

classstudent:publicperson

(

char*department;

intcode;

public:

(

department^;

code=c;

}

};

classteacher:publicperson

(

char*department;

char*level;

public:

teacher(){}

voidsetinf(char*n,inta,char*d,char*1)

(

department=d;

level=l;

)

);

voidmain()

(

students1("蔣軍二23,”計算機學(xué)院二2);

teachertl;

tl.setinf(“劉雷",45,”計算機學(xué)院”,”教授)

參考答案

1.D解析:顯然,在數(shù)據(jù)庫系統(tǒng)階段,數(shù)據(jù)獨立性最高。

2.C解析:例如“="運算符就不能被重載,通過重載可以創(chuàng)造新的運

算方式,但是不能臆造新的運算符;定義的時候必須使用關(guān)鍵宇operator,

而調(diào)用時可直接使用運算符;

3.D解析:軟件生命周期分為軟件定義、軟件開發(fā)及軟件運行維護3個

階段。本題中,詳細設(shè)計、軟件編碼和軟件測試都屬于軟什開發(fā)階段;

維護是軟件生命周期的最后一個階段,也是持續(xù)時間最長,花費代價

最大的一個階段.軟件工程學(xué)的一個目的就是提高軟件的可維護性,降

低維護的代價。

4.C解析:首先進行括號內(nèi)的運算,注意賦值表達式是從右向左進行的。

i=l*k,k=k+i,m=k,所以計算得m=6,i=4o

5.A解析:使用面向?qū)ο蠓椒ㄩ_發(fā)的應(yīng)用系統(tǒng),強調(diào)封裝和復(fù)用。封裝

隱藏信息,使得被封裝的模塊與外界的耦合度更低,更容易重用。軟件

復(fù)用是將已有的軟件成分用于構(gòu)造新的軟件系統(tǒng)??梢员粡?fù)用的軟件成

分一般稱作可復(fù)用構(gòu)件,無論對可復(fù)用構(gòu)件原封不動地使用還是作適當(dāng)

的修改后再使用,只要是用來構(gòu)造新軟件,則都可稱作復(fù)用。面向?qū)ο?/p>

方法之所以特別有利于軟件復(fù)用,是由于它的主要概念及原則與軟件復(fù)

用的要求十分吻合。面向?qū)ο蠓椒◤拿嫦驅(qū)ο蟮木幊贪l(fā)展到面向?qū)ο蟮?/p>

分析與設(shè)計,使這種方法支持軟件復(fù)用的固有特征能夠從軟件生命周期

的前期階段開始發(fā)揮作用,從而使OO方法對軟件復(fù)用的支持達到了較

高的級別。與其他軟件工程方法相比,面向?qū)ο蠓椒ǖ囊粋€重要優(yōu)點是,

它可以在整個軟件生命周期達到概念、原則、術(shù)語及表示法的高度一致。

這種一致性使得各個系統(tǒng)成分盡管在不同的開發(fā)與演化階段有不同的

形態(tài),但可具有貫穿整個軟件生命周期的良好映射。這一優(yōu)點使OO方

法不但能在各個級別支持軟件復(fù)用,而且能對各個級別的復(fù)用形成統(tǒng)一

的、高效的支持,達到良好的全局效果。綜上所述,選項A為本題正確

答案。

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

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

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

7.C解析:“++”是石結(jié)合的,所以先賦值為3,最后輸出3+1;常成員

函數(shù)只有常對象才能調(diào)用,所以輸出2。

8.D解析:setprecision()函數(shù)為設(shè)置小數(shù)位數(shù)。注意:C++中I/O流各種

函數(shù)的使用例如:setw(),setfill()o

9.C

10.B解析:C++是一種面向?qū)ο蟮某绦蛟O(shè)計語言它充分支持面向?qū)?/p>

象思想中的3個主要特征:封裝性、繼承性、多態(tài)性。B選項所描述是

結(jié)構(gòu)化程序設(shè)計的思想。

11.D

本題考查派生類的構(gòu)造函數(shù)和析構(gòu)函數(shù),在定義一個派生類的對象

時,先調(diào)用基類的構(gòu)造函數(shù),然后再執(zhí)行派生類的構(gòu)造函數(shù),對象釋

放時,先執(zhí)行派生類的析構(gòu)函數(shù),再執(zhí)行基類的析構(gòu)函數(shù)。本題中定

義一個派生類對象時,分別調(diào)用基類的構(gòu)造函數(shù),所以分別輸出21。

12.C解析:運算符函數(shù)可以重載為成員函數(shù)也可以重載為非成員函數(shù),

如重載為友元函數(shù)。

13.D

14.C

解析:此題考查的是常對象。使用const關(guān)鍵字修飾的對象稱為常對

象,它不能被更新。主函數(shù)中聲明的objl是常對象,因此。bjl不能被

更新,即語句3更新。均1的語句錯誤。

15.A

Ao【解析】本題考查const修飾符的作用。注意,const位置不同,其

修飾的部分也是不同的。本題中const修飾的是ptr所指的對象本身,

所以,ptr可以重新指向新的對象,而ptr->a則無法被更新。

16.B

*P為所指對象a的值,語句“b=+a++;”等價于"b=b+a;a=a+l;

17.D

在調(diào)用一個模板函數(shù)時,編譯系統(tǒng)需要足夠的信息來判別每個虛擬類

型參數(shù)所對應(yīng)的實際類型,可以從兩個不同的渠道獲得這樣的信息:

從模板實參表(用“V〉”括起來的參數(shù)表)或從模板函數(shù)實參表(用括起

來的參數(shù)表)。如果從后者獲得的信息已經(jīng)能夠判定其中部分或全部虛

擬類型參數(shù)所對應(yīng)的實際參數(shù),而且它們又正好是參數(shù)表中最后的若

干參數(shù),則模板實參表中的那幾個參數(shù)可以省略。如果模板實參表中

的實參都被省略了,則空表也可以不要,因此選項D錯誤。反

之,對于某個模板實參,如果從模板函數(shù)的實參表中無法獲得同樣的

信息,就不能省略;或者雖然能夠獲得同樣的信息,但在它后面還有

其他不能省略的實參,則其自身還是不能省略。

18.C

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

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

函數(shù)。

19.C

Co【解析】應(yīng)該先做++運算,然后進行%運算,最后比較不等式,

實際上最后輸出的結(jié)果就是被3除,余數(shù)為2的不大于8的數(shù)。

20.C

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

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

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

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

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

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

21.A

22.A

Ao本題考查常成員函數(shù)的應(yīng)用。VAC類中說明了兩個函數(shù),一個是

常成員函數(shù),一個是普通函數(shù);在主函數(shù)中說明了兩個對象,通過普

通對象vl調(diào)用的是普通函數(shù),輸出5;通過常對象V2調(diào)用的是常成員

函數(shù),輸出3。

23.D

私有繼承方式為基類的公用成員和保護成員在派生類中成了私有成

員,其私有成員仍為基類私有,但派生類對象可以訪問基類的保護成

員,所以基類對象不能賦值給派生類對象。抽象類是指含有純虛擬函

數(shù)的類,所以選項D正確。

24.需求分析需求分析解析:需求分析階段的工作主要包括需求獲取、

需求分析、編寫需求規(guī)格說明書和需求評審4個方面,產(chǎn)生的主要文檔

為軟件需求規(guī)格說明書,它可以為用戶、分析人員和設(shè)計人員之間的交

流提供方便,直接支持目標(biāo)軟件系統(tǒng)的確認(rèn),也可作為控制軟件開發(fā)進

程的依據(jù)。

25.軟件開發(fā)軟件開發(fā)

26.break

27.求自然數(shù)的階乘120求自然數(shù)的階乘\r\nl20解析:類CFactorial中

的成員函數(shù)CalculateFactorial。實現(xiàn)的功能是:求自然數(shù)value的階乘結(jié)

果。

28.1810

29.3

3O.Smith:30DSmith:30D解析:本題考核類與對象的操作。主函數(shù)中

定義類person的對象demo,并賦初值(30,'smith)。然后調(diào)用成員函數(shù)

display。輸出賦值結(jié)果,即Smitch:30o程序結(jié)束時dem。對象的析構(gòu)函

數(shù)被調(diào)用,再輸出“D”。

31.Base::fun();Base::fun();解析:此題考查的是成員函數(shù)的調(diào)用。因為橫

線處的作用是調(diào)用基類的fun函數(shù),又因為派生類中也有fun()函數(shù).所

以必須對fun()函數(shù)加以限定,即Base::fun();。

32.Base::fun()Base::fun()解析此題考查的是派生類對基類成員的訪問。

本題中派生類Derived覆蓋了基類Base中的fun(),如果需要調(diào)用基類

中的fun(),則需要使用域運算符故應(yīng)滇寫B(tài)ase::fun()。

33.33.14。3,3.140解析:C++編譯系統(tǒng)將根據(jù)實參表中的實參的類型

來確定函數(shù)的形參歹J表中的類型。函數(shù)fun(3,6)返回的值為3,函數(shù)調(diào)

用fun(3.14F,6.28F)返回的值為3.14。

34.x.operator-()

35.函數(shù)類函數(shù)\r\n類解析:函數(shù)是程序功能實現(xiàn)的主要方式,是實現(xiàn)

結(jié)構(gòu)化設(shè)計(將程序分成若干個函數(shù)實現(xiàn))的基本組成;類是一種用戶定

義的類型,是實現(xiàn)數(shù)據(jù)封裝和數(shù)據(jù)抽象的工具,是面向?qū)ο笤O(shè)計中的基

本組成。

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

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

\n(3)應(yīng)改為"asseit(sizeoRs3)=l);

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

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

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

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

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

str2[10]說明,str2的空間為10,在第2處修改為“assert(sizeoRs2)—10)廠。

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

uassert(sizeof(s3)=1);

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

\n(2)應(yīng)改為"oidTC::display”。

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

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

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

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

TC”,默認(rèn)構(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”。

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

(2)應(yīng)改為"voidTC::display”。

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

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

和作用域運算符作用域運算符用采表示某個成員屬于哪個

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

為“TC::TC”,默認(rèn)構(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”。

39.(1)應(yīng)改為"TCobjl⑴;:

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

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

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

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

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

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

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

中,輸入、輸出方式是在ios類中定義的,所以open(nl.txtM,

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

“outl.open("l.txt",ios::binaryIios::叩p);第3個標(biāo)識應(yīng)

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

“outl.put(s[i]);

41.(l)"staticintn=O"應(yīng)改為"staticintn;"。

(2)uintCO::n:”應(yīng)改為"intCO::n=0:

(3)44cout?c.nvvendl;”應(yīng)改^44cout?c->n?endl;''。

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

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

象,應(yīng)改為"cout〈vc->n<<endl;

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

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

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

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

函數(shù)gelline函數(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)?語句是判斷字符st幣]是否為小寫字符,而現(xiàn)有的語句只

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

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

43.(1)應(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處的叮Cobjl(l);工第2處處的

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

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

4t55

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

第3處與(2.$611%1^「(100);"語句中的“2為類,并不是對象,這里

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

uobj2.SetNumber(lOO);"。

44.(1)應(yīng)添加“public:?。

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

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

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

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

的對象被訪問。故應(yīng)在構(gòu)造函數(shù)前添加“public:“,否則該類無法被實例

化。變量的初始化可以通過“=''號,也可以和初始化對象一樣添加構(gòu)造

參數(shù),題目已要求使用后者。本題要求輸出5個數(shù),while的循環(huán)變量i

每次減1,在i>5時循環(huán),故i初始化應(yīng)為10o若循環(huán)中i每次增1,則

循環(huán)永遠不會退出。

45.(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)的異常捕捉語句c

溫馨提示

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

最新文檔

評論

0/150

提交評論