国家二级(C++)机试模拟试卷14(共360题)_第1页
国家二级(C++)机试模拟试卷14(共360题)_第2页
国家二级(C++)机试模拟试卷14(共360题)_第3页
国家二级(C++)机试模拟试卷14(共360题)_第4页
国家二级(C++)机试模拟试卷14(共360题)_第5页
已阅读5页,还剩99页未读 继续免费阅读

下载本文档

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

文档简介

家二级(C++)机试模拟试卷14(共9

套)

(共360题)

家二级(C++)机试模拟试卷第1套

一、选择题(本题共39题,每题1.0分,共39分。)

1、运算符函数调用格式的表达式“y/x++”与表达式“y.operator/(operator++(x,

0))”的含义相同,由此可看出()。

A、"/”和“十十”都是作为成员函数重载的

B、“/”和“++”都是作为非成员函数重载的

C、是作为成员函数重载的,“++”是作为非成员函数重载的

D、“/”是作为非成员函数重载的,“++”都是作为成员函数重载的

标准答案:C

知识点解析:运算符函数有两种调用形式,第一种是像一般函数那样用函数名调

用,即yoperator*(z)或者operator*。,z);另一种是通过运算符构成表达式,即

y*z。因为“++”运算符既可以作为前缀运算符,又可以作为后缀运算符,所以重载

这个运算符时,重载后缀时必须多一个虚拟参数:int。

2、关于运算符重载,下列表述中正确的是()。

A、C++已有的任何运算符都可以重载

B、运算符函数的返回类型不能声明为基本数据类型

C、在类型转换符函数的定义中不需要声明返回类型

D、可以通过运算符重载来创建C++中原来没有的运算符

标准答案:c

知识点。析:重载运算符的规则如下:①C++不允许用户自己定义新的运算符,只

能对已有的C++运算符进行重载;②C++不能重载的运算符只有5个;③重载不能

改变运算符运算对象的个数;④重载不能改变运算符的优先级和结合性;⑤直载

运算符的函数不能有默认的参数;⑥重载的运算符必须和用户定义的自定义类型

的对象一起使用,至少应有一个是类对象,即不允许参数全部是C++的标准类

型。故本题答案为C。

3、在下列枚举符号中,用来表示“相对于当前位置”文件定位方式的是()。

A、ios_base::cur

iosbase::beg

C>ios_base::out

D、iosbase::end

标准答案:A

知识点解析:streamoff定义于iostream,h中,定义有偏移量offset所能取得的最

大值,seek_dir表示移现的基准位置,是一个有以下值的枚举:ios::beg:(文件

开头)、ios::cur:(文件当前位置)、ios::end:(文件结尾)。

4、下列排序方法中,最坏情况下比较次数最少的是()o

A、冒泡排序

B、简单选择排序

C、直接插入排序

D、堆排序

标准答案:D

知识点解析:冒泡排序与简单插入排序与简单选择排序法在最坏情况下均需要比较

n(n-l)/2次,而堆排序在最坏情况下需要比较的次数是疝唱2%

5、在进行任何C++流的操作后,都可以用C+十流的有关成员函数检测流的状态;

其中只能用于检测输入流状态的操作函数名称是(),

A、fail

eof

C、bad

D、good

标准答案:B

知识点解析:可以用文件流对象的成员函数来判别文件流当前的状态:fail,刚进

行的操作失败时返回true,否则返回false;eof,进行输入操作时,若文件到达文

件尾返回true,否则返回false:bad,如果进行了非法操作返回true,否则返回

false;good,刚进行的操作成功时返回true,否则返回false0

6、关于ihis指针的说法不正确的是()。

A、不能在程序中修改this指针

B、ihis指针可以给其他指针赋值,但不能修改this指针

C、静态成员函数中没有this指针

D、this指针可以被赋值

标准答案:D

知识点解析:this指针不能在程序中修改,不能被幅值:静态成员没有ihis指针,

因为类中只有一个静态成员函数实例,使用this指针无意义。

7、)下面程序的输出结果是()。#include#includet4string.h”voidmain。{char

a[]-'HelloTest,,,b[]-<Tesf,;strcpy(a,b);cout<

A、Hello

B、Test

C^HelloTest

D^HelloTestHelloTest

标准答案:B

知识点解析:程序中首先定义字符数组a和b,其值分别为“HelloTest”和“Test”。

然后利用strepy复制函数,将b的值复制给a,所以输出a的结果为「est。

8、有如下头文件:inln();staticimf2();classMA{public:intf3();staticint

f4(););在所描述的函数中,具有隐含的this指针的是()。

A、n

B、f2

C、f3

D、f4

标准答案:C

知识点.析:只有类的非静态成员函数才隐含this指针,其作用域是类内部,当类

的非静态成员函数中访问类的非静态成员时,编译器会自动将对象本身的地址作为

一个隐含参数传递给函数,而不必一定写上(his。所以本题答案为C。

9、有如下程序:#includeusingnamespacestd:classB{public:virtualvoid

show(){cout«"B";}};classD:publicB{public:voidshow(){cout«"D";));

voidfunl(B*ptr){ptr->show();}voidfun2(B&ref){ref.show();)voidfun3(B

b){b.show();)intmain(){Bb,*p=newD:Dd:funl(P);fun2(b);fun3(d);

deletep;return0;}执行这个程序的输出结果是()。

A、BBB

B、BBD

C、DBB

D、DBD

标准答案:C

知识点解析:在某基类中声明为virtual并在一个或多个派生类中被重新定义的成

员函数,本题中定义类B的对象b、对象指针*p=newD以及类D的对象d;执行

funl会调用派生类的show函数,因为show函数为虚函数,而调用fun2、fun3仍

然为基类的show函数,所以本题答案为C。

10、下列语句中错误的是()。

A^constinta;

B、constinta=10;

C、constint*point=0:

D、constint*point=newint(10);

标准答案:A

知识点解析:consl是一个C++语言的关键字,它限定一个变量不允许被改变。

使用const在一定程度上可以提高程序的安全性和可靠性。限定符声明变量只能被

读,必须初始化。A选项没有初始化,B、C、D选项都正确。

11、有如下程序段:inti=l;intj=4;intmain(){inti=8,j=i;cout<

A、14

B、81

C、88

D、18

标准答案:C

知识点解析:全局变量也称为外部变量,它是在函数外部定义的变量。它不属于哪

一个函数,它属于一个源程序文件。其作用域是整个源程序。在函数中使用全局变

量,一般应作全局变量说明,本题中定义了两个全局变量i,j,所以主函数中对全

局变量重新赋值输出后为88,所以答案为C。

12、有如下程序:#includeusingnamespacestd:classTestClass{public:

TcstCIass(){cout«t4BBM;fun();}voidfunO{cout«uBf,;));classTestClass1:

publicTestClass{public:TestClass10{cout«ttDD,1;}v

A、BBBfDD

B、BBDfDDDf

C、DD

D、DDBBBf

标准答案:A

知识点解析:TestClass是TestClassl的基类。由主函数main入手,定义TestClassl

的对象d,调用基类TestClass构造函数输出BB,调用基类成员函数fun输出Bf,

然后调用派生类的构造函数,输出DD。

13、有下列程序段:charch;intk;ch=,a,;k=12:printf("%c,%d,",ch,

ch,k);printf(”k二%d\n",k);已知字符a的ASCH十进制代码为97,则执行上

述程序段后输出结果是()。

A、因变量类型与格式描述符的类型不匹配输出无定值

R、输出项与格式描述符个数不符,输出为零值或不定值

C、a,97,12k=12

D、a,97,k=12

标准答案:D

知识点解析:printf语句在输出时,格式说明与输出项的个数应该相同。如果格式

说明的个数少于输出项的个数(正如本题的情况),则多余的输出项不予输出,如果

格式说明个数多于输出项个数,则对于多余的格式项输出不定值或0。故本题选项

为Do

14、学生关系模式中有D(D#,Dn,DI,DAddr)(其属性分别为系编号、系名称、

系主任和系地址)和S(S#,Sn,SG,Date,Maj,D#)(其属性分别为学号、姓名、

性别、入学日期、专业和系编号)两个关系,关系S的主键(码)是S#,关系S的外

键(码)是()。

A、D#

B、Maj

C、DI

D^Dn

标准答案:A

知识点解析:在二维表中凡能唯一标识元组的最小属性集称为该表的键或码。表A

中的某属性集是某表B的键,则称该属性集为A的外键或外码。故本题答案为A

选项。

15、下列因素中,对C++编译器区分重载函数无任何意义的是()。

A、常成员函数关键字const

B、返回值类型

C、参数类型

D、参数个数

标准答案:B

知识点解析:C++中,两个函数是重载函数,必须具有相同的名字,且形参表或

const属性不同,选项A、C、D都可以区分;函数不能仅仅基于不同的返回类型而

实现重载,选项B不能区分,本题答案为B。

16、按照“后进先出”原则组织数据的数据结构是3。

A、队列

B、栈

C、双向链表

D、二义树

标准答案:B

知识点解析:栈是限定只在表尾进行插入或删除操作的线性表,因此栈是先进后出

的线性表;队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,

而在表的后端(rear)进行插入操作,队列具有先进先出(FIFO)的特点;双向链表可

以在链表的头和尾进行添加删除操作;二叉树是非线性结构。

17、在“intb[][3]={{l},(3,8),{4,5,7),{011;”中,b[2112]的值是()。

A、0

B、7

C、1

D、8

标准答案:B

知识点解析:数组可以在定义的时候给出其初始化的值,如果所给的数值比数组的

数目少。则后面缺省的是0。

18、有以下程序:voidfun(int*a,inti,intj){intt:if(i<j);{t=a[i]:a[i]=a[j];

a[j]=t;)fun(a,++i,—j);)voidmain(){inta[]={1,2,3,4,5,6},i;fun(a,

0,5);for(i=0;i(6;i++)cout<

A、654321

B、432156

C、456123

D、123456

标准答案:A

知识点解析:本题采用涕归函数的方式将数组中的元素进行倒置,正确答案为A。

RT

ABCAB

a1a1

b44b4

c23c一9

d32d3

19、有两个关系R、T如下:则由关系R得到关系

T的操作是

A、投影

B、交

C、选择

D、并

标准答案:A

知识点解析:用于查询的3个操作无法用传统的集合运算表示,引入的运算为投影

运算、选择运算、笛卡尔积。常用的扩充运算有交、除、连接及自然连接等。投

影,从关系模式中指定若干个属性组成新的关系,题目中从R中指定AB组成新的

关系T,故A选项正确。选择,从关系中找出满足给定条件的元组的操作称为选

择,即结果T应该包含R中全部属性,故C选项错误。假设,R与S经过某种关

系得到T,则并:RUS是将S中的记录追加到R后面;交:RAS结果是既属于R

又属于S的记录组成的集合。上述两种操作中,关系R与S以及T要求有相同的

结构,故B、D选项错误。

20>有如下程序:#includeusingnamespacestd;intmain(){intsum=0;for(inti=0;i

<=3;i+=1){sum+=i;while(sum<100)sum+=i;}cout«sum<

A、输出100

B、输出103

C、输出105

D、死循环

标准答案:D

知识点解析:程序在foi•循环中嵌套while循环。for循环的初始条件为,sum、i初

值为0;进入for循环之后,首先将sum累加i,此时sum、i仍为0;while循环

中,若sum小于100,则将sum累加i,继续while循环;当sum不满足条件时,

退出循环。由于sum、i初值为0,所以while循环中sum始终为0,始终满足循环

条件sum<100,所以程序进入死循环。答案为D。

21、若要重载+、=、<<、==和口运算符,则必须作为类成员重载的运算符是()。

A、+和-

B、=和<<

C、==和《

D、=和口

标准答案:D

知识点解析:对于单目运算符,建议选择成员函数;对于运算符一、()、口、->,

只能作为成员函数;对于运算符+=、-=、/=、*=>&=、!=、~=、%=、

«=>»=,建议重载为成员函数;对于其他运算符,建议重载为友元函数。

22、有如下类声明:classHow{intk;public:friendvoidshow。;};则类How所拥有

的构造函数的数量是

A、1

B、2

C、3

D、4

标准答案:B

知识点解析:类How的定义体中没有定义任何构造函数,所以编译器需要自动生

成一个默认构造函数和复制构造函数,答案为B。

23,内部格式控制操作函数是在头文件()中定义的v

A、iostream.h

B、iomanip.h

C^istream.h

D、ostream.h

标准答案:B

知识点解析:C++语言中,除了ios类成员函数之外,还提供了另一种I/O格式化

方法,即操作符。所有不带形参的操作符都定义在iostrcam,h中,而带形参的操

作符则定义在头文件iomanip.h中。

24、如果有以下定义及初始化:inta=3,*p=&a:则由此可以推断,*p的值是

()o

A、变量a的值,即3

B、变量a的地址值

C、变量p的地址值

D、无意义

标准答案:A

知识点解析:此题考查的是指针变量的定义与赋初值。语句*p=&a是定义指针并且

给指针赋初值,指向a,所以指针的值就是变量a的地址,*p的值就是a的值。

25、对于一个类定义,编译器可能会自动生成的函数不包括

A、复制构造函数

B、缺省的构造函数

C、析构函数

D、友元函数

标准答案:D

知识点解析:C++中,对于一个类定义,编译器可能会自动生成的函数有:默认

(缺省)构造函数,复制构造函数,复制运算符,析构函数,答案为D。

26、结构化程序的三种基本控制结构是

A、顺序、选择和重复(循环)

B、过程、子程序和分程序

C、顺序、选择和调用

D、调用、返回和转移

标准答案:A

知识点解析:结构化程序的三种基本控制结构:顺序、选择和重复,故A选项正

确。

27、执行下列语句段后intn=0;for(inti=70;i>0;i-=3)n++;n的值是

A、23

B、24

C、25

D、71

标准答案:B

知识点解析:for循环中,i初值为70,每次循环i自减3,n自增1,循环终止条

件为i>0不成立;由70/3=23,可知循环最少执行23次,之后i取值为1,仍然满

足循环条件,所以循环总共执行24次,n自增24次,答案为B

28、有如下函数模板:templateTsquare(Tx){returnx*x;}其中的参数T是

A、函数形参

B、函数实参

C、模板实参

D、模板形参

标准答案:D

知识点解析:参数T是模板形参,答案为D。

29有如下程序:#includeusingnamespacestd;classSample(public:Sample(){)

〜Sample。{cout«'*';}};intmain(){Sampletemp[2],*pTemp[2];return0;}运行这

个程序输出星号*的个数为

A、1

B、2

C、3

D、4

标准答案:B

知识点解析:本题考查沟造函数和析构函数,题中定义了对象数组,那么析构时就

析构两次,输出两个九答案为B。

30、下列运算符中,不能被重载的是()。

A、&&

B、!=

C、.

D、++

标准答案:C

知识点解析:C++不能重载的运算符只有5个,即”2"、“sizeoT,

故本题答案为C。

31、当一个类对象行将消亡时,系统自动调用

A、析构函数

B、构造函数

C、静态函数

D、友元函数

标准答案:A

知识点解析:当对象脱离其作用域时(例如对象所在的函数已调用完毕),系统自

动执行析构函数。析构函数往往用来做“清理善后”的工作。所以选择A。

32、若AA为一个类,a为该类的非静态数据成员,在该类的一个成员函数定义中

访问a时,其书写格式为

A、a

AA.a

C、a()

D、AA::a()

标准答案:D

知识点解析:本题考查如何引用类的数据成员,本题中要引用类的非静态数据成

员,可以直接引用,所以A选项正确。

33、有如下模板声明:templateclassA;下列声明中,与上述声明不等价的是

A、templateclassA;

B、templateclassA;

C>templateclassA;

D、templateclassA;

标准答案:D

知识点解析:本题考查模板的定义,A、B、C选项中两个参数都为typename或

class,而D选项中第二个参数不是lypename或class,所以与题目中不等价,D选

项错误。

34、执行语句序列intn=0;for(inti=60;i>0;i-=3)n++;之后,变量n的值是

A、20

B、21

C>60

D、61

标准答案:A

知识点解析:本题考查for循环语句,i每次减1,所以for循环执行20次。选项A

正确。

35、有如下类定义:classCup{public:voidSetPrice(doubleval){price=val;)

private:doubleprice;);若有定义语句"CupmyCup;",为了调用SetPrice成员函数,

下列选项中正确的是

A、Cup::SetPrice(5.8);

13、Cup.SetPrice(5.8);

C、myCup::SetPrice(5.8);

D、myCup.SetPrice(5.8);

标准答案:D

知识点解析:本题考查如何引用类的成员函数,一般形式为:对象名.成员名。D

选项是正确的引用方式,所以本题D选项错误。

36、有如下类定义:classPet{charnamc[30];public:Pct(char*n){strcpy(name,n);}

voidbark(){cout«"Woof!";}};且有如下变量定义:Petmy_dog("Weiwei"),

&p=my_dog;则下列访问成员函数bark的表达式中,错误的是

A、p.bark()

B、my_dog.bark()

C^p->bark()

D、(&p)->bark()

标准答案:C

知识点解析:p为Pet类的引用类型,引用的对象是my_dog,p->bark()用法是错误

的,至于选项D,&p是p的地址,通过地址使用箭头访问运算符访问bark(),正

确;答案为C。

37、有如下程序:#includeusingnamespacestd;classBase{public:voidfun1()

{cout«"Base\n";}virtualvoidfun2(){cout«"Base\n";)classDerived:public

Base{public:voidfun1(){cout«"Derived\n";)voidfun2(){cout«"Derived\

n";}};voidf(Base&b){b.funl();b.fun2();)intmain(){Derivedobj;f(obj);return

0;)执行这个程序的输出结果是()。

A、BaseBase

B、BaseDerived

C>DerivedBase

D、DerivedDerived

标准答案:B

知识点解析:在某基类中声明为virtual并在一个或多个派生类中被重新定义的成

员函数,本题中定义了一个派生类对象。bj,执行f函数后,将派生类对象obj转

化为基类对象,由于funl不是虚函数,所以输出基类的funl;而fun2是虚函数,

所以输出派生.类的fun2,所以本题答案为B。

T

38、有三个关系R、S和T如下:

系R和S得到关系T的操作是()0

A、自然连接

B、并

C、交

D、差

标准答案:D

知识点解析:关系T中的元组是关系R中有而关系S中没有的元组的集合,即从

关系R中除去与关系S中相同元组后得到的关系To所以做的是差运算。

39、面向对象方法中,继承是指()。

A、一组对象所具有的相似性质

B、一个对象具有另一个对象的性质

C、各对象之间的共同性质

D、类之间共享属性和操作的机制

标准答案:D

知识点解析:继承是面向对象的方法的一个主要特征,是使用已有的类的定义作为

基础建立新类的定义技术。广义的说,继承是指能够直接获得已有的性质和特征,

而不必重复定义它们,所以说继承是指类之间共享属性和操作的机制。

二、基本操作题(本题共[题,每题7.0分,共7分0)

40、使用VC6打开考生文件夹下的源程序文件modil.cpp,但该程序运行时有

错,请改正程序中的错误,使程序输出的结果为:Number=8注意:错误的语句在

//********error********的下面,修改该语句即可。#includeclassCMyClass

{public://********error********void&Get(){return&Number;)Void

Set(intm)(Numbcr=m;}voiddisplayO{cout«"Number="<

标准答案:(l)void*Gel()⑵添加语句:CMyClasst;(3)P=(int*)t.Gel();

知识点解析:(l)Get()的返回的是“retum&Number;",即返回Number的地址,主

函数中P为整型指针,但是“P=t.Get();”有错误,因为Gct()函数返回的不是整型

指针,而应该是空指针(void),空指针可强制类型转换成其他类型的指针,第I个

标识下应改为“void*Get()”。(2)由于Get()函数返回空指针(void),要使P指向Get()

函数的返回值,必须做强制类型转化,即第3个标识下应改为

4kP=(int*)t.Get():(3)变量t可以使用Gel。函数,说明t为CMyClass类对象。

即第2个标识下应添加对象定义,故第2个标识下添加“CMyclasst;

三、简单应用题(本题共7题,每题7.0分,共7分。)

41、使用VC6打开考生文件夹下的源程序文件modi2.cpp0请完成以下函数:int

factorial(intn):求出n的阶乘,必须使用递归调用c如果n小于1则返回0。注

意:不能修改函数的其他部分。#include#includeintfactorial(intn)()voidmain()

{cout<

标准答案:if(n<l){return0;)elseif(n==l){return1;)else{returnn*factorial(n-

1);1

知识点解析:(I)先考虑最简单的情况,n为1(或小于1)时返回值应该为1,即

factorial(l)=l,这是递归结束条件,如果n大于1则递归调用自己。(2)n>l时,此

时递归函数调用自己,即factorial(n)=n*factorial(n-1),此时的函数的返回值是

n*factorial(n-l),如此来实现递归调用。

四、综合应用题(本题共/题,每题7.0分,共1分。)

42、请打开考生文件夹下的解决方案文件proj3,其中声明IntSet是一个用于表示

正整数集合的类,IntSei的成员函数Intersection的功能是求当前集合与另一个集合

的交集。请完成成员函数Intersection。在main函数中给出了一组测试数据,此时

程序的输出应该是:求交集前:123581028911305667求交集后:12358

102891130566728要求:补充编制的内容写在“//********333*******”与

“//********666*********之间,不得修改程序的其他部分。注意:程序最后将

结果输出到文件out.dal中。输出函数writeToFile已经编译为。bj文件,并且在本

程序中调用。//Intsel.h#includeusingnamespacestd:constintMax=100;

ClassIntSet(public:lntSet()//构造一个空集合{end=-l;}IntSet(inta[],int

size)//构造一个包含数组a中size个元素的集合{if(Size>=Max)end=Max-1;

elSeend=size-l;for(inii=0:i<=end;i++)element[i]=a[i];}boolIsMemberOf(int

a)//判断a是否为集合中的一个元素{for(inti=0;iv=end;i++)if(element[i]:

=a)returntrue;returnfalSe;)intGetEnd(){returnend;}//返回最后一个元素

的下标intGetElement(inti){returnelement[i];}//返回下标为i的元素IntSet

Interscction(IntSct&sct);//求当前集合与集合set的交voidPrint。//输出集合

中的所有元素{for(inti=0;i〈=end;i++)if((i+l)%20=0)coul<

标准答案:for(inti=0;i<=set.GetEnd();i++)//遍对象set数组

if(IsMcmbcrOf(sct.Gctcle-mcnt(i)))//判断对象Set数组第i个值是不是集合中

的值,如果是则把它插入到a中a[size++|=set.GetElement(i);

知识点解析:主要考查考生对数组的掌握,根据IntSet类的构造函数:IntSet(int

a[],intsize)//构造一个包含数组a中size个元素的集合{if(Size>=Max)

end=Max-1;elSeend=size-1;for(inti=0;i<=end;i++)element[i]=a[i];}

可知数组element用来装载集合,end表示数组长度,因此调用函数IsMemberOf来

判断set中的元素是否存在于集合中,如果存在则放入数组a中。

国家二级(C++)机试模拟试卷第2套

一、选择题(本题共35题,每题1.0分,共35分。)

1有如下程序:#include<iostrcam>usingnamespacestd;classAA{intn:

public:AA(intk):n(k)()intgct(){returnn;)intgct()const{returnn+1;));int

main(){AAa(5);constAAb(6);cout<<a.get()<<b.get()return0:}执行后

的输出结果是()。

A、55

B、57

C、75

D、77

标准答案:B

知识点解析:语句AAa(5)调用的是AA(imk):n(k)(},a.get()调用

intget()(return;),结果会输出5;而常对象constAAb(6),b.get()调用的是

intget()const{retumn+1:},会输出结果7。

2、下列叙述中正确的是()。

A、循环队列有队头和队尾两个指针,因此,循环队列是非线性结构

B、在循环队列中,只需要队头指针就能反映队列中元素的动态变化情况

C、在循环队列中,只需要队尾指针就能反映队列中元素的动态变化情况

D、循环队列中元素的个数是由队头指针和队尾指针共同决定

标准答案:D

知识点解析:循环队列有队头和队尾两个指针,但是循环队列仍是线性结构的,所

以A错误;在循环队列中需要队头指针与队尾指针来共同反映队列中元素的动态

变化情况,所以B与C错误。

下列运算符函数中肯定不属于类FunNumber的成员函数的是()。

A、intoperator-(FunNumber);

B、FunNumberoperator-();

C、FunNumberoperator-(int);

D、intoperator-(FunNumber,FunNumber);

标准答案:D

知识点解析:本题考查运算符重载的一些规则:①一般情况下,单1=1运算符最好

重载为类的成员函数,双目运算符则最好重载为类的友元函数;②双目运算符二、

()、口、不能重载为类的友元函数;③类型转换函数只能定义为一个类的成员函

数,而不能定义为类的友元函数;④若•个运算符的操作需要修改对象的状态,

选择重载为成员函数较好;⑤若运算符所需的操作数(尤其是第一个操作数)希望有

隐式类型转换,则只能选用友元函数;⑥当运算符函数是一个成员函数时,最左

边的操作数(或者只有最左边的操作数)必须是运算符类的一个类对象(或者是对该类

对象的引用)

4、执行下列语句段后,输出字符“水”的个数是()。for(inti=50;i>l;-i)

cout«^*^:

A、48

B、49

C、50

D、51

标准答案:B

知识点解析:本题考查for循环语句,-i表示用之前先减1,那么这个for循环语

句只有50到2时才会输出“*”,所以总共输出49次。

5、将前缀运算符“一一”重载为非成员函数,下列原型中能正确用于类中说明的是

()。

A、Dccr&operator-----(int);

B、Deeroperator-----(Deer&,int);

C、friendDeer&operator-----(Decr&);

D、friendDeeroperator-----(Decr&,int);

标准答案:D

知识点解析:非成员函数重载用友元函数的形式实现,“一一”运算符重载分为前置

和后置两种重载方式。用友元函数来实现"一一''运算符的重载时,前置"一一''运算

符的重载的一般格式为:friendV【ype>operator(ClassName&);后置++近算

符的重载的一般格式为:friendVtype〉operator(ClassName&,int)o所以答案

为D。

6、有如下函数定义:voidfunc(inta,int&b){a++;b++;}若执行代码段:intx=0,

y=1;func(x,y);则变量x和y的值分别是()。

AO和

、1

B1和

、1

cO和

和2

D1

标准答案:C

知识点解析:函数参数的3种传递方式:①将变量名作为形参和实参,即传值方

式;②传递变量指针;③引用形参。本题中实参x为传值方式,所以x的值不会

改变;y为引用形参,所以会改变。故本题答案为C。

7、下面叙述错误的是()。

A、对基类成员的访问能力在private派生类中和public派生类中是相同的

B、基类的private成员在public派生类中不可访问

C^基类中将public成员工protected派生类中是protected的

D、基类中的public成员在protected派生类中仍然是public的

标准答案:D

知识点解析:基类的公有成员和保护成员在保护派生类中都成了保护成员,其私有

成员仍为基类私有。

8、有如卜头文件:inln();statieintt2();classMA{public:intf3();staticint

f4(););在所描述的函数中,具有隐含的this指针的是()。

A、fl

B、f2

C、f3

D、f4

标准答案:C

知识点解析:只有类的非静态成员函数才隐含this指针,其作用域是类内部,当类

的非静态成员函数中访问类的非静态成员时,编译器会自动将对象本身的地址作为

一个隐含参数传递给函数,而不必一定写上ihis。所以本题答案为C。

9、有如下头文件:intfl。;staticintf2();classMA(public:intf3();staticint

f4(););在所描述的函数中,具有隐含的this指针的是()。

A、fl

B、f2

C、f3

D、f4

标准答案:C

知识点解析:只有类的非静态成员函数才隐含this指包,其作用域是类内部,当类

的非静态成员函数中访问类的非静态成员时,编译器会自动将对象本身的地址作为

一个隐含参数传递给函数,而不必一定写上this。所以本题答案为C。

10、下列()是C++语言的有效标识符。

A、_Nol

B、No.1

C、12345

D、int

标准答案:A

知识点解析:标识符是一个以字母或下画线开始的,由字母、下画线和数字组成的

字符串,标识符不能与注意关键字同名。

11、下面对于友元函数描述正确的是()。

A、友元函数的实现必须在类的内部定义

B、友元函数是类的成员函数

C、友元函数破坏了类的封装性和隐藏性

D、友元函数不能访问类的私有成员

标准答案:C

知识点解析:友元函数的定义既可以在类内部进行,也可以在类外部进行。它提高

了程序的运行效率,但破坏了类的封装性和隐藏性,使得类的非成员函数可以访问

类的私有成员。

12、计算数列第n项的函数定义如下:intfa(intn)(if(n==O)retum0:else

if(n==l)return1;elsereturnfa(n-l)+fa(n-2);}若执行函数调用表达式fa(3)时,返

回的函数值为()。

A、0

B、1

C、2

D、3

标准答案:C

知识点解析:fa()函数是一个递归函数,当参数n的值大于1时,函数会递归调用

自身,返回值为fa(n—l)+fa(n—2),所以当调用fa(3)时,等价于:fa(2)+fa(l),也

就等价于fa(l)+fa(0)+fa(l),即1+0+1=2,本题答案为c。

13、下列选项中正确的定义语句是()。

A、doublea.b;

B、doublea=b=7;

C、doublea=7,b=7

D、double,a,b;

标准答案:C

知识点解析:本题考查变量的定义。选项A是两条语句,用分号隔开,只定义了a

为double型;选项B中,不允许这种声明赋值方式,语法错误;选项D中,类型

与变量名之间不加逗号;选项C为正确的。

14、下列运算符函数中肯定不属于类Can的成员函数的是()。

A、intoperator—(Can,Can);

B、Canoperator—(double);

C、intoperator—(Can);

D、Canoperator—(int);

标准答案:A

知识点解析:运算符一至多有2个操作数,如果作为成员函数重载,那么形参表至

多只有一个操作数,选项A中形参表有2个操作数,所以选项A一定不属于类

Can的成员函数,选项B、C、D都可能是Can的成员函数,本题答案为A。

15、一个工作人员可以使用多台计算机,而一台计算机可被多个人使用,则实体工

作人员与实体计算机之间的联系是()。

A、一对一

B、一对多

C、多对多

D、多对一

标准答案:C

知识点解析:根据题干可知,每个工作人员都可以使用多台计算机,而一台计算机

可以被多个工作人员使用,因此是多对多的联系。

16、有如下程序:#includeusingnamespacestd;classInstrument{public:virtual

voidDisplay()=0o);classPiano:publicInstrument!public:voidDisplay(){/*函

数体程序略*/}};intmain(){Instruments;Instrument*p=0;//return

0;}下列叙述中正确的是()。

A、语句Instrument*p=0;编译时出错

B、语句Instruments;编译时出错

C、类Piano中的Display函数不是虚函数

D、类Instrument是一个虚基类

标准答案:B

知识点解析:Instrumenl含有纯虚函数,因此是一个抽象类,而抽象类不能被实例

化,因此定义Instrument对象s时编译出错。

17、下面关于构造函数和析构函数的描述,错误的是()。

A、析构函数中调用虚函数采用静态联编

B、对虚析构函数的调用可以采用动态联编

C、当基类的析构函数是虚函数时,其派生类的析构函数也一定是虚函数

D、构造函数可以声明为虚函数

标准答案:D

知识点解析:构造函数的主要作用是对数据成员初始化。构造函数不能声明为虚函

数,这是因为在执行构造函数时类对象还未完成建立过程,当然谈不上函数与类对

象的关联。

18、当数据库中数据总体逻辑结构发生变化,而应用程序不受影响,称为数据的

A、逻辑独立性

B、物理独立性

C、应用独立性

D、空间独立性

标准答案:A

知识点解析:数据独立性包括物理独立性和逻辑独立性,物理独立性指数据的物理

结构的改变,不会影响数据库的逻辑结构,也不会引起应用程序的改动;逻辑独立

性指数据库的总体逻辑结构的改变,不会导致相应的应用程序的改变。故A选项

正确。

19、将E-R图转换为关系模式时,实体和联系都可以表示为()。

属性

B、键

C、关系

D、域

标准答案:C

知识点。析:从E-R图到关系模式的转换是比较直接的,实体与联系都可以表示

成关系,E—R图中属性也可以转换成关系的属性。

20、下面描述中,不属于软件危机表现的是()。

A、软件过程不规范

B、软件开发生产率低

C、软件质量难以控制

D、软件成本不断提高

标准答案:A

知识点。析:软件危机主要表现在:软件需求的增长得不到满足;软件开发成本和

进度无法控制:软件质量难以保证:软件不可维护或维护程度非常低;软件的成本

不断提高;软件开发生产率的提高赶不上硬件的发展和应用需求的增长。所以选择

Ao

21、建立一个类对象时,系统自动调用

A、析构函数

B、构造函数

C、静态函数

D、友元函数

标准答案:B

知识点解析:本题考查默认构造函数,如果用户定义的类中没有显式的定义任何构

造函数,编译器就会自动为该类型生成默认构造函数,建立一个对象时,系统会自

动执行默认构造函数。

22、由于常对象不能被更新,因此()。

A、通过常对象只能调用它的常成员函数

B、通过常对象只能调用静态成员函数

C、常对象的成员都是常成员

D、通过常对象可以调用任何不改变对象值

标准答案:A

知识点解析:本题考查常对象的基本知识,常对象只能调用它的常成员函数,而不

能调用非const函数,常对象的成员函数不一定都是常成员函数,只需保证其数据

成员是常数据成员即可。所以本题选A。

23、已知枚举类型声明语句为:enumCOLOR{WHITE,YELLOW,GREEN=8,

RED,BLACK=I5);则枚举常量RED的值为

A、2

B、3

C、9

D、10

标准答案:D

知识点解析:枚举类型中,枚举成员可以显式初始化或隐式初始化;默认的情况下

第一个枚举成员赋值为0,后面每个成员赋值比前面大1。所以枚举类型COLOR

中各个成员值分别为:0,1,5,8,9,15。RED为9,答案为C。

24、有如下类声明和函数声明classBase{intm;public:intn;protected:intp;};class

Derived:protectedBase{public:intk;};voidf(Derivedd);则在函数f中通d可访

问的数据成员的个数是

A、1

B、2

C、3

D、4

标准答案:B

知识点解析:保护继承中,基类的public和protected成员在派生类中都是

protected成员,所以类Derived中,public成员为:k,protected成员为:n、p.没

有private成员,m对Derived不可见:Derived对象d可访问的只有public成员,

即k;答案为A。

25、有如下程序:#includeusingnamespacestd;classAA{public:AA(intn){cout<

A、321

B、231

C、213

D、123

标准答案:D

知识点解析:构造函数初始化列表仅指定用于初始化成员的值,并不指定这些初始

化执行的次序;初始化执行的次序是根据类定义中成员的声明顺序完成的,初始化

列表结束后,再执行函数体;程序创建CC对象c,调用CC的构造函数,由于在

类CC中,AA类对象a首先声明,所以先调用AA类的构造函数,完成成员a的

初始化,输出“1”,再调用BB类的构造函数,完成成员b的初始化,输出“2“,最

后执行CC构造函数的函数体,输出“3";答案为D。

26、程序调试的任务是()。

A、设计测试用例

B、验证程序的正确性

C、发现程序中的错误

D、诊断和改正程序中的错误

标准答案:D

知识点解析:程序调试的任务是诊断和改正程序中的错误。

27、下列关于运算符重载的叙述中正确的是

A、跟普通函数一样,可以为重载的运算符函数的参数设置默认值

B、通过重载,可以改变一个运算符原有的优先级和操作数个数

C、只能重载C++中已经有的运算符,不能定义新运算符

D、C++中已有的运算符都可以重载

标准答案:C

知识点解析:本题考查运算符重载,重载不能改变运算符运算对象的个数;不能改

变运算符的优先级别;不能改变运算符的结合性;重载运算符的函数不能有默认

值,否则就改变了运算符参数的个数;不能定义新的运算符,某些运算符不能重

载。所以答案为C。

28、软件需求规格说明书的作用不包括

A、软件验收的依据

B、用户与开发人员对软件要做什么的共同理解

C、软件设计的依据

D、软件可行性研究的依据

标准答案:D

知识点解析:软件需求规格说明书是需求分析阶段的最后成果,是软件开发的重要

文档之一。软件需求规格说明书有以下几个方面的作用。①便于用户、开发人员

进行理解和交流,B正确;②反映出用户问题的结构,可以作为软件开发工作的

基础和依据,C正确;③作为确认测试和验收的依据,A正确。

29、有如下程序:#includeusingnamespacestd;classBase{intx;public:Base(int

n=0):x(n){cout<

A、375

B、357

C、037s

D、0357

标准答案:C

知识点解析:本题考查派生类的构造函数和析构函数,在定义一个派生类的对象

时.,先调用基类的构造函数,然后再执行派生类的构造函数,对象释放时,先执行

派生类的析构函数,再执行基类的析构函数。本题中定义了一个对象dl,先执行

基类的构造函数输出0,再执行派生类的构造函数输出3,然后定义了一个对象

d2(5,7),其中需要调用基类的构造函数输出7,最后输出5,所以答案为C。

30、程序调试的任务是()o

A、设计测试用例

B、验证程序的正确性

C、发现程序中的错误

D、诊断和改正程序中的错误

标准答案:D

知识点解析:程序调试的任务是诊断和改正程序中的错误。

31、有如下类定义:classVechicle{〃基类public:Vechicle(strings):name(s){}

protected:stringname;);_____________________{//Vechicle的派生类public:

Bicycle(suingname):VechicHnaine){}};横线处在失部分为

A^classVechicle:publicBicycle

B、classBicycle:classVcchicle

C、cla$sBicycle:publicVechicle

D^classBicycle:publicclassVechicle

标准答案:c

知识点露析:本题考查如何定义派生类以及派生类对基类成员的访问,声明派生类

的一般形式为:class派生类名:[继承方式]基类名题目中只有公用继承才能使用基

类中name成员,所以C选项正确。

32、在数据库系统中,数据模型包括概念模型、逻辑模型和

A、物理模型

B、空间模型

C、时间模型

D、数据模型

标准答案:A

知识点解析:数据模型按照不同的应用层次分为3种类型:概念数据模型、逻辑数

据模型、物理数据模型,故A选项正确。

33、下列定义语句中,错误的是

A、int*p[10];

B、int*p();

Csint(*p)();

D、intp*;

标准答案:D

知识点解析:本题考查一维数组和指针,A选项为一维指针数组,B、C选项为函

数指针,D选项定义指针方式不对,*号应该在p的左边。所以答案为D。

34、下面不属于黑盒测试方法的是

A、边界值分析法

B、基本路径测试

C、等价类划分法

D、错误推测法

标准答案:B

知识点解析:常用的黑盒测试方法和技术有:等价类划分法、边界值分析法、错误

推测法和因果图等。基本路径测试属于白盒测试,故正确答案为B选项。

35、下列有关函数重载的叙述中,错误的是()。

A、函数重载就是用相同的函数名定义多个函数

B、重载函数的参数列表必须不同

C、重载函数的返回值类型必须不同

D、重教函数的参数可以带有默认值

标准答案:C

知识点解析:所谓函数重载是指同一个函数名可以对应着多个函数的实现。每种实

现对应着一个函数体,这些函数的名字相同,但是函数参数的类型不同,还允许参

数的个数不同,但不能只有函数的返回值类型不同而参数的个数和类型相同的重

载。所以本题答案为C

二、基本操作题(本题共1题,每题1.0分,共7分0)

36、给定程序中,函数fun的功能是:将形参s所指字符串中所有ASCII码值小于

97的字符存入形参t所指字符数组中,形成一个新串,并统计出符合条件的字符个

数作为函数值返回。例如,形参s所指的字符串为:Abe@lx56水,程序执行后t

所指字符数组中的字符串应为:A@156术。注意:部分源程序在文件

BLANK).C中。不得增行或删行,也不得更改程序的结构!试题程序:#include

intfun(char*s,char*t){intn=0;whiie(*s){if(*s<97){/*********found*********

/*(t+n)—[1];n++;)/*********found*********/[2];)*(t+n)~O;/

*********found*********/return[3];}main(){chars[81],t[81];intn;

printf("\nEnterastring:\n");gets(s);n=fun(s,t);prinlf("\nThereare%d

letterwhichASCIIcodeislessthan97:%s\n",n,t):}

标准答案:(I)*s(2)s++(3)n

知识点解析:填空1:判断s所指向的字符串中的字符符合条件时,将当前字符存

放到t指向的字符串中,所以应填*s。填空2:判断完一个字符之后,将字符串的

指针移到下一个位置,所以应填s++。填空3:题目要求函数要返回符合条件的字

符个数n,所以应填n。

三、简单应用题(本题共7题,每题7.0分,共I分。)

37、下列程序中,函数fun的功能是:按顺序给S所指数组中的元素赋予从2开始

的偶数,然后再按顺序对每5个元素求一个平均值,并将这些值依次存放在w所

指的数组中。若S所指数组中元素的个数不是5的倍数,则多余:部分忽略不计。

例如,S所指数组有14个元素,则只对前10个元素进行处理,不对最后的4个元

素求平均值。请改正程序中的错误,使它能得出正确的结果。注意:不要改动

main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include#define

SIZE20fun(double*s,double*w){inik,i;doublesum;for(k.=2,i=0;i

标准答案:(l)sum=0.0;(2)if((i+l)%5==0)

知识点解析:⑴变量sum书写错误。(2)循环条件if(i+l%5=0)是一个运算逻辑错

误,应先计算i+1,再对5求余。

四、综合应用题(本题共7题,每题7.0分,共[分0)

38、请编写函数fun,其功能是:将放在字符串数势中的M个字符串(每串的长度

不超过N),按顺序合并组成一个新的字符串。例如,若字符串数组中的M个字符

串为{“AAAA”,“BBBBBBB”,“CC”},则合并后的字符串内容应该是

“AAAABBBBBBBCC”。注意:部分源程序给出如下。请勿改动主函数main和其

他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程

序:#include#include#defineM3#defincN20voidfun(chara[M][N],char*b){}

voidmain。{charW|M|[N仁{“AAAA”,“BBBBBBB",“CC"};char

a[l00]=I'#####################");intijprintf(nThestring:\n");for(i=0:i

标准答案:voidfun(chara[M][N],char*b){inti,j,k=0:for(i=0;i

知识点解析:本题考查:字符串连接操作。本程序中第1个for循环的作用是对二

维数组行的控制,第2个循环的作用是从同一行中取出字符并存放到一维数组b

中,语句是b[k++]=a[i][j];o

国家二级(C++)机试模拟试卷第3套

一、选择题(本题共38题,每题1.0分,共38分。)

1、算法的有穷性是指()。

A、算法程序的运行时间是有限的

B、算法程序所处理的数据量是有限的

C、算法程序的长度是有限的

D、算法只能被有限的用户使用

标准答案:A

温馨提示

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

评论

0/150

提交评论