2023年山西省忻州市全国计算机等级考试C语言程序设计真题(含答案)_第1页
2023年山西省忻州市全国计算机等级考试C语言程序设计真题(含答案)_第2页
2023年山西省忻州市全国计算机等级考试C语言程序设计真题(含答案)_第3页
2023年山西省忻州市全国计算机等级考试C语言程序设计真题(含答案)_第4页
2023年山西省忻州市全国计算机等级考试C语言程序设计真题(含答案)_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2023年山西省忻州市全国计算机等级考试

C++语言程序设计真题(含答案)

学校:班级:姓名:考号:

一、1.选择题(10题)

1.执行下列语句后,输出结果为Steven的是

char*str="steven";

eout.write(str,);

A.strlen(str)B.sizeof(str)C.strlen(str+1)D.sizeof(str-1)

2.要实现多态性,派生类中的虚函数必须()。

A.函数名、参数及返回值必须与基类中对应的虚函数完全相同

B.参数个数不必与基类中对应的虚函数的函数名完全相同

C.参数类型不必与基类中对应的虚函数的函数名完全相同

D.返回值类型不必与基类中对应的虚函数的函数名完全相同

3.关于类和对象不正确的说法是()

A.类是一种类型,它封装了数据和操作B.对象是类的实例C.一个类的

对象只有一个D.一个对象必属于某个类

4.以下for语句中不是死循环的是

A.for(inti=0;i<l;++i);

B.for(inti=0;;++i);

C.for(inti=l;i>0;++i);

D.for(;;);

5.有如下程序

main()

{intn=9;

while(n>6){n--;cout<<n<<endl;)

}

该程序段的输出结果是

A.987B.876C.8765D.9876

6.下列关于虚函数的描述中,正确的是0。

A.虚函数是一个static类型的成员函数

B.虚函数是一个非成员函数

C.基类中采用virtual说明一个虚函数后,派生类中定义相同原型的函数

时可不必加virtual说明

D.派生类中的虚函数与基类中相同原型的虚函数具有不同的参数个数

或类型

7.字面常量42、4.2、42L的数据类型分别是

A.long、doublexint

B.long、floatxint

C.int、doublexlong

D.ini、floatslong

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

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

<5;i++)a+=fun();cout<<a<<endl;return0;}程序运行后,输出的结

果是()。

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

9.有如下语句序列:intk=0:do{k+=5;cout<<'$';}while(k<19);

while(k->0)cout<<田;执行上面的语句序列输出字符“$”和"*”的个

数分别是()。

A.4和20B.5和20C.4和21D.5和21

10.对以下说明语句的正确理解是inta[10]={6,7,8,9,10};

A.将5个初值依次赋给a[l]至a[5]

B.将5个初值依次赋给a[0]至a[41

C.将5个初值依次赋给a[6]至a[101

D.因为数组长度与初值的个数不相同,所以此语句不正确

二、单选题(13题)

H.只能作为成员函数重载的是

A.=B.++C.*D.new

12.如有以下程序:

#include(iostream>

usingnamespacestd;

longfun(intn)

if(n)2)

return(fun(n-l)+fun(n-2));

else

return2;

)

intmain()

(

cout«fun(3)«endl;

returnO;

)

则该程序的输出结果应该是()。

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

13.下列运算符中不能在C++中重载的是:)。

A.?:B.+C.-D.<=

14.已知类MyClass的定义如下:

ClassMyClass{

public:

MyClass(intd){data=d;}

〜MyClass(){}

private:

intdata;

1;

下列对MyClass类对象数组的定义和初始化语句中,正确的是

()O

A.MyCIassarray[2];

B.MyClassarrayl2J={MyClass(5));

C.MyClassarray[2]={MyClass(5),Myclass(6)};

D.MyClass*array=newMyClass[2];

15.下面程序的运行结果为()。#include<iostream.h>voidswap(int

&a,intb){inttemp;temp=a++;a=b:b=temp:}voidmain()

{inta=2,b=3;swap(a,b);cout<<a<<","<<b<<endl;)

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

16.关于关键字class和typename,下列表述中正确的是

A.程序中的typename都可以替换为class

B.程序中的class都可以替换为typename

C.在模板形参表中只能用typename来声明参数的类型

D.在模板形参表中只能用class或typename来声明参数的类型

17.下列叙述中正确的是()。

A.C程序中的注释只能出现在程序的开始位置和语句的后面

B.C程序书写格式严格,要求一行内只能写一个语句

C.C程序书写格式自由,一个语句可以写在多行上

D.用C语言编写的程序只能放在一个程序文件中

18.某系统总体结构如下图所示:

统总体结构图的深度是()。

A.7B.6C.3D.2

19.若执行下面的程序时,从键盘上输入3和4,则输出结果是main(){int

a,b,s;cin>>a>>b;s=a;if(a<B)s=b:s=s*s;cout<<s<<

endl;}

A.14B.16C.18D.20

20.在模块化程序设计中,按功能划分模块为原则是

A.各模块的功能尽量单一,且各模块之间的联系尽量的少

B.各模块的功能尽量单一,且各模块之间的联系尽量紧密

C.各模块应包括尽量多的功能

D.各模块应包括尽量多的输入输出操作

21.计算斐波那契数列第n项的函数定义如下:

intfib(intn){

if(n==0)return1;

elseif(n==1)return2;

elsereturnfib(n-l)+ilb(n-2);

若执行函数调用表达式fib(2),函数fib被调用的次数是

A.lB.2C.3D.4

22.派生类的成员函数不能访问基类的()。

A.公有成员和保护成员B.公有成员C.私有成员D.保护成员

23.结构化程序设计主要强调的是()。

A.程序的规模B.程序的效率C.程序设计语言的先进性D.程序易读性

三、2.填空题(12题)

24.如果一个模板声明时有类型形参表,则多个参数之间必须使用

隔开,每个参数都必须重复使用关键字o

25.若有以下程序:

#include<iostream>

usingnamespacestd;

intf(intx,inty)

(

return(y-x)*x;

)

intmain()

(

inta=3,b=4,c=5,d;

d=f(f(a,b),f(a,c));

cout<<d<<<endl;

return0;

)

执行后的输出结果是【】。

26.有如下程序:

#include<iostream>

usingnamespacestd;

classCon

(

charID;

public:

Con():ID('A'){cout<<1;}

Con(charID):ID(ID){cout<<2;}

Con(Con&C):ID(c.getlD()){cout<<3;}

chargetID()const{returnID;}

);

voidshow(ConC){cout<<c.getID();}

intmain()

(

Concl;

show(cl);

Conc2('B');

show(c2);

return0;

}

执行上面程序,输出是______o

27.C++中封装性、继承性和【】是面向对象思想的主要特征。

28.关系操作的特点是【】操作。

29.在面面对泵方法中,一个对象请求另一对象为其服务的方式是通过

发送【】实现。

30.根据三角形的基本定理完成填空,则表达式应为o

#include<iostream.h>

#include<math.h>

voidmain()

(

doublea,b,e,s,area;

cout<<”请输入三角形三边a,b,e,n<<endl;

cin>>a>>b>>c;

if()

(

s=(a+b+c)/2;

area=sqrt(s*(s-a)*(s-b)*(s-c));

cout<<”三角形的面积为:"<<area;

)

else

cout<<"不能构成三角形!”<<endl;

)

31.在程序设计阶段应该采取和逐步求精的方法,把一个模块的

功能逐步分解,细化为一系列具体的步骤,继而用某种程序设计语言写

成程序。

32.排序是计算机程序设计中的一种重要操作,常见的排序方法有插入

排序、【】和选择排序等。

33.若要在C盘根目录下作为二进制文件打开文件test.dat,则应该用

的语句是【】。

34.有如下关系:学生(学号,姓名,性别,专业号,年龄),将属性年龄

的取值范围定义在0-120之间符合【】。

35.数据库保护分为安全性控制、【】、并发性控制和数据的恢复。

四、程序改错题(10题)

36.使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序

运行时有错。请改正程序中的错误,使程序输出的结果为

100

37

32

注意:错误的语句在//******error******的下面,修改该语句即

可。

试题程序:

#include<iostream.h>

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

voidmain

//******prmr亭亭亭亭亭亭

intm=0142:

/年不小小不小error年亭亭不寿不

intn=0X27:

intq=32;

cout<<m<<endl;

cout<<n<<endl;

cout<<q<<endl;

return;

37.使用VC++6.0打开考生文件夹下的源程序文件

1.cpp,该程序运行时有错误,请改正程序中的错误。本程序要求实现

的功能为从键盘输入一个字符串,并将结果保存到文件1.txt中。

注意:不要改动main函数,不能增加或删除行,也不能更改程序的结

构,错误的语句在

II******error******的下面o

试题程序:

#include<iostream>

#include<fstream>

usingstd;

voidWriteFile(char*s)

ofstreamoutI;

不不不不不不不不error不不不不不不不不

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

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

outl.puts(s[i]);

outl.close;

voidClearFile

(

ofstrcamoutl;

outl.open("l.txt");

outl.close;

)

intmain

(

chars[1024J;

ClearFile;

cout«"pleaseinputastrin9:,"«endl;

cin.getline(s,1024);

WriteFile(s);

returnO;

)

38.使用VC++6.0打开考生文件夹下的源程序文件1.cppo本程序要

求输入一个字符串,然后将其中的小写字母改成大写字母,字符可能输

入多行,当输入字符时,默认字符输入结束,最后把结果输出到屏幕

中。

注意:不要改动main函数,不能增加或删除行,也不能更改程序的结

构,错误的语句在//******error******的下面。

试题程序:

#include<iostream.h>

voidmain

inti=O;

charstr[120];

cout«HEnterastringendwith?."«endl;

cin.gctline(str,120);

//

//不不不不不不不不prmr不不不不不不不不

while(str)

if(str[i])=a)

str[ij=str[ij-a+A;

i++;

cout«str«endl;

return;

39.使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运

行时有错误,请改正程序中的错误,使得程序输出:

9,8,7,6,5

注意:错误的语句在/********error********/的下面,修改该语句即

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

试题程序:

#include(iostream.h>

classTC

/人&&&&R虫女虫虫虫女

/小小小小小小小小prrcr不不不不个干个不

TC(inti)

(

m_i=i;

)

voidprint

(

cout«—m_i«,;

)

public:

intm_i;

intmain

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

inti;

TC04(10);

while(i>5)

I********errOr********/

i++

04.print;

)

cout«endl;

returnO;

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

1.cpp,该程序运行时有错误,请改正程序中的错误。本程序要求实

现的功能为从键盘输入一个字符串,并将结果保存到文件1.txt中。

注意:不要改动main函数,不能增加或删除行,也不能更改程序的结

构,错误的语句在

//******errcr******的下面门

试题程序:

#include<iostream>

#include<fstream>

/*&•

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

usingstd;

voidWriteFile(char*s)

ofstreamoutl;

/*1**)«

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

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

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

/

//*****汴*汴error不不予不不不不不

outI.puts(s[ij);

outl.close;

)

voidClearFile

ofstreamout1;

outl.open(nl.txt");

outl.close;

)

intmain

(

chars[1024];

ClearFile;

cout«Mpleaseinputastrin9:u«endl;

cin.getline(s,1024);

WriteFile(s);

returnO;

)

41.使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序

运行时有错,请改正其中的错误,使程序正常运行,输出的结果为

Constructor,i=0,

Destructor

注意:错误的语句在//******error******的下面,修改该语句即

可。

试题程序:

#include(iostream.h)

classTC

(

inti;

public:

TC;

voiddisplay;

〜TC;

};

■L■的-的kl«*1*

个个个个个个errcr个个个不个不

TC:TC

(

cout«',Constructor',«M,";

i=0;

)

/****汴汴prrcr'」不

TC:display

(

tout«"i=',«i«n,"«endl;

)

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

TC:TC

(

COUI«"Destructor"«endl:

)

voidmain

(

TCa;

a.display;

)

42.使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序

运行有问题,请改正main函数中的错误,使程序的输出结果为:

number=l

number=10

number=100

注意:不要改动main函数,不能增加或删除行。也彳、能更改程序的结

构,错误的语句在//******error******的下面。

试题程序:

#include<iostream.h>

classTC

(

public:

TC(inti)

(

number二i;

)

voidSetNumber(intmi

(

number二m;

)

intGetNumberconst

(

returnnumber;

}

voidPrintconst

(

cout«Hnumber="«number«endl;

}

private:

intnumber;

);

voidmain

/AM•1«•)«**«**«**«•〜

//不不不不不不不不户rrcr不干不不不不不不

TCobjl;

objl.Print;

TCobj2(3);

/^1>^1*«2««i*«2««£««£««£««2««£«

//不不不不不不不不「rmr不不予不干不不不

objl.number=10;

II********crror*%o******

TC.SetNumber(100);

objl.Print;

obj2.Print;

43.使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运

行有问题,请改正main函数中的错误,使程序的输出结果为:

number=l

number=10

number=100

注意:不要改动main函数,不能增加或删除行。也不能更改程序的结

构,错误的语句在//******error******的下面。

试题程序:

#include<iostream.h>

classTC

public:

TC(inti)

number=i;

}

voidSetNumber(intm)

(

number=m;

)

intGetNumberconst

(

returnnumber;

}

voidPrintconst

(

cout«"number="«number«endl;

1

private:

intnumber;

);

voidmain

(

//

//****举不萃*PITCT*不•・••・••・••・••・、•・•

TCobjl;

objl.Print;

TCobj2⑶;

//*>1**>1**>1•

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

objl.number=10;

*不不不不墨不平orrcr亭不卒卒卒卒不

TC.SetNumber(IOO);

objl.Print;

obj2.Print;

)

44.使用VC++6.0打开考生文件夹下的源程序文件1.cpp。本程序

要求输入一个字符串,然后将其中的小写字母改成大写字母,字符可

能输入多行,当输入字符"?''时,默认字符输入结束,最后把结果输出

到屏幕中。

注意:不要改动main函数,不能增加或删除行,也不能更改程序的结

构,错误的语句在//******errc>r******的下面。

试题程序:

#include<iostream.h>

voidmain

inti=O;

charstr[120];

cout«nEnterastringendwith?."«endl;

/

//年不不不不小不小error于不寿寿寿寿不不

cin.getline(str,120);

/*1**1•«1•«1•«1•«>1•

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

while(str)

/•!*

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

if(str[i])=a)

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

i++;

)

cout«str«endl;

return;

)

45.使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序

运行时有错误,请改正错误,使程序正常运行,并且要求最后一个

catch必须抛出执行的任何异常。

程序异常,输出信息为

error

0

ERROR

注意:不要改动main函数,不能增加或删除行,也不能更改程序的结

构,错误的语句在//******error******的下面。

试题程序:

#include<iostream.h)

intmain

(

try

(

throw("errorM);

)

/不不不/不下不小error不不不不不不不不

catch(chars)

cout«s«endl;

throw((int)0);

}

/*p*i**i**r*i**<**r*perror不不不不不不不不

catch

(

cout«i«endl;

}

try

(

throw(O);

throwC^rror'*);

1

///*举**举举举年*X*prrcr'•\不•・、•・、•・••・••・•...

catch

(

cout«',ERROR,'«endl;

}

returnO;

五、综合应用题(2题)

46.请使用VC6或使用【答题】菜单打开考生文件夹proj3下的工程

proj3,其中声明的DataList类,是一个用于表示数据表的类。DataList

的重载运算符函数Operator+,其功能是求当前数据表与另一个相同长

度的数据表之和;即它返回一个数据表,其每个元素等于相应两个数

据表对应元素之和。请编写这个。peralor+函数。程序的正确输出应该

是:

两个数据表:1,2,3,4,5,63,4,5,6,7,8两个数据表之

和:

4,6,8,10,12,14要求:

补充编制的内容写在“〃k******???***"**51c”与

“”********666********”之间,不得修改程序

的其他部分。

注意:程序最后将结果输出到文件。ut.dal中。输出函数writeToFile

已经编译为。bj文仲,并且在本程序中调用。

//DataList.h

#inClude<iostream>usingnamespaCestd;

ClaSSDataList{〃数据表类intfen;

double*d;public:

DataList(intlen,doubledata口二NULL);DataList(DataList&data);

intlengthConst{returnlen;)

doublegetElement(inti)Consttreturnd[ij;}

DataListoperator+(ConstDataList&list)Const;〃两个数据表求和void

showConst;〃显示数据表

};

voidwriteToFile(Char$,ConstDataList&);//main.Cpp

#inClude,,DataList.h"

DalaList::DataList(intlen,doubledata[]):len(ien){d=new

doubletlen];

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

dWi=(data==NULL?O.0:data[ij);

)

DataList::DataList(DataList&data):len(data.len){d=new

doubletlenJ;

for(inti=0;i<len;i++)d[i]=data.d[i];

DataListDataList::0perator+(Con8tDataList&list,)Const{〃两个数据

表求和double*dd=newdoubletlist.lensth];

〃********333********

〃********666********

returnDataList(list.length,dd);}

voidDataList::showConst{〃显示数据表fr(intoi=0;i<len-l;i++)

eout«d[i]«,\";

Cout«dflen-l]«endl;

intmain{

doublesl[]={E2,3,4,5,6};

doubles2[]={3,4,5,6,7,8};

DataListlist1(6,si),list2(6,s2);〃定义两个数据表对象eoutvv”两个

数据表:”《endl:

listl.show:list2.show;eoutwendlw”两个数据表之

和:9,«endl:

(listl+list2).show;

writeToFile(,,,\listl+list2);return0:

47.使用VC++6.0打开考生文件夹下的源程序文件3.cpp。其中定

义的类不完整,按要求完成下列操作,将类的定义补充完整。

⑴定义类的公有数据成员函数NO、Namc[32],其中NO是int型的数

据,Name[32]为字符型。请在注释1后添加适当的语句。

(2)完成函数Set的定义,分别设置N0和Name的值,请在注释2后添

加适当的语句。

⑶完成函数print,请在注释3后添加适当的语句,输出结果如下:

N0=12345

Name=HelloWorld!

⑷添加默认构造函数,设置N0为0,Name为空,请在注释4后添加

适当的语句。

注意:增加或者修改代码的位置已经用符号表示出来,请不要修改其

他的程序代码。

试题程序:

#include<iostream.h>

classTC

(

public:

•卜•卜•[••[••卜•卜•卜•卜■•卜,卜,*;2、***z5、^:*2、^q*£、**2**2*

/%V%VKV%1*«Vvl»^1^

/f〃,•[••[••[•〃•・[••[•・】•J,I,,I,•[••[•小•1•一】•rj«

(

No=no;

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

(

Name[i]=strName[i];

Name[i+l]=0:

)

voidprint()

!1********3********

TC()

II********4********)

);

intmain()

(

TCstu:

stu.Set(12345,nHelloWorld!M);stu.print();

returnO;

)

六、3.综合应用题(2题)

48.使用VC6打开考生文件夹下的工程test25_3,此工程包含一个源程

序文件test25_3.cpp,其中定义了用于表示堆的类Set,但它的定义并不完

整。请按要求完成下列操作,将程序补充完整。

(1)完成成员函数intIsMemberOf(intn)的定义,该函数检查参数n是否

在类的数据成员数组elems中,如果在返回1,反之返回0。请在注释

“〃**1**”之后添加适当的语句。

⑵完成成员函数inlAdd(intn)的定义,如果参数n包含在类的数据成员

数组elems中则返回1如果数组超界则返回0,如果都不是,则将参数

n插入到elems中,下标大小为类的数据成员PC,之后PC自加一。请在

注释“〃**2"”之后添加适当的语句。

⑶完成拷贝初始化构造函数Set(Set&s)的定义,请在注释“〃**3***之后

添加适当的语句。输出结果如下:

1

()

{1,2,3,4,5,6:7.8)

注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。

源程序文件test25_3.cpp清单如下:

#include<iostream.h>

classSet

public:

Set(){PC=O;}

Set(Set&s);

voidEmpty(){PC=O;}

intIsEmptyO{returnPC==O;}

intIsMemberOf(intn);

intAdd(intn);

voidPrint();

private:

intelems[100];

intPC;

);

intSet::IsMemberOf(intn)

if(elems[i]==n)

return1;

returnO;

)

intSet::Add(intn)

(

return1;

elseif(PC>=100)

returnO;

else

elems[PC++]=n;

return1;

Set::Set(Set&s)

//木木3个木

for(inti=O;i<PC;i++)

elems[i]=s.elems[i];

)

voidSet::Print()

(

cout<

for(inti=O;i<PC-1;i++)

cout<<elems[ij<<”J;

if(PC>O)

cout<<elemsfPC-1];

cout<<HM<<endl;

voidmain()

(

SetA;

cout<<A.IsEmptyO<<endl;

A.Print();

SetB;

for(inti=l;i<=8;i++)

B.Add(i);

B.Print();

)

49.使用VC6打开考生文件夹下的工程test33_3o此工程包含一个

test33_3.cpp,其中定义了表示时间的类Time,但Time类定义并不完整。

请按要求完成下列操作,将程序补充完整。

(1)定义类Time的私有数据成员hours、minutes和seconds,它们都是int

型的数据,分别表示时间的小时、分和秒。请在注释“〃**1**”之后添加

适当的语句。

(2)完成类Time缺省构造函数的定义,该函数将数据成员hoursxminutes

和seconds的值初始化为0,请在注释“//**2*»之后添加适当的语句。

(3)完成类Time带参构造函数的定义,该函数将数据成员hours,minutes

和seconds的值分别初始化为参数h、m和s的值,请在注释“〃**3***

之后添加适当的语句。

(4)完成类Time中运算符的重载,注意小时、分和秒在相加时的进位

问题。请在注释“〃**4**”之后添加适当的语句。

注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。

程序输出结果如下:

8:17:11

源程序文件test33_3.cpp清单如下:

#include<iostream.h>

classTime

(

〃**i**

public:

Time()

(

〃**2**

seconds=0;

)

Time(inth,intm,ints)

(

〃**3**

minutes=m;

seconds=s;

)

Timeoperator+(Time&);

voidgettime();

);

TimeTime::operator+(Time&time)

(

4木木

s=time.seconds+seconds;

m=time.minutes4-minutes+s/60;

h=time.hours+hours+m/60;

Timeresult(h,m%60,s%60);

returnresult;

)

voidTime::gettime()

(

cout<<hours<<<<minutes<<u:u<<seconds<<end1;

}

voidmain()

(

Timetl(3,20,15),t2(4,56,56),t3;

t3=tl+t2;

t3.gettime();

参考答案

1.A解析:本题考察在C++中,字符串的存放方式,以及不同的字符串

函数的作用。其中,strlen是专门用于求字符串长度的,其自动去掉字

符数组后面的那个NO',而sizeof后面求的则是str指针,指针在目前的

32位机器中是固定大小的,其值与字符串的长度是没有关系的。故可以

排除B和D。而选项C则将NO,多考虑了一次。

2.A解析:函数名、参数及返回值必须与基类中对应的虚函数完全相同。

3.C

4.A解析:for循环的一般格式为for(初始化部分;终止条件判断部

分;迭代部分){循环体;}

说明如下:for循环开始时,首先执行初始化操作,然后判断终止条件

是否满足,如果满足,则执行循环体中的语句,最后执行迭代部分。

完成一次循环后,重新判断终止条件。注意:在for语句中,如果省略

了终止条件判断部分,并且在语句中没有break,或者是终止条件判断

部分始终没有终止,都将出现死循环。注意:for循环语句可由while

循环语句来代替。

5.B解析:注意到n--的运算顺序,知道第一次输出的应是8,据此就

可以很快排除A和D。然后判断循环几次结束,由于当n=6时,while

的条件判断已经不成立了,直接跳过循环体结束程序了。故当n=9,8,7

时执行了循环体,故答案为B。

6.C解析:本题考核对虚函数的了解。在成员函数声明的前面加上

virtual关键字修饰,即把该函数声明为虚函数。虚函数可以是另一个

类的友元函数,但不是静态成员函数。所以A、B选项的描述都是错

误。在派生类中可以重新定义从基类继承下来的虚函数,在派生类中

重定义虚函数时,函数名、形参表和返回值类型必须保持不变,所以

D选项是错误的。

7.C

解析:本题考查的知识点是:字面常量。对于整型字面常量,只要没

有超出C++中整数所能表示的范围,C++将自动按整数(int)来存储此

数。也可以通过在整型字面常量后添加u或1(大、小写均可),来指定

按无符号整数(unsigned)或长整数(long)来存储,也可同时使用u和

1(对排列无要求),来指定按无符号长整数(unsigned\u30001ong)来存

储。对于实型字面常量,C++自动按双精度数(double)来存储。也可通

过在实型字面常量后添加f(大、小写均可),来指定按单精度数(float)来

存储。故本题应该选择C。

8.D

9.A解析:此题首先执行语句do{k+=5;cout<<,$';)while(k<19);,循

环执行4次,输出4个k的值变为20;然后执行语句while(k-->

0)cout<因为其中的k是后缀自减,所以会输出20个“*

I0.B解析:本题中,表达式将5个初值赋给a⑼至al4J,后面的部分,

将自动会被依次补零处理,

11.A解析:运算符重载为成员函数的形式为:函数类型。perator运算符

(形参表)(函数体;};运算符重载为友元函数的形式为:friend函数类型

operator运算符(形参表){函数体;}。一般来讲,单目运算符最好重载为

成员函数,双目运算符最好重载为友元函数。=、口、0、・>以及所有的

类型转换运算符只能作为成员函数重载。

12.C

Co【解析】主函数中调用fun(3),在fun内部当n>2时,递归调用

fun(n-l)+fun(n-2),否则返回2。所以当n=3时,调用fun(2)+fun(l),

即返回2+2,等于回

13.A

Ao【解析】本题考查运算符的重载。C+一中,::、*...?:这4个

运算符不能重载。

14.C

Co【解析】A只是声明,没有初始化;B的初始化错误,另一个数组

对象没有指明地址;D同样做的不是初始化的事情。

15.D

Do【解析】本题考查引用调用,因为函数swap引用调用参数a,所

以在swap函数中a的变化会改变主函数中a的值,即a自加1。但b

的值并未改变。

16.A

解析:本题考查了class和typename两个关键字。关键字class除了能

用来定义类以外,还能用来声明模板的虚拟类型参数。在用作声明虚

拟类型参数时typename与\u3000class可以互换,但不能使用typename

宋定义类。因此,选项B和C是错误的。在模板形参表中除了可以用

typename或class声明虚拟类型参数外,还可以使用普通类型声明常规

参数,所以选项C是错误的。故本题应该选择A。

17.C

解析:本题主要考查的是C语言结构中的源程序书写格式这个知识

点,在C语言中注释部分对程序的运行结果不产生任何影响,它可以

出现在任意位置;C语言书写自由,一行内可以写多个语句,一个涪

句可以写在多行上;由于C语言编写的程序有很好的移植性,可以放

在多个程序文件中。

I8.C

Co【解析】由图可知系统深度为3。

19.B解析:按照程序的执行顺序.考生可以很快得出正确答案为B。

20.A解析模块化设计是指把一个大程序按人们能理解的大小规模进行

分解。划分模块的基本原则是使每个模块都易于理解。按照人类思维的

特点,按功能来划分模块最为自然。在按功能划分模块时,要求各模块

的功能尽量单一,各模块之间的联系尽量少。所以,选项A正确;选项

B错误;选项C错误。本题的正确答案为Ao

21.C

解析:fib(2)=fib(1)+fib(O)=2+1=3,所以函数被调用3次,分别是

fib(2)、fib⑴和fib(O)。

22.C

解析:本题考查的知识点是:派生类对基类成员的访问。派生类对基

类中各成员的访问能力与继承方式无关,其成员不能访问基类中的私

有成员,可以访问基类中的公有成员和保护成员。

23.D结构化程序设计由迪杰斯特拉(E.W.dijkstra)在1969年提出,他主

张“清晰第一,效率第二”,以模块化设计为中心将待开发的软件系统

划分为若干个相互独立的模块,这样使完成每一个模块的工作变得单纯

而明确,为设计一些较大的软件打下了良好的基础。

由于模块相互独立,因此,在设计其中一个模块时,不会受到其他模块

的牵连,因而可将原来较为复杂的问题化简为一系列简单模块的设计。

模块的独立性还为扩充已有的系统、建立新系统带来了不少的方便,因

为可以充分利用现有的模块作为积木式的扩展。

结构化程序设计的基本思想是采用“自顶向下,逐步求精”的程序设计方

法和“单入口单出口”的控制结构。自顶向下、逐步求精的程序设计方法

从问题本身开始,经过逐步细化,将解决问题的步骤分解为由基本程序

结构模块组成的结构化程序框图「单入口单出口”的思想认为一个复杂

的程序,如果它仅是由顺序、选择和循环三种基本程序结构通过组合、

嵌套构成,那么这个新构造的程序一定是一个单入口单出口的程序。据

此就很容易编写出结构良好、易于调试的程序。

24.class

25.99解析:本题考核函数的嵌套调用。在主函数中执行语句

“d=f(f(a,b),f(a,c));”调用了3次f()函数:调用f(a,b)得到的值为3,调

用f(a,c)得到的值为6,调用f(3,6)得到的值为9。

26.13庆23813人238解析:Concl定义cl对象,调用Con的无参数构

造函数,输出1,ID值变为A,执行show(cl)时会调用拷贝构造函数,

将cl对象的值拷贝给show。函数的形参,此时输出3,然后在show。里

面输出cl的ID值A,conc2(B)定义c2对象,调用Con(charID)构造

函数,输出2,c2的ID值为B,show(c2)执行时先调用拷贝构造函数输

出3,然后输出B。因此程序输出结果为“13A23B”。

27.多态性多态性解析:面向对象系统包含了三个特征-封装性、继承性

和多态性,这三个特征可以很好的实现数据抽象,进行行为共享,完成

进化求解和描述一个系统的确定行为。

28.集合集合解析在关系操作中,所有操作对象与操作结果都是关系。

而关系定义为元数相同的元组的集合。因此,关系操作的特点是集合操

作。

29.消息消息解析:这是概念题,通过发送消息实现。

3O.a>0&&b>0&&c>0&&a+b>c&&b+c>a&&c+a>ba>0&&b>

0&&c>0&&a+b>c&&b+c>a&&c+a>b解析:本题考察考生将实际问

题转换为逻辑表达式的能力。根据三角形的基本定理“两边和大于第三

边”可穷举出其表达式。

31.自顶向下自顶向下解析:程序设计时,应先考虑总体,后考虑细节,

逐步使问题具体化,对复杂的问题,应该设计一些目标作为过渡,上述

方法概括为:自顶向下,逐步细化。

32.交换排序交换排序解析:常见的排序方法有插入排序(包括简单插入

排序法和希尔排序法等)、交换排序(包括冒泡排序和快速排序法等)和选

择排序(包括简单选择排序和堆排序等)。注意:常见的排序方法及其作

用机制和区别。

33.ifstream且fin(“CAtest.daf'iosbinary);或ifstreamfin;fin.open(c:

\test.dat"ios_binary);ifstream且fin("C:Wtest.daf\ios_binary);或if

streamfin,;fin.open(c:Wtest.dat\ios_binary);解析:C++中打升文

件有两种方式①ifstreamfin("test.dat");②ifstreamfin;

fin.open(utest.dat”);,ios_binary的意义是以二进制文件打开。

34.用户定义的完整性用户定义的完整性

35.完整性控制完整性控制解析:安全性控制:防止未经授权的用户有

意或无意存取数据库中的数据,以免数据被泄露、更改或破坏;完整性

控制:保证数据库中数据及语义的正确性和有效性,防止任何对数据造

成错误的操作;并发控制:正确处理好多用户、多任务环境下的并发操

作,防止错误发生;恢复:当数据库被破坏或数据不正确时,使数据库

能恢复到正确的状态。注意:数据库的其他用途,如数据定义、数据操

作和数据管理等。

36.(l)"voidmain”。

(2)“intm=0144;

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

【解析】本题主要考查了主函数定义及基同进制之间的转换,包括十

进制到八进制,十进制到十六进制。主函数定义的定义形式为

“main”,函数名之后必须是一对括号,因此第1处应改为“voidmain”。

cout输出默认是以十进制方式输出的,根据题目要求输出的结果可发

现变量的初值不正确,十进制的100对应八进制的144,卡进制的37

对应十六进制的25,因此2和3应分别改成“intm=0144;”,

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

37.(1)应改为"usingnamespacestd;

\n(2)应改为“outl.open('l.txt',ios::binary|ios::app);"。

\n(3)应改为“outl.pul(s[i]);”。

\n【解析】本题第1处的“usingstd广是在程序中引入标准命名空间std.

对于C++中引入标准命名空间的格式,缺少namespace,所以第1处

的语句修改为“usingnamespacestd;第2处,调用成员函数open中,

输入、输出方式是在ios类中定义的,所以“out1.open('l.txt',binary|

app)二语句缺少类ios,即第2处的语句修改为“outl.open。.txt[ios::

binary|ios::叩p);”。第3个标识应该用流成员函数put输出字符,所

以第3处的语句修改为“outl.put(s[i]);)

38.(1)应改为“ein.getline(str,120,?);

\n(2)应改为"while(str[i])"°

,,

\n(3)应改为"iRstr[i]>=a&&str[i]<=2)0

\n【解析】本题中要求以输入字符“?”为结束符,用于字符输入的流成员

函数getline函数读入一行字符,格式为“cin.getline(字符数组,字符个

数,终止标志字符字所以第1处改为“cin.getline(str,120,?);”。第

2处的“while(str)”语句应该是判断字符串str中的每一个字符是否为结

束符,若不是结束符,在循环中判断每一个字符是否为小写,若为小写,

则转换。所以应该修改为“while®巾第3处的“if(st巾]>=a)”语句是

判断字符str[i]是否为小写字符,而现有的语句只是判断字符是否大于a,

但是小写字符应该是a到2,所以修改为“if(str[i]>=a&&st巾;|>=z)”。

39.(1)应添加“public:"。

\n(2)“inti”应改为“inti(10);

\n(3)“i++;”应改为“i-;”。

\n【解析】本题主要考查的是成员的访问属性。成员的访问属性有公有、

保护和私有3种,而默认的访问属性为私有,只有公有成员才能通过类

的对象被访问。故应在构造函数前添加“public:“,否则该类无法被实例

化。变量的初始化可以通过“=''号,也可以和初始化对象一样添加构造

参数,题目已要求使用后者。本题要求输出5个数,while的循环变量i

每次成1,在>5时循环,故i初始化应为10。若循环中i每次增1,则

循环永远不会退出C

40.(1)应改为"usingnamespacestd;

⑵应改为“outl.open(nl.txt",ios::binaryIios::叩p);"。

(3)应改为“outl.put(s[i]);

【解析】本题第1处的“usingstd;”是在程序中引入标准命名空间std,

对于C++中引入标准命名空间的格式,缺少namespace,所以第1处

的语句修改为“usingnamespacestd;第2处,调用成员函数open

中,输入、输出方式是在ios类中定义的,所以“outl.open("l.txt'1,

binaryIapp);”语句缺少类ios,即第2处的语句修改为

4€outl.open("l.txt",ios::binaryIios::叩p);第3个标识应

该用流成员函数put输出字符,所以第3处的语句修改为

“outl.put(s[i]);

41.(1)应改为“TC::TC,5o

(2)应改为"voidTC::display”。

(3)应改为“TC::〜TC”。

【解析】在类的外部定义成员函数时,必须在成员函数前面加上类名

和作用域运算符“::”,作用域运算符用采表示某个成员属于哪个

类,使用格式为“(类名)::〈成员函数〉((参数函数)),因此第1处应改

为“TC::TC”,默认构造函数没有参数。由第2处“TC::display”后

的语句看,这是在类外实现TC函数,因此也有作用域运算符使用错

误问题,display函数返回值为void,因此第2处的语句应改为

“voidTC::display”。由第3处的语句“TC::TC”可知,显然这里是

在类外实现析构函数,析构函数是一个特殊的函数,它的名称和类名

相同,并在前面加“〜”字符,用采与构造函数加以区别,因此第3处

的语句应改为“TC::〜TC”。

42.(1)应改为"TCobjl(l);九

(2)应改为“Objl.SetNumber(lO);

(3)应改为“0bj2.SelNumber(lOO);

【解析】本题第1处的“TCobjl;”语句是声明TC类的对象Objl,根据

TC类构造函数的定义TC(inti),存在整型参数,并且题目要求第一个

输出结果两1,所以补全参数1,即第1处的“TCobjl(l);工第2处处

的“objl.number=10;”应该是调用成员函数SetNumber赋值。在C+

+中成员函数的使用形式应该是:对象名.成员函数,所以修改为

uobj1.SetNumber(lO);类是对象的抽象,而对象是类的具体实

例。第3处“TC.SetNumber(lOO);”语句中的TC为类,并不是对象,

这里应该使用定义的对象,即。bj2,所以将语句修改为

“obj2.SetNumber(lOO);

43.(1)应改为"TCobjl(l);\

\n⑵应改为“Objl.SetNumber(lO);

\n(3)应改为“0bj2.SelNumber(lOO);

\n【解析】本题第1处的“TCobjl;"语句是声明TC类的对象Objl,根据

TC类构造函数的定义TC(inti),存在整型参数,并且题目要求第一个输

出结果两1.所以补全参数I,即第1处的“TCobjl(l);二第2处处的

“objl.number=10;”应该是调用成员函数SetNumber赋值。在C++中

成员函数的使用形式应该是:对象名.成员函数,所以修改为

-objl.SetNumber(lO);\类是对象的抽象,而对象是类的具体

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论