国家二级C++机试(选择题)模拟试卷305附答案解析

国家二级C++机试(选择题)模拟试卷305

选择题

1.结构化程序设计的基本原则不包括( )。(A)

A. 多态性

B. 自顶向下

C. 模块化

D. 逐步求精

解析:结构化程序设计的思想包括:自顶向下、逐步求精、模块化、限制使用goto语句,所以选择A。

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

A. 线性表是线性结构

B. 栈与队列是非线性结构

C. 线性链表是非线性结构

D. 二叉树是线性结构

解析:线性表是最简单的、最常用的一种线性结构。所谓线性链表指的是采用链式存储结构的线性表。栈和队列其实是一种特殊的线性表。树是一种简单的非线性结构,二叉树是树的一种。

3.支持子程序调用的数据结构是( )。(A)

A. 栈

B. 树

C. 队列

D. 二叉树

解析:栈是一种限定在一端进行插入与删除的线性表。在主函数调用子函数时,要首先保存主函数当前的状态,然后转去执行子函数,把子函数的运行结果返回到主函数调用子函数时的位置,主函数再接着往下执行,这种过程符合栈的特点。所以一般采用栈式存储方式。

4.按照“后进先出”原则组织数据的数据结构是(B)

A. 队列

B. 栈

C. 双向链表

D. 二叉树

解析:栈是限定在一端进行插入与删除的线性表。在栈中,允许插入与删除的一端称为栈顶,不允许插入与删除的另一端称为栈底。栈顶元素总是最后被插入的元素,也是最先被删除的元素:栈底元素总是最先被插入的元素,也是最后才能被删除的元素。即栈是按照“后进先出”(LastIn First Out,简称LIFO)或“先进后出”(First In Last Out,简称FILO)的原则组织数据的。因此,栈也称为“后进先出表”或“先进后出”表。

5.下列对队列的描述中正确的是( )。(D)

A. 队列属于非线性表

B. 队列按“先进后出”原则组织数据

C. 队列在队尾删除数据

D. 队列按“先进先出”原则组织数据

解析:队列(queue)是指允许在一端进行插入、而在另一端进行删除的线性表。允许插入的一端称为队尾;允许删除的一端称为队头。在队列这种数据结构中,最先插入的元素将最先能够被删除:反之,最后插入的元素将最后才能被删除。因此,队列又称“先进先出”或“后进后出”的线性表。

6.—棵二叉树共有25个结点,其中5个是叶子结点,则度为l的结点数为( )。(A)

A. 16

B. 10

C. 6

D. 4

解析:根据二叉树的性质,在任意二叉树中,度为0的结点(即叶子结点)总是比度为2的结点多一个,故此度为l的结点个数:总结点数·叶子节点数.度为2的节点数=25—5—4=16。

7.以下不正确的是( )。(C)

A. 语句for(i=0;;i++)表示无限循环

B. for(;;)表示无限循环

C. for()表示无限循环

D. while(1)表示无限循环

解析:选项C)是一个错误的for语句格式,for()语句中三个表达式可以省略。但是两个分号(;)不能省略。

8.下列描述中,不符合良好程序设计风格要求的是( )。(A)

A. 程序的效率第一,清晰第二

B. 程序的可读性好

C. 程序中要有必要的注释

D. 输入数据前要有提示信息

解析:一般来讲,程序设计风格是指编写程序时所表现出的特点、习惯和逻辑思路。程序设计风格总体而言应该强调简单和清晰,程序必须是可以理解的。著名的“清晰第一,效率第二”的论点已成为当今主导的程序设计风格。

9.下列有关内联函数的叙述中,正确的是( )。(C)

A. 内联函数在调用时发生控制转移

B. 内联函数必须通过关键字inline来定义

C. 内联函数是通过编译器来实现的

D. 内联函数函数体的最后一条语句必须是return语句

解析:此题考查的是内联函数的概念。在调用时,内联函数会像宏函数一样的展开,将调用表达式用内联函数体来替换,所以它没有一般函数的参数压栈和退栈操作,所以选项A错误;即使没有使用inline说明,编译器也会将在类的说明部分定义的函数认定为内联函数,所以选项B错误;内联函数只是比普通函数有更高的执行效率。

10.有三个关系R,S和T如下:

(D)

A. 选择

B. 投影

C. 交

D. 并

解析:并关系T中包含了关系R与S中的所有元组,所以进行的是并的运算。

11.下面属于白盒测试方法的是( )。(B)

A. 等价类划分法

B. 逻辑覆盖

C. 边界值分析法

D. 错误推测法

解析:白盒测试的主要方法有逻辑覆盖、基本路径测试等。

12.在C++中,实现封装性需借助于( )。(B)

A. 枚举

B. 类

C. 数组

D. 函数

解析:此题考查的是C++语言中对象概念的理解。所谓封装性是指将数据和算法捆绑成一个整体,这个整体就是对象。C++语言通过建立用户定义类型“类”来支持封装性和信息隐藏。

13.下列字符串中,正确的C++标识符是( )。(D)

A. foo-1

B. 2b

C. new

D. _256

解析:此题考查的是C++语言中标识符的定义。标识符由字母、数字或下划线构成,但第一个字符必须是字母或下划线;标识符中大小写字母是不同的;用户定义标识符时,不允许采用系统的关键字。

14.下列特征中不是面向对象方法的主要特征的是( )。(D)

A. 多态性

B. 标识惟一性

C. 封装性

D. 耦合性

解析:面向对象设计方法与面向过程设计方法有本质的不同,其基本原理是:使用现实世界的概念抽象地思考问题从而自然地解决问题。其特点包括;标识惟一性、多态性、封装性、模块独立性、继承和多态性好。

15.一间宿舍可住多个学生,则实体宿舍和学生之间的联系是(B)

A. 一对一

B. 一对多

C. 多对一

D. 多对多

解析:两个实体集间的联系可以有下面几种:一对一的联系、一对多或多对一的联系和多对多的联系。由于一个宿舍可以住多个学生,所以它们的联系是一对多联系。

16.有如下程序段:

int i=1;

while(1){

i++;

if(i==10) break;

if(i%2==0) cout<<’*’;

}

执行这个程序段输出字符*的个数是( )。(C)

A. 10

B. 3

C. 4

D. 5

解析:这段程序代码的功能是计算在1~10(包括10)之间偶数i的个数,如果整数i为偶数,则输出一个‘*’,共有4个偶数,所以共输出4个‘*’。

17.下列模板声明中,有语法错误的是( )。

B

解析:本题考查模板的定义,B选项中x为T类型的,n为im型的,但是x*n就不一定是T类型的,所以错误答案为B。

18.己知函数FA调用FB,若要把这两个函数定义在同一个文件中,则( )。(D)

A. FA必须定义在FB之前

B. FB必须定义在FA之前

C. 若FA定义在FB之后,则FA的原型必须出现在FB的定义之前

D. 若FB定义在FA之后,则FB的原型必须出现在FA的定义之前

解析:在C++中,在调用任何函数之前,必须确保它已有原型说明。函数原型说明通常放在程序文件的头部,以使得该文件中所有函数都能调用它们。在本题中,当函数FA调用FB时,函数FB可以定义在FA的后面,但是FB的原型必须出现在FA的定义之前,因而选项D)为正确答案。

19.若AA为一个类,a为该类的私有整型数据成员,getA()为该类的一个非静态公有成员函数,功能是返回a的值。如果x为该类的一个对象,要在类外访问x对象中a的值,正确的访问格式为( )。(B)

A. AA.getA()

B. x.getA()

C. x.A

D. AA::a

解析:要在类外访问x对象中a的值,必须调用类的非静态公有成员函数getA()。

20.下列枚举类型的定义中,包含枚举值3的是( )。

A

解析:声明枚举类型的语法格式为:enum{};包含多个枚举值,它们用逗号隔开,每个枚举值就是一个枚举常量。枚举值有两种定义形式:一是;二是=。关于枚举类型有以下4点说明:

①一个enum类型实际上是int类型的一个子集,其每一个枚举值代表一个整数。

②n个枚举值全部未赋常量值时,它们自左至右分别与整数0,1,…n—1对应。

③若第i个枚举值赋常量值为m,则其未赋常量值的后续枚举值分别与整数m+1,m+2…对应,直到下一个赋了值的枚举值或结束。因此,为枚举值赋的整型常量值应从左到右递增。

④枚举类型的声明也可作为组声明若干整型符号常量的方法。也就是说,把每个要声明的符号常量作为一个枚举值,将各个枚举值合在一起定义成一个枚举类型。

对于本题来说,在选项A)中,对4个枚举值没有赋常量值,所以它们从左到右与整数0,1,2,3相对应。因而选项A)为正确选项。

21.有如下程序:

#include<iostream>

using namespace std;

class Base{

public:

Base(int x=0):valB(x){cout<<valB;}

~Base(){cout<<valB;)

private:

int valB;

};

class Derived:public Base{

public:

Derived(int x=0,int y=0):Base(x),valD(y){cout<<valD;}

~Derived(){cout<<valD;}

private:

int valD;

};

int main(){

Derived obj12(2,3);

return 0;

}

运行时的输出结果是( )。(A)

A. 2332

B. 2323

C. 3232

D. 3223

解析:在主函数中创建类Derived对象obj12(2,3)时,因为类Derived是从基类Base派生而来,所以首先调用基类的构造函数,输出2,再调用派生类构造函数,输出3。当主函数运算结果时,首先调用派生类的析构函数,输出3,再调用基类的析构函数输出2。所以输出结果为2332。

22.有如下类定义

class Animal{

public:

virtual void Name()=0;

};

class Koala: public Animal{

public:

void Name(){/*函数体略*/}

};

关于上述类定义,下列描述中错误的是( )。(D)

A. 类Koala是类Animal的派生类

B. 类Koala中的Name函数是一个虚函数

C. 类Animal中的Name函数是一个纯虚函数

D. 语句“Animal a;”能够建立类Animal的一个对象a

解析:在类Animal定义了纯虚函数Name(),所以类Animal就是一个抽象类,而抽象类是不能够建立对象的。

23.下列关于赋值运算符“=”重载的叙述中,正确的是( )。(A)

A. 赋值运算符只能作为类的成员函数重载

B. 默认的赋值运算符实现了“深层复制”功能

C. 重载的赋值运算符函数有两个本类对象作为形参

D. 如果已经定义了复制(拷贝)构造函数,就不能重载赋值运算符

解析:赋值运算符“=”只能作为成员函数重载。

24.若磁盘上己存在某个文本文件,其全路径文件名为d:\ncre\test.txt,下列语句中不能打开该文件的是( )。(A)

A. ifstream file(\

B. ifstream file(\

C. ifstream file;file.open(\

D. ifstream*pFile=new

解析:此题考查的是转义字符。在字符常量或字符串中,以“\”开头的一系列字符被看做是一个转义字符。要表示“\”字符,必须使用转义字符“\\”。

25.有函数模板声明和一些变量定义如下:

templateT1 sum(T2,T3);

double d1.d2;

则下列调用中,错误的是( )。(D)

A. sum(d1,d2);

B. sum(d1,d2);

C. sum(d1,d2);

D. sum(d1,d2);

解析:虚拟类型参数T1没有出现在模板函数的形参表中,因此在调用时不可能从模板函数的实参表中获得相应的信息,因此T1无法省略。而在选项D)中省略了。

资源下载《国家二级C++机试(选择题)模拟试卷305附答案解析.doc》 文档下载价格为20下载币,请先
将本套试题Word文档或文章下载到电脑,方便收藏和打印
资源下载
《国家二级C++机试(选择题)模拟试卷305附答案解析.doc》
试题含答案和解析word文档下载价格:20 下载币
《国家二级C++机试(选择题)模拟试卷305附答案解析.doc》
试题含答案和解析word文档VIP优惠:免费
将本套试题Word文档或文章下载到电脑,方便收藏和打印
0

评论0

没有账号? 注册  忘记密码?