国家二级C++机试(选择题)模拟试卷279(题后含答案及解析)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
国家二级C++机试(选择题)模拟试卷279(题后含答案及解析) 题型有:1.
1.算法的有穷性是指( )。
A.算法程序的运行时间是有限的
B.算法程序所处理的数据量是有限的
C.算法程序的长度是有限的
D.算法只能被有限的用户使用
正确答案:A
解析:算法的有穷性,是指算法必须能在有限的时间内做完,即算法必须能在执行有限个步骤之后终止。
知识模块:数据结构与算法
2.下列叙述中正确的是
A.算法就是程序
B.设计算法时只需要考虑数据结构的设计
C.设计算法时只需要考虑结果的可靠性
D.以上三种说法都不对
正确答案:D
解析:所谓算法是指解题方案的准确而完整的描述。
是一组严谨地定义运算顺序的规则,并且每一个规则都是有效的,且是明确的,此顺序将在有限的次数下终止。
算法不等于程序,也不等于计算方法。
设计算法时不仅要考虑对数据对象的运算和操作,还要考虑算法的控制结构。
知识模块:数据结构与算法
3.有如下程序:#include<iostream>using namespace std;class A{public:A( ){cout<<”A”;}~A( ){cout<<”~A”;}};class B:public A{A*p;public:B( ){cout<<”B”;p=new A;}~B( ){cout<<”~B”t;delete p;}};int main( ){B obj;return0:}执行这个程序的输出结果是( )。
A.BAA~A~B~A
B.ABA~B~A~A
C.BAA~B~A~A
D.ABACA~B~A
正确答案:B
解析:此题考查的是类的构造函数和析构函数。
派生类构造函数的执行顺序为:首先调用基类的构造函数,调用顺序按它们被继承时说明的顺序;然后调用子对象的构造函数,调用顺序按它们在类中说明的顺序;最后是派生类构造函数中的内容。
因此本题中,首先调用基类构造函数输出A,然后调用子对象的构造函数输出B,p=new A再调用类A的构造函数输出A;析构函数的调用顺序和构造函数的调用顺序相反。
4.在长度为n的有序线性表中进行二分查找,最坏情况下需要比较的次数是
A.O(n)
B.O(n2)
C.O(log2n)
D.O(nlog2n)
正确答案:C
解析:对于长度为n的有序线性表,在最坏情况下,二分法查找只需比较log2n次,而顺序查找需要比较n次。
知识模块:数据结构与算法
5.下列叙述中正确的是( )。
A.程序执行的效率与数据的存储结构密切相关
B.程序执行的效率只取决于程序的控制结构
C.程序执行的效率只取决于所处理的数据量
D.以上都不正确
正确答案:A
解析:影响程序执行效率的因素有很多,如数据的存储结构、程序处理的数据量、程序的算法等。
顺序存储结构和链式存储结构在数据插入和删除操作上的效率就存在差别。
其中,链式存储结构的效率要高一些。
知识模块:程序设计基础
6.派生类的成员函数不能访问基类的( )。
A.公有成员和保护成员
B.公有成员
C.私有成员
D.保护成员
正确答案:C
解析:本题考查3种继承方式,其中,基类的私有成员始终为基类私有。
所以派生类无法访问基类的私有成员。
本题答案为C。
7.有如下程序#include #include using namespace std;class MyClass{ public:MyClass( ){cout<<‘A’;} MyClass(char c){cout<<c;} ~MyClass( ){cout<<‘B’;} };int main( ){ MyClass p1,*p2;p2=new MyClass(‘X’);delete p2;return ( );} 执行这个程序屏幕上将显示输出( )。
A.ABX
B.ABXB
C.AXB
D.AXBB
正确答案:D
解析:此题考查的是构造函数和析构函数。
构造函数在对象被创建的时候由系统自动调用,而析构函数在对象的生存期即将结束的时候由系统自动调用。
此题中,主程序在创建MayClass类的对象p1时,调用MayClass类的默认构造函数,输出字母A:然后在创建*p2对象时,调用带字母参数的构造函数,输出字母x;语句delete p2:调用析构函数,输出字母B;在主函数退出时,调用析构函数清除对象p1,输出字母B。
知识模块:类和对象
8.在结构化程序设计中,模块划分的原则是( )。
A.各模块应包括尽量多的功能
B.各模块的规模应尽量大
C.各模块之间的联系应尽量紧密
D.模块内具有高内聚度、模块间具有低耦合度
正确答案:D
解析:内聚性是对一个模块内部各个元素间彼此结合的紧密程度的度量。
耦合性是对模块间互相连接的紧密程度的度量。
在结构化程序设计中,模块划分应遵循高内聚、低耦合的原则,即减弱模块之间的耦合性和提高模块内聚性,有利于提高软件模块的独立性。
知识模块:软件工程基础
9.下面不属于软件测试实施步骤的是( )。
A.集成测试
B.回归测试
C.确认测试
D.单元测试
正确答案:B
解析:软件测试实施的步骤有单元测试、集成测试和确认测试。
知识模块:软件工程基础
10.C++中的模板包括( )。
A.对象模板和函数模板
B.对象模板和类模板
C.函数模板和类模板
D.变量模板和对象模板
正确答案:C
解析:本题考查函数模板和类模板,所以答案为c。
11.下列关于继承的描述中,错误的是( )。
A.析构函数不能被继承
B.派生类是基类的组合
C.派生类的成员除了它自己的成员外,还包含了它的基类的成员
D.派生类中继承的基类成员的访问权限到派生类保持不变
正确答案:D
解析:派生类中继承的基类成员的访问权限到派生类会发生变化,例如:私有继承时,派生类不能访问基类的成员,所以选项D)错误,其他选项均正确。
12.下列选项中,不属于数据库管理的是( )。
A.数据库的建立
B.数据库的调整
C.数据库的监控
D.数据库的校对
正确答案:D
解析:数据库管理一般包括:数据库的建立、数据库的调整、数据库的重组、数据库的安全性控制与完整性控制、数据库的故障恢复和数据库的监控。
13.数据库设计中反映用户对数据要求的模式是
A.内模式
B.概念模式
C.外模式
D.设计模式
正确答案:C
解析:概念模式,是由数据库设计者综合所有用户的数据,按照统一的观点构造的全局逻辑结构,是对数据库中全部数据的逻辑结构和特征的总体描述,是所有用户的公共数据视图(全局视图)。
它是由数据库管理系统提供的数据模式描述语言(Data Description Language,DDL)来描述、定义的,体现、反映了数据库系统的整体观。
外模式,对应于用户级,它是某个或某几个用户所看到的数据库的数据视图,是与某一应用有关的数据的逻辑表示。
外模式是从模式导出的一个子集,也称为子模式或用户模式,它是用户的数据视图,也就是用户所见到的数据模式,它反映了用户对数据的要求。
包含模式中允许特定用户使用的那部分数据,用户可以通过外模式描述语言来描述、定义对应于用户的数据记录(外模式),也可以利用数据操纵语言(Data Manipulation Language,DML)对这些数据记录进行描述。
内模式,对应于物理级,它是数据库中全体数据的内部表示或底层描述,是数据库最低一级的逻辑描述,它描述了数据在存储介质上的存储方式和物理结构,对应着实际存储在外存储介质上的数据库。
内模式由内模式描述语言来描述、定义,它是数据库的存储观。
知识模块:数据库设计基础
14.在下列关系运算中,不改变关系表中的属性个数但能减少元组个数的是
A.并
B.交
C.投影
D.笛卡儿乘积
正确答案:B
解析:关系R与S经交运算后所得到的关系是由那些既在R内又在S内的有序组所组成,记为R∩S。
形式定义如下:R∩S≡{t∈R∧t∈S}=R-(R-S)。
所以不改变关系表中的属性个数,但能减少元组个数的是关系表之间的交操作。
知识模块:数据库设计基础
15.已知函数FA调用FB,若要把这两个函数定义在同一个文件中,则( )。
A.FA必须定义在FB之前
B.FB必须定义在FA之前
C.若FA定义在FB之后,则FA的原型必须出现在FB的定义之前
D.若FB定义在FA之后,则FB的原型必须出现在FA的定义之前
正确答案:D
解析:在C++中,在调用任何函数之前,必须确保它已有原型说明。
函数原型说明通常放在程序文件的头部,以使得该文件中所有函数都能调用它们。
在本题中,当函数FA调用FB时,函数FB可以定义在FA的后面,但是FB的原型必须出现在FA的定义之前,因而选项D为正确答案。
知识模块:函数
16.有如下程序:#include<iostream>using namespace std;class Pair{int m,n;public:Pair(int j,int k):m(j),n(k){}int get( ){return m;}int get( )const{return m+n;}};int main( ){Pair a(3,5);const Pair b(3,5);cout <<a.get( )<<b.get( );return 0;}运行时的输出结果是( )。
A.33
B.38
C.83
D.88
正确答案:B
解析:在主函数中定义了类Pair的一个实例变量a,并分别对实例变量a的数据成员m,n赋初值3,5。
所以调用a.get( )成员函数时,输出3。
又定义类Pair的一个常实例变量b,并分别对实例变量b的数据成员m,n赋初值3,5。
所以调用成员函数b.get( )时,输出8。
知识模块:类和对象
17.若AA为一个类,a为该类的非静态数据成员,在该类的一个成员函数定义中访问a时,其书写格式为( )。
A.a
B.AA,a
C.a{}
D.AA::a{}
正确答案:A
解析:类AA的成员函数直接引用类AA的非静态数据成员。
知识模块:类和对象
18.下面是重载为非成员函数的运算符函数原型,其中错误的是( )。
A.Fraction operator+(Fraction,Fraction);
B.Fraction operator一(Fraction);
C.Fraction&operator=(Fraction&,Fraction);
D.Fraction&operator+=(Fraction&,Fraction);
正确答案:C
解析:此题考查的是运算符重载。
C++语言规定,“=”运算符只能作为成员函数重载。
知识模块:函数
19.有如下程序:#include<iostream> using namespace std;class test{ private:int a;public:test0{cout+”constructor”+endl;} test(int a){cout+a+endl;} test(const test&test) { a=test.a:cout+”copy constructor”+endl;} test( ){Cout+”destructor”+endl;} };int main( ) { test A(3);return 0:} 运行时输出的结果是( )。
A.3
B.constructordestructor
C.copy constructordestructor
D.3destructor
正确答案:D
解析:此题考查的是构造函数和析构函数。
一个类可以有多个构造函数,但只能有一个析构函数。
每一个对象在被创建时,都会隐含调用众多构造函数中的一个,而在销毁时又会隐含调用唯一的析构函数。
此题中,主函数创建对象A 是会隐含调用test(int a)这个构造函数,输出3;接着主函数结束,对象A销毁又隐含调用~test( )析构函数输出destructor。
知识模块:类和对象
20.下列关于运算符重载的叙述中,错误的是( )。
A.有的运算符可以作为非成员函数重载
B.所有的运算符都可以通过重载而被赋予新的含义
C.不得为重载的运算符函数的参数设置默认值
D.有的运算符只能作为成员函数重载
正确答案:B
解析:“运算符重载”是针对C++中原有运算符进行的,不可能通过重载创造新的运算符。
除了.,.*,->*,::,?:这五个运算符以外,其他运算符都可以重载。
知识模块:运算符重载
21.有如下程序:#include<iostream> using namespace std;class V AC{ public;int f( ) const{return 3;} int f( ){return 5;} };Int main( ){ V AC v1;constV AC v2;cout<<v1.f( )<<v2.f( );feturn 0;} 运行时的输出
结果是( )。
A.53
B.35
C.55
D.33
正确答案:A
解析:此题考查的是常成员函数的应用。
V AC类中说明了两个函数,一个是常成员函数,一个是普通函数;在主函数中说明了两个对象,通过普通对象v1调用的是普通函数,输出5;通过常对象V2调用的是常成员函数,输出3。
知识模块:类和对象
22.下列关于类模板的描述中,错误的是( )。
A.类模板的成员函数都是模板函数
B.可以为类模板参数设置默认值
C.类模板描述了一组类
D.类模板中只允许有一个类型参数
正确答案:D
解析:类模板就是一系列相关类的模型或样板,这些类的成员组成相同,成员函数的源代码形式相同,所不同的只是所针对的类型(成员的类型以及成员函数的参数和返回值的类型)。
一个类模板的格式是:template<<模板形参表声明>><类声明>,<模板形参表声明>是由一个或多个模板形参组成。
在定义类模板时,可以为模板形参表声明的最后若干个参数设置默认值。
知识模块:模板
23.下列关于模板的叙述中,正确的是( )。
A.如果一个类中存在纯虚函数,这个类就是类模板
B.函数模板不能有形式参数表
C.类模板是一种参数化类型的类,是类的生成器
D.类模板中不能包含构造函数
正确答案:C
解析:对于函数模板,数据类型本身成了它的参数,是一种参数化类型的函数。
对于类模板,数据类型本身成了它的参数,因而是一种参数化类型的类,是类的生成器。
知识模块:模板
24.关于关键字class和typename,下列表述中正确的是( )。
A.程序中的typename都可以替换为class
B.程序中的class都可以替换为typename
C.在模板形参表中只能用typename来声明参数的类型
D.在模板形参表中只能用class或typename来声明参数的类型
正确答案:A
解析:此题考查的是class和typename两个关键字。
关键字class除了能用来定义类以外还能用来声明模板的虚拟类型参数。
在用作声明虚拟类型参数时typename与class可以互换,但不能使用typename来定义类;在模板形参表中除了可以用typename和class声明虚拟类型参数外,还可以使用普通类型声明常规函数,故选项C错误。
知识模块:模板
25.若需要为XV类重载乘法运算符,运算结果为XV类型,在将其声明为类的成员函数时,下列原型声明正确的是( )。
A.XV operator*(XV,XV);
B.XV*(XV);
C.operator*(XV);
D.XV operator*(XV);
正确答案:D
解析:“*”是一个二元运算符,在作为成员函数重载时参数表中只有一个参数,对应于第二个操作数,而第一个操作数就是对象本身,仅以this指针的形式隐藏在参数表中。
知识模块:运算符重载。