admin 管理员组

文章数量: 1087649


2024年12月31日发(作者:正弦定理和余弦定理)

国家二级C++机试(选择题)-试卷27

(总分:80.00,做题时间:90分钟)

一、 选择题(总题数:40,分数:80.00)

1.下列关于栈叙述正确的是( )。

(分数:2.00)

A.栈顶元素最先能被删除 √

B.栈顶元素最后才能被删除

C.栈底元素永远不能被删除

D.栈底元素最先被删除

解析:解析:栈是先进后出的数据结构,所以栈顶元素最后入栈却最先被删除。栈底元素最先入栈却最后

被删除。所以选择A。

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

(分数:2.00)

A.在栈中,栈中元素随栈底指针与栈顶指针的变化而动态变化

B.在栈中,栈顶指针不变,栈中元素随栈底指针的变化而动态变化

C.在栈中,栈底指针不变,栈中元素随栈顶指针的变化而动态变化 √

D.以上说法均不正确

解析:解析:栈是先进后出的数据结构,在整个过程中,栈底指针不变,入栈与出栈操作均由栈顶指针的

变化来操作,所以选择C。

3.某二叉树共有7个结点,其中叶子结点只有1个,则该二叉树的深度为(假设根结点在第1层)( )。

(分数:2.00)

A.3

B.4

C.6

D.7 √

解析:解析:根据二叉树的基本性质3:在任意一棵二叉树中,多为0的叶子结点总比度为2的结点多一

个,所以本题中度为2的结点为1-1=0个,所以可以知道本题目中的二叉树的每一个结点都有一个分支,

所以共7个结点共7层,即度为7。

4.软件按功能可以分为应用软件、系统软件和支撑软件(或工具软件)。下面属于应用软件的是( )。

(分数:2.00)

A.学生成绩管理系统 √

B.C语言编译程序

操作系统

D.数据库管理系统

解析:解析:软件按功能可以分为:应用软件、系统软件、支撑软件。操作系统、编译程序、汇编程序、

网络软件、数据库管理系统都属于系统软件。所以B)、C)、D)都是系统软件,只有A)是应用软件。

5.结构化程序所要求的基本结构不包括( )。

(分数:2.00)

A.顺序结构

跳转 √

C.选择(分支)结构

D.重复(循环)结构

解析:解析:1966年Boehm和Jacopini证明了程序设计语言仅仅使用顺序、选择和重复三种基本控制结

构就足以表达出各种其他形式结构的程序设计方法。

6.下面描述中错误的是( )。

(分数:2.00)

A.系统总体结构图支持软件系统的详细设计 √

B.软件设计是将软件需求转换为软件表示的过程

C.数据结构与数据库设计是软件设计的任务之一

图是软件详细设计的表示工具

解析:解析:详细设计的任务是为软件结构图中而非总体结构图中的每一个模块确定实现算法和局部数据

结构,用某种选定的表达工具表示算法和数据结构的细节,所以A)错误。

7.负责数据库中查询操作的数据库语言是( )。

(分数:2.00)

A.数据定义语言

B.数据管理语言

C.数据操纵语言 √

D.数据控制语言

解析:解析:数据定义语言:负责数据的模式定义与数据的物理存取构建;数据操纵语言:负责数据的操

纵,包括查询及增、删、改等操作;数据控制语言:负责数据完整性、安全性的定义与检查以及并发控制、

故障恢复等功能。

8.一个教师可讲授多门课程,一门课程可由多个教师讲授。则实体教师和课程间的联系是( )。

(分数:2.00)

A.1:1联系

B.1:m联系

C.m:1联系

D.m:n联系 √

解析:解析:因为一个教师可讲授多门课程,而一门课程又能由多个老师讲授所以他们之间是多对多的关

系,可以表示为m:n。

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

(分数:2.00)

A.自然连接

B.并

C.交

D.差 √

解析:解析:关系T中的元组是关系R中有而关系S中没有的元组的集合,即从关系R中除去与关系S中

相同元组后得到的关系T。所以做的是差运算。

10.定义无符号整数类为UInt,下面可以作为类UInt实例化值的是( )。

(分数:2.00)

A.-369

B.369 √

C.0.369

D.整数集合{1,2,3,4,5}

解析:解析:只有B)选项369可以用无符号整数来表示和存储。A)选项-369有负号,选项C)0.369是小

数都不能用无符号整数类存储。选项D)是一个整数集合得用数组来存储。

11.下列字符串中可以用作 C++ 标识符的是

(分数:2.00)

A.1481var

-1481

D._123 √

解析:解析:用来表示变量、符号常量、函数、数组类型等实体名字的有效字符序列称为标识符,标识符

由字母、数字、和下划线3种字符组成,且第一个字符必须为字母或者下划线。C选项为C++的特定标识符,

只有D选项正确。

则由关系R和S得到关系T的操作是( )。

12.下列枚举类型的定义中,包含枚举值3的是

(分数:2.00)

test {LEFT, UP, RIGHT,DOWN}; √

test {LEFT, UP=5, RIGHT, DOWN};

test {LEFT=-1, UP,RIGHT, DOWN};

test {LEFT, UP, RIGHT=6, DOWN};

解析:解析:枚举常量的定义 enum 枚举类型名{常量1,常量2,常量3,.......};A选项包含的枚举值

为0、1、2、3,B选项包含的枚举值为4、5、6、7,C选项包含的枚举值为-1、0、1、2,D选项包含的枚

举值为4、5、6、7,所以A选项正确。

13.有如下程序段: int i=1; while(1) { i++; if(i == 30) break; if(i%3 == 0) cout << '*'; }执行

这个程序段输出字符 * 的个数是

(分数:2.00)

A.30

B.8

C.9 √

D.10

解析:解析:本题中while循环中当i为3的倍数时输出*,而i为30时跳出循环,所以输出9个*,答案

为C。

14.已知数组 arr 的定义如下: int arr[5] = {1,2,3,4,5};下列语句中输出结果不是3的是

(分数:2.00)

<< *arr+2 <

<< *(arr+2)<

<< arr[2] <

<< *arr <

解析:解析:本题考查以为数组和指针,一维数组名可以作为一个指针,指向数组的第一个元素,题目中

要求输出3,那么就是指向了数组的第三个元素,*arr表示数组的第一个元素1,所以输出不出来3,所以

选择D选项。

15.下列叙述中,错误的是

(分数:2.00)

是一个逻辑型常量

B.x 是一个字符型常量 √

C.100 是一个 int 常量

D.2.71828 是一个 double 常量

解析:解析:考查常量定义,B选项中"x"为一个字符串,'x'才是字符常量,所以B选项错误。

16.在 C++ 中,用来取代C中的预处理宏函数的是

(分数:2.00)

A.重载函数

B.友元函数

C.递归函数

D.内联函数 √

解析:解析:内联函数具有一般函数的特性,它与一般函数所不同之处公在于函数调用的处理。一般函数

进行调用时,要将程序执行权转到被调用函数中,然后再返回到调用它的函数中;而内联函数在调用时,

是将调用表达式用内联函数体来替换,内联函数被发明出来就是为了取代C中的宏,所以答案为D。

17.通过运算符重载,可以改变运算符原有的

(分数:2.00)

A.优先级

B.结合性

C.操作数类型 √

D.操作数个数

解析:解析:本题考查运算符重载,重载不能改变运算符运算对象的个数;不能改变运算符的优先级别;

不能改变运算符的结合性;重载运算符的函数不能有默认值,否则就改变了运算符参数的个数;不能定义

新的运算符,某些运算符不能重载。所以答案为C。

18.在函数中,定义一个变量时,默认的存储类型是

(分数:2.00)

er

解析:解析:extern可以置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇

到此变量和函数时在其他模块中寻找其定义。在C++语言中 auto 被解释为一个自动存储变量的关键字,

也就是申明一块临时的变量内存。register修饰符暗示编译程序相应的变量将被频繁地使用,如果可能的

话,应将其保存在CPU的寄存器中,以加快其存储速度。在变量前,加上关键字static,该变量就被定义

成为一个静态变量,该变量在全局数据区分配内存,所以答案为B。

19.下列运算符函数中肯定不属于类 Can 的成员函数的是

(分数:2.00)

operator- (Can);

operator - ();

operator - (Can, Can); √

operator - (int);

解析:解析:答案C的形式是重载为友元函数,而友元函数不属于类的成员函数。所以重载为友元函数需

要两个参数,通过参数传递的方式得到参加运算的两个对象。其他的是重载为类的成员函数,由于对象本

身代表了一个操作数,所以其参数只需要一个,其为参加运算的另一个操作数。

20.关于函数声明格式中的,下列叙述错误的是

(分数:2.00)

A.有可能包含关键字 true √

B.有可能包含自定义标识符

C.有可能包含字符 *

D.有可能包含关键字 float

解析:解析:本题考查函数返回类型,函数返回类型可以是普通常量型的,可以返回指针以及自定义类型,

但是不能包含关键字true,所以A选项错误。

21.下列关于运算符重载的叙述中,错误的是

(分数:2.00)

A.不能通过运算符重载在 C++ 中创建新的运算符

B.赋值运算符只能重载为成员函数

C.运算符函数重载为类的成员函数时,第一操作数是该类对象

D.重载类型转换运算符时,应声明返回类型为 void √

解析:解析:本题考查运算符重载,重载不能定义新的运算符,且赋值运算符只能重载为成员函数,重载

类型转换运算符时,声明返回类型不一定是void,所以D选项错误。

22.下列运算符中,不能被重载的是

(分数:2.00)

A.||

B.+=

C.. √

D.--

解析:解析:本题考查运算符重载,不能重载的运算符只有5个:.、.*、::、sizeof、?: 所以本题选择

C。

23.有如下两个类定义: class AA{}; class BB{ AA v1,*v2; BB v3; int *v4; };其中有一个成员变量的

定义是错误的,这个变量是

(分数:2.00)

A.v1

B.v2

C.v3 √

D.v4

解析:解析:本题考查类的定义,类定义中不能包含自己本身的对象,否则会引起像无限递归的问题,结果

就是内存被消耗殆尽。所以C选项错误。

是一个类,且有如下语句: Sample a[2], *p = new Sample;执行这个语句时调用Sample类的

构造函数的次数是

(分数:2.00)

A.0

B.1

C.2

D.3 √

解析:解析:本题考查默认构造函数,题中定义了二维对象数组以及一个指针对象,那么构造函数就执行

3次,答案为D。

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

(分数:2.00)

A.析构函数 √

B.构造函数

C.静态函数

D.友元函数

解析:解析:当对象脱离其作用域时(例如对象所在的函数已调用完毕),系统自动执行析构函数。析构

函数往往用来做"清理善后" 的工作。所以选择A。

26.下列关于派生类构造函数和析构函数的叙述中,错误的是

(分数:2.00)

A.如果基类中没有缺省构造函数,那么派生类必须定义构造函数

B.派生类的构造函数会隐含调用基类的构造函数

C.在建立派生类对象时,先调用基类的构造函数,再调用派生类的构造函数

D.在销毁派生类对象时,先调用基类的析构函数,再调用派生类的析构函数 √

解析:解析:本题考查派生类的构造函数和析构函数的调用顺序,在销毁派生类对象时,先调用派生类的

析构函数,再调用基类的析构函数,所以D选项错误。

27.派生类的成员函数不能访问的基类的成员是

(分数:2.00)

A.公有成员和保护成员

B.公有成员

C.保护成员

D.私有成员 √

解析:解析:本题考查派生类对基类成员的访问属性,派生类无论何种继承,派生类的成员函数都不能访

问基类的私有成员,所以D选项错误。

28.有如下类定义: class AA{ int a; public: AA(int n=0):a(n){} }; class BB :public AA{ public:

BB(int n) __________ };其中横线处缺失部分是

(分数:2.00)

A.:AA(n){} √

B.:a(n){}

C.{a(n);}

D.{a=n;}

解析:解析:本题考查派生类的构造函数,其一般形式为: 派生类构造函数名(总参数表列) : 基类构

造函数名(参数表列) 所以只有A选项正确。

29.有如下类定义: class Box{ public: double GetLength() { return length; } double GetWidth();

double GetHeight(); private: double length,width,height; }; inline double Box::GetWidth()

{ return width; } double Box::GetHeight() { return height; }在成员函数 GetLenth、GetWidth 和

GetHeight 中,内联函数有

(分数:2.00)

A.3个

B.2个 √

C.1个

D.0个

解析:解析:在类体中定义的成员函数,C++系统会自动将它们作为内联函数处理,而在类外定义的成员函

数,系统并不把它们默认为内联函数,使用inline也是内联函数,所以共有2个内联函数GetLength和

GetWidth,B选项正确。

30.已知TV是一个类,并有函数func定义如下: void func(){ TV li,*net[2],company[3]; }则在调用

func() 后,TV 类的析构函数被调用的次数是

(分数:2.00)

A.2次

B.3次

C.4次 √

D.6次

解析:解析:本题考查默认析构函数,题中定义了对象、包含三个元素的一维对象数组,所以析构函数执

行4次,而对象指针数组并没有实际占用空间,所以不执行析构函数。

31.有如下程序: #include #include using namespace std; class MyBag{ public: MyBag(string

br="ABC"):brand(br) { cout<

main(){ _________________________ return 0; } 若运行时的输出结果不是"ABC ABC",则横线处缺失的

语句是

(分数:2.00)

arrays[2];

* arrays=new MyBag[2];

arrays[2]={MyBag("ABC")};

arrays[2]={MyBag("CityLife"),MyBag("Micky")}; √

解析:解析:本题考查构造函数的应用,题目中A、B、C、D,都定义了包含两个元素的一维数组,A、B、

C都执行题目中的构造函数,并且输出"ABC ABC ",而D选项中由于构造函数参数不为ABC,所以输出为

"CityLife Micky "

32.有如下程序: #include using namespace std; class TV{ public: TV(int s=41):size(s) { } void

Print() { cout<<'/'<<'N'<<<'/'<<'C'<<<'/'<<'S'<

(分数:2.00)

A./N41/S54 √

B./N41/C54

C./C41/S54

D./C41/C54

解析:解析:本题考查构造函数相关知识,本题中定义一个对象room1,执行时执行构造函

数给size赋值为41,然后执行void Print() { cout<<'/'<<'N'<

33.有如下类定义: class Person{ public: Person(string s):name(s) { } protected: string name; };

class Father:virtual public Person{ public: Father(string s):Person(s) { } }; class

Mother:virtual public Person{ public: Mother(string s):Person(s) { } }; class Child:public

Father,public Mother,virtual public Person{ public: Child(string s1,string s2,string

s3):Mother(s1),Father(s2),Person(s3) { } };在建立派生类Child的对象时,其基类Father、Mother

和Person的构造函数的调用顺序为

(分数:2.00)

,Mother,Person

,Father,Person

,Father,Mother √

,Person,Mother,Person,Person

解析:解析:执行派生类构造函数的顺序是: 1、调用基类构造函数,2、调用子对象构造函数,3、再执

行派生类构造函数,所以本题中先调用基类person构造函数,然后执行father构造函数,最后执行mother

构造函数。

34.有如下程序: #include using namespace std; class Point{ public: Point(int xx=0,int

yy=0):x(xx),y(yy) { } protected: void SetXY(int xx,int yy) { x=xx; y=yy; } private: int x,y; };

class Circle:public Point{ public: Circle(int r):radius(r) { } void Set(int r,int x,int y)

{ radius=r; SetXY(x,y); } //① void Print() const { cout<

(分数:2.00)

A.①

B.② √

C.③

D.④

解析:解析:本题考查对象成员的引用,派生类公用继承基类,但是不能继承基类的私有成员,所以执行

void Print() const { cout<

35.有如下程序: #include #include using namespace std; class Appliance{ public: Appliance(string

t="A"):type(t) { cout<<<

(分数:2.00)

A.041

B.0T41

C.A0A41

D.A0T41 √

解析:解析:执行派生类构造函数的顺序是: 1、调用基类构造函数,2、调用子对象构造函数,3、再执

行派生类构造函数,所以本题中定义room1时,先调用基类构造函数输出A,然后执行TV的构造函数输出

0,定义room2时,调用TV的构造函数,输出T41,所以结果为A0T41,答案为D选项。

36.有如下程序: #include #include using namespace std; class Instrument{ public:

Instrument(string t="乐器",string n="无名"):type(t),name(n) { } virtual string GetType() const

{ return "乐器"; } string GetName() const { return "无名"; } protected: string type,name; }; class

Piano:public Instrument{ public: Piano(string n,string t="钢琴"):Instrument(t,n) { } string

GetType() const { return "钢琴"; } string GetName() const { return name; } }; int main(){ Instrument

*pi=new Piano("星空"); cout

(分数:2.00)

A.乐器-星空

B.乐器-无名

C.钢琴-星空

D.钢琴-无名 √

解析:解析:本题考查虚函数的运用,本题中基类Instrument,派生类Piano,其中虚函数为GetType,

当定义Instrument *pi=new Piano("星空")时,调用派生类的GetType函数,得到type为钢琴,执行GetName

时只能执行基类的这个函数,输出无名,所以输出钢琴-无名。选项D正确。

37.下列关于模板形参的叙述中,错误的是

(分数:2.00)

A.模板形参表必须在关键字 template 之后

B.模板形参表必须用括弧( )括起来 √

C.可以用 class 修饰模板形参

D.可以用 typename 修饰模板形参

解析:解析:本题考查模板的定义,使用的括号为<>,所以B选项错误。

38.有如下模板声明: template class A; 下列声明中,与上述声明不等价的是

(分数:2.00)

te class A;

te class A;

te class A;

te < typename T1, T2> class A; √

解析:解析:本题考查模板的定义,A、B、C选项中两个参数都为typename或class,而D选项中第二个

参数不是typename或class,所以与题目中不等价,D选项错误。

39.下列关于输入流类成员函数 getline() 的叙述中,错误的是

(分数:2.00)

A.该函数是用来读取键盘输入的字符串的 √

B.该函数读取的字符串长度是受限制的

C.该函数读取字符串时,遇到终止符便停止

D.该函数读取字符串时,可以包含空格

解析:解析:本题考查字符输入的流成员函数getline,函数原型为: istream& getline ( istream &is ,

string &str , char delim ); 将输入流is中读到的字符存入str中,直到遇到终结符delim才结束。对

于第一个函数delim是可以由用户自己定义的终结符;对于第二个函数delim默认为 '/n'(换行符)。 函

数在输入流is中遇到文件结束符(EOF)或者在读入字符的过程中遇到错误都会结束。 在遇到终结符delim

后,delim会被丢弃,不存入str中。在下次读入操作时,将在delim的下个字符开始读入。所以A选项

错误。

40.有如下程序 #include #include using namespace std; int

main( ){ cout<

(分数:2.00)

cision(3)

l('*')

(8) √

解析:解析:本题考查输入输出格式的控制,可以看出**12.345和**34.567字段宽度都为8,所以遗漏处

为setw(8),D选项正确。


本文标签: 函数 解析 本题