国家二级(C++)机试模拟试卷276
选择题
1.有如下程序:
#include
using namespace std;
int main()
{int*p;
*p=9;
cout<<\\(D)
A. 编译时出现语法错误,不能生成可执行文件
B. 运行时一定输出:The value at p:9
C. 运行时一定输出:The value at p:*9
D. 运行时有可能出错
解析:题目程序中“int*p;”是定义了一个指针变量p,“*p=9;”是将p当前指向的指针赋为9。指针p在执行这个赋值操作前并没有初始化这个变量p,所以会有p未初始化的警告错误。
2.下列对模板的声明中,正确的是( )。(C)
A. template
B. template
C. template
D. template
解析:声明一个函数模板的格式为:template函数声明。调用模板函数时,如果与模板实参中最后的若干个参数有关的信息可以从模板函数的实参中获得,则相关的模板实参可以省略。
3.若有下面的函数调用:
fun(a+b,3,max(n-1,b))
则fun的实参个数是( )。(A)
A. 3
B. 4
C. 5
D. 6
解析:本题考查函数实参个数的基础知识,根据实参的概念,(a+b)、3、max(n—1,b)分别为其中的3个实参。故答案为A。
4.下列有关继承和派生的叙述中,正确的是( )。(D)
A. 如果一个派生类公有继承其基类,则该派生类对象可以访问基类的保护成员
B. 派生类的成员函数可以访问基类的所有成员
C. 基类对象可以赋值给派生类对象
D. 如果派生类没有实现基类的一个纯虚函数,则该派生类是一个抽象类
解析:私有继承方式为基类的公用成员和保护成员在派生类中成了私有成员,其私有成员仍为基类私有,但派生类对象可以访问基类的保护成员,所以基类对象不能赋值给派生类对象。抽象类是指含有纯虚拟函数的类,所以选项D正确。
5.要使程序执行后的输出结果为ABCD,应在横线处添加语句( )。
#include
using namespace std;
class A
{
public:A(){cout<<~A;}
};
class B:________
{
public:B0{cout<<’B’;}
};
class C:virtual public A
{
public:C(){cout<<’C’;)
};
class D:public B,public C
{
public:DO{cout<<’D’;}
};
void main(){D obj;}(D)
A. public A
B. private A
C. protected A
D. virtual public A
解析:由主函数main入手,定义了类D对象obj。其中D为类B和C的公有继承,A是C的虚基类。题目中要求的输出结果为“ABCD”,依次为类A,类B,类C,类D中构造函数的输出语句。为了保证基类通过多条路径被派生类继承时,即保证A只被继承一次,输出一个A,所以不但需要声明A为C的虚基类,同样也要声明A为B的虚基类。
6.关于在调用模板函数时模板实参的使用,下列表述中正确的是( )。(D)
A. 对于虚拟类型参数所对应的模板实参,如果能从模板函数的实参中获得相同的信息,则都可以省略
B. 对于虚拟类型参数所对应的模板实参,如果它们是参数表中的最后的若干个参数,则都可以省略
C. 对于虚拟类型参数所对应的模板实参,若能够省略则必须省略
D. 对于常规参数所对应的模板实参,任何情况下都不能省略
解析:在调用一个模板函数时,编译系统需要足够的信息来判别每个虚拟类型参数所对应的实际类型,可以从两个不同的渠道获得这样的信息:从模板实参表(用“”括起来的参数表)或从模板函数实参表(用“()”括起来的参数表)。如果从后者获得的信息已经能够判定其中部分或全部虚拟类型参数所对应的实际参数,而且它们又正好是参数表中最后的若干参数,则模板实参表中的那几个参数可以省略。如果模板实参表中的实参都被省略了,则空表“”也可以不要,因此选项D错误。反之,对于某个模板实参,如果从模板函数的实参表中无法获得同样的信息,就不能
7.对数组名作函数的参数,下面描述正确的是 ( )。(B)
A. 数组名作函数的参数,调用时将实参数组复制给形参数组
B. 数组名作函数的参数,主调函数和被调函数共用一段存储单元
C. 数组名作参数时,形参定义的数组长度不能省略
D. 数组名作参数,不能改变主调函数中的数据
解析:数组作为参数实参传递的赴数组的首地址。所以主调函数和被调函数共用一段存储单元。
8.下列关于运算符重载的描述中,正确的是( )。(D)
A. 运算符重载可以改变运算符的操作数的个数
B. 运算符重载可以改变优先级
C. 运算符重载可以改变结合性
D. 运算符重载不可以改变语法结构
解析:重载的运算符仍要保持其原来的操作数、优先级和结合性不变。
9.如下函数模板:
templateT square(T x){return x*x;}
其中T是( )。(C)
A. 函数形参
B. 函数实参
C. 模板形参
D. 模板实参
解析:本题考查模板函数的基本概念,根据模板函数的定义,T是模板形参,所以答案为C。
10.下面是一个递归函数,其功能是使数组中的元素反序排列,横线处应填( )。
void reverse(Int*a,int size){
if(size <2)return;
int k=a[0];
a[0]=a[size-1];
a[size-1]=k;
reverse(a+1,__________);
}(B)
A. size<2
B. size-2
C. size-1
D. size+1
解析:把数组的首尾交换后,对在第一位和最后一位之间的子数组执行同样的首尾交换操作,此子数组为原数组长度减去2,所以答案为size-2。
11.下列叙述中正确的是( )。(B)
A. 线性表的链式存储结构与顺序存储结构所需要的存储空间是相同的
B. 线性表的链式存储结构所需要的存储空间一般要多于顺序存储结构
C. 线性表的链式存储结构所需要的存储空间一般要少于顺序存储结构
D. 线性表的链式存储结构与顺序存储结构在存储空间的需求上没有可比性
本文档预览:3600字符,共16738字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载