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

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

选择题

1.对下列二叉树

(C)

A. DYBEAFCZX

B. YDEBFZXCA

C. ABDYECFXZ

D. ABCDEFXYZ

解析:二叉树前序遍历的简单描述:若二叉树为空,则结束返回;否则:①访问根结点;②前序遍历左子树;③前序遍历右子树。可见,前序遍历二叉树的过程是一个递归的过程。根据题目中给出的二叉树的结构可知前序遍历的结果是ABDYECFXZ。

2.下列重载函数中,正确的是( )。(B)

A. void fun(int a,float b);void fun(int C,float d)

B. void fun(int a,float b);void fun(float a,int b)

C. float fun(int a,float b);int fun(int b,float a)

D. int fun(int a,int b);float fun(int a,intb)

解析:所谓函数重载是指同一函数名可以对应多个函数实现。进行函数重载时,要求同名函数在参数个数上不同,或者参数类型上不同。

3.对长度为10的线性表进行冒泡排序,最坏情况下需要比较的次数为( )。(C)

A. 9

B. 10

C. 45

D. 90

解析:线性表的长度为n,最坏情况下冒泡排序需要比较的次数为n(n-1)/2。

4.下列有关继承和派生的叙述中,正确的是( )。(D)

A. 如果一个派生类私有继承其基类,则该派生类对象不能访问基类的保护成员

B. 派生类的成员函数可以访问基类的所有成员

C. 基类对象可以赋值给派生类对象。

D. 如果派生类没有实现基类的一个纯虚函数,则该派生类是一个抽象类

解析:如果派生类私有继承基类,不能访问基类中的私有成员,所以A)、B)是错误的。派生类是对基类的具体化,所以C)错误的。如果派生类没有实现基类的一个纯虚函数,则该派生类是一个抽象类,即选择D)。

5.数据流图用于抽象描述一个软件的逻辑模型,数据流图由一些特定的图符构成。下面图符名标识的图符不属于数据流图合法图符的是( )。(A)

A. 控制流

B. 加工

C. 数据存储

D. 源和潭

解析:数据流图中的主要图形元素有加工(转换)、数据流、存储文件(数据源)、源和潭等。

6.数据库管理系统中负责数据模式定义的语言是( )。(A)

A. 数据定义语言

B. 数据管理语言

C. 数据操纵语言

D. 数据控制语言

解析:数据库管理系统一般提供相应的数据语言,它们分别是:数据定义语言,负责数据的模式定义与数据的物理存取构建;数据操纵语言,负责数据的操纵,包括查询及增、删、改等操作;数据控制语言,负责数据完整性、安全性的定义与检查以及并发控制、故障恢复等功能。

7.设有表示学生选课的三张表,学生S(学号,姓名,性别,年龄,身份证号),课程C(课号,课名),选课SC(学号,课号,成绩),则表SC的关键字(键或码)为( )。(C)

A. 课号,成绩

B. 学号,成绩

C. 学号,课号

D. 学号,姓名,成绩

解析:关键字是指属性或属性的组合,其值能够唯一地标识一个元组,而在SC中学号和课号的组合可以对元组进行唯一的标识。

8.有如下类定义:

class XX{

int xdata;

public:

XX(int n=O):xdata(n){)

);

class YY:public XX{

int ydata;

public:

YY(int m=0,int n=O):XX(m),ydata(n){)

);

YY类的对象包含的数据成员的个数是( )。(B)

A. 1

B. 2

C. 3

D. 4

解析:因为类XX包括一个数据成员xdata,而类YY继承自类XX,所在类YY中也包含数据成员xdata,同时类YY中也定义了其本身的数据成员ydata,因而YY类的对象包含的数据成员的个数是2。

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

A. 公有成员和保护成员

B. 公有成员

C. 私有成员

D. 保护成员

解析:此题考查的是派生类对基类成员的访问。派生类对基类的各个成员的访问能力与继承方式无关,其成员不能访问基类中的私有成员,可以访问基类的公有成员和保护成员。

10.下列叙述中,错误的是( )。(B)

A. false是一个逻辑型常量

B. b是一个字符型常量

C. 365是一个int常量

D. 3.1415926是一个double常量

解析:字符常量简称字符,它以单引号作为起止符号,中间有一个或若干个字符。或者以“\”开头的包括多个字符的字符序列也符合规定的字符常量。

11.有如下程序:

#include<iostream>

using namespace std;

class TestClass

{

public;

TestClass(){cout<<\(A)

A. BBBfDD

B. BBDfDDDf

C. DD

D. DDBBBf

解析:TestClass是TestClass1的基类。由主函数main入手,定义TestClass1的对象d,调用基类TestClass构造函数输出BB,调用基类成员函数fun输出Bf,然后调用派生类的构造函数,输出DD。

12.if语句的语法格式可描述为:

格式1:if(<条件>)<语句>

格式2:if(<条件>)<语句1> else<语句2>

关于上面的语法格式,下列表述中错误的是( )。(A)

A. <条件>部分可以是一个if语句,例如if(if(a==0)…)…

B. <语句>部分可以是一个if语句,例如if(…)if(…)…

C. 如果在<条件>前加上逻辑非运算符!并交换<语句1>和<语句2>的位置,语句功能不变

D. <语句>部分可以是一个循环语句,例如if(…)while(…)…

解析:此题考查的是if语句。If语句的条件部分是一个表达式而不是语句,因此选项A叙述错误。

13.下列循环语句中有语法错误的是( )。(D)

A. int i;for(i=1;i<10;i++)cout<<’*’;

B. int i,j;for(i=1,j=0;i<10;i++,j++)cout<<’*’;

C. int i=0;for(;i<10;i++)cout<<’*’;

D. for(1)cout<<’*’;

解析:这道题目主要考查for循环语句的语法。for循环语句的语法格式如下:for(<表达式1>;<表达式2>;<表达式3>)<语句>,在三个表达式都省略的情况下,其格式如下for(;;),这时for循环语句是一个死循环。

14.要利用C++流实现输入输出的各种格式控制,必须在程序中包含的头文件是( )。(D)

A. fstream

B. istream

C. ostream

D. iomanip

解析:本题考查格式控制相关知识,属于基础知识,需要包含iomanip,所以D选项正确。

15.有如下程序:

#inc1ude<iostream>

using namespace std;

int main(){

int sum;

for(int i=0; i<6; i+=3){

sum=i;

for(int j=i;j<6; j++)sum+=j;

}

cout<<sum<<end1;

retum 0;

}

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

A. 3

B. 10

C. 12

D. 15

解析:由题干可以知道,外层循环会进行两次,且第一次的结果我们可以不去理会和计算,读者仔细观察能发现,在第一次的循环以后sum和j都会被重新赋值,所以外层第二次循环如下:此时i=3,sum=3内层循环开始如下:j=3,j<6,sum=6;j=4,j<6,sum=10,j=5,j<6,sum=15,j=6退出内层循环。得到sum=15。

16.下列有一维数组a的定义中,语法正确的是( )。(D)

A. int a(10);

B. int n=7,a[n];

C. mint n;cin>>n;int a[n];

D. eonst int size=10;int a[size];

解析:定义一维数组的一般格式为:类型标识符数组名[常量表达式];常量表达式的值表示元素的个数,即数组长度。常量表达式中可以包括常量、常变量和符号常量,但不能包含变量。也就是说,C++不允许对数组的大小作动态定义,即数组的大小不依赖于程序运行过程中变量的值。

17.下列关于对象初始化的叙述中,正确的是( )。(C)

A. 定义对象的时候不能对对象进行初始化

B. 定义对象之后可以显式地调用构造函数进行初始化

C. 定义对象时将自动调用构造函数进行初始化

D. 在一个类中必须显式地定义构造函数实现初始化

解析:建立对象时根据给定的参数调用相应的构造函数对对象进行初始化。无参数时表示调用缺省构造函数。构造函数在对象被创建时由系统自动调用。

18.已知函数f的原型是“void flint*x,int &y);”,变量v1、v2的定义是“int v1,v2;”,下列调用语句中,正确的是( )。(C)

A. f(v1,V2);

B. f(v1,&V2);

C. f(&v1,v2);

D. f(&v1,&v2);

解析:在函数f的形参表达式中第一个形参为整型指针变量,第二个为整型引用变量,所以用实参v1的指针初始化第一个形参,用实参v2初始化第二形参。

19.若有如下类定义:

class B{

void fun1(){}

protected:

dOuble varl;

public:

void fun2(){}

};

class D:public B{

protected:

void fun3(){}

};

己知obj是类D的对象,下列句中不违反类成员访问控制权限的是( )。(C)

A. obj.fun1();

B. obj.varl;

C. obj.fun2();

D. obj.fun3();

解析:此题考查的是基类成员在派生类中的访问属性。派生类中的成员不能访问基类中的私有成员,可以访问基类中的公有成员和保护成员。派生类从基类公有继承时,基类的公有成员和保护成员在派生类中仍然是公有成员和保护成员;派生类从基类私有继承时,基类的公有成员和保护成员在派生类中都变成私有成员:派生类从基类保护继承时,基类的公有成员在派生类中变成保护成员,基类的保护成员在派生类中仍然是保护成员。根据以上分析可知,本题中只有从B类继承的fun2()为公有属性,故选C选项。

20.有如下程序:

#inc1ude <iostream>

using namespace std;

c1ass Base

{

private:

void funl()const{cout<<\(B)

A. ①②③④

B. ①②③

C. ②③④

D. ①④

解析:此题考查的是保护继承。因为Derived以protected方式继承了Base类,所以父类Base中的公有成员和保护成员均成了Derived类的保护成员,而Base类的私有成员Derived类不可访问。所以,主函数中通过Derived类的对象只能够访问到Derived类的公有成员。

21.有如下类模板定义:

template<typename T>

class BigNumber{

long n:

public:

BigNumber(T i):n(i){}

BigNumber operator+(BigNumber b){

return BigNtmaber(n+b.n);

}

}

已知b1、b2是,BigNumber的两个对象,则下列表达式中错误的是( )。(C)

A. b1+b2

B. b1+3

C. 3+b1

D. 3+3

解析:C++运算符的重载有两个方式,一种是做为成员函数,另一种是做为友元函数。前种C++默认省略第一个参数(事实上是对象本身),而后一种是所有的参数都要写全。比如对加法的重载:成员方式为COperator operator+(COperator&op);,在调用的过程中我们可以理解为result=operator+(op);友元方式为friend COperator operator.(COperator&op1,COperator&op2);,在调用的过程中我们可以理解为result=operator-(op1,op2);。

对于本题题来说,整数3与b1相加时,3是诚型,b1是BigNumber<T>型,int型不能和别的型做运算。

22.有如下函数模板:

template

T cast(U u){return u;}

其功能是将U类型数据转换为T类型数据。已知i为int型变量,下列对模板函数cast的调用中正确的是( )。(D)

A. cast(i);

B. cast(i);

C. cast(i);

D. cast(i);

解析:此题考查的是模板函数的调用。本题中cast()函数的实参i只能确定模板参数U的类型为int,而不能确定另外一个模板参数T,故选项A、B错误;C++语言不允许隐式地将int转化为char*,故选项C错误。

23.已知一程序运行后执行的第一个输出操作是

cout<<setw(10)<<setfill(’*’)<<1234;

则此操作的输出结果是( )。(B)

A. 1234

B. ******1234

C. **********1234

D. 1234******

解析:此题考查的是输入输出的格式控制。setw()控制的是输入输出的宽度;setfill()控制的是输出的填充字符。所以本题的输出结果是******1234。

24.将运算符重载为类成员函数时,其参数表中没有参数,说明该运算符是( )。(B)

A. 不合法的运算符

B. 一元运算符

C. 无操作数的运算符

D. 二元运算符

解析:对于一元或二元运算符函数作为成员函数重载时,第一操作数就是对象本身,并不显式地出现在参数表中。即第一操作数仅以this指针的形式隐含存在于参数表中。因此,对于一元运算符参数表是空的;对于二元运算符参数表中只有一个参数,它代表第二操作数。

25.当使用ifstream流类定义一个流对象并打开一个磁盘文件时,文件的默认打开方式为( )。(A)

A. ios_base::in

B. ios_base::in l ios_base::out

C. ios_base::out

D. ios_base::in&ios_base::out

解析:对于ifstream,默认打开模式是ios base:: in。ifstream只能用于输入,它没有提供任何用于输出的操作。

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

评论0

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