C++模拟试题笔试07.docx
《C++模拟试题笔试07.docx》由会员分享,可在线阅读,更多相关《C++模拟试题笔试07.docx(21页珍藏版)》请在冰点文库上搜索。
C++模拟试题笔试07
下列选项中不属于软件生命周期开发阶段任务的是______。
A、软件测试
B、概要设计
C、软件维护
D、详细设计
下列选项中不符合良好程序设计风格的是______。
A、源程序要文档化
B、数据说明的次序要规范化
C、避免滥用goto语句
D、模块设计要保证高耦合、高内聚
在长度为64的有序线性表中进行顺序查找,最坏情况下需要比较的次数为______。
A、63
B、64
C、6
D、7
从工程管理角度,软件设计一般分为两步完成,它们是______。
A、概要设计与详细设计
B、过程控制
C、软件结构设计与数据设计
D、程序设计与数据设计
数据库技术的根本目标是解决数据的______
A、存储问题
B、共享问题
C、安全问题
D、保护问题
在数据库系统中,用户所见数据模式为______。
A、概念模式
B、外模式
C、内模式
D、物理模式
数据库设计的四个阶段是:
需求分析、概念设计、逻辑设计和______。
A、编码设计
B、测试阶段
C、运行阶段
D、物理设计
下列叙述中正确的是______。
A、一个算法的空间复杂度大,则其时间复杂度也必定大
B、一个算法的空间复杂度大,则其时间复杂度必定小
C、一个算法的时间复杂度大,则其空间复杂度必定小
D、上述三种说法都不对
设有如下三个关系表
RST
下列操作中正确的是______。
A、T=R∩S
B、R∪S
C、
D、T=R∕S
对下列二叉树
进行中序遍历的结果是______。
A、ACBDFEG
B、ACBDFGE
C、ABDCGEF
D、FCADBEG
若有下面的函数调用:
fun(a+b,3,max(n-1,b))
则fun的实参个数是______。
A、3
B、4
C、5
D、6
有如下程序
#include
usingnamespacestd;
classA{
public:
virtualvoidfunc1(){cout<<"Al";}
voidfunc2(){cout<<"A2";}
};
classB:
publicA{
public:
voidfunc1(){cout<<"B1";}
voidfunc2(){cout<<"B2";}
};
intmain(){
A*p=newB;
p->func1();
p->func2();
return0;
}
运行此程序,屏幕上将显示输出______。
A、B1B2
B、A1A2
C、B1A2
D、A1B2
有如下程序
#include
usingnamespacestd;
classBase{
protected:
Base(){cout<<'A';}
Base(charc){cout<};
classDerived:
publicBase{
public:
Derived(charc){cout<};
intmain(){
Derivedd1('B');
return0;
}
执行这个程序屏幕上将显示输出______。
A、B
B、BA
C、AB
D、BB
以下关键字不能用来声明类的访问权限的是______。
A、public
B、static
C、protected
D、private
下列语句中,错误的是______。
A、constintbuffer=256;
B、constdouble*point;
C、intconstbuffer=256;
D、double*constpoint;
有如下的运算符重载函数定义:
doubleoperator+(inti,intk){returndouble(i+k);}
但定义有错误,对这个错误最准确的描述是______。
A、+只能作为成员函数重载,而这里的+是作为非成员函数重载的
B、两个int型参数的和也应该是int型,而这里将+的返回类型声明为double
C、没有将运算符重载函数声明为某个类的友元
D、C++已经提供了求两个int型数据之和的运算符+,不能再定义同样的运算符
下列有关继承和派生的叙述中,正确的是______。
A、如果一个派生类私有继承其基类,则该派生类中的成员不能访问基类的保护成员
B、派生类的成员函数可以访问基类的所有成员
C、基类对象可以赋值给派生类对象
D、如果派生类没有实现基类的一个纯虚函数,则该派生类是一个抽象类
有如下程序:
#include
usingnamespacestd;
classObj{
staticinti;
public:
Obj(){i++;}
~Obj(){i--;}
staticintgetVal(){returni;}
};
intObj:
:
i=0;
voidf(){Objob2;cout<intmain(){
Objobl;
f();
Obj*ob3=newObj;cout<getVal();
deleteob3;cout<:
getVal();
return0;
}
程序的输出结果是______。
A、232
B、231
C、222
D、221
有如下类定义:
classMyBase{
intk;
public:
MyBase(intn=0):
k(n){}
intvalue()const{returnk;}
};
classMyDerived:
MyBase{
intj;
public:
MyDerived(inti):
j(i){}
intgetK()const{returnk;}
intgetj()const{returnj;}
};
编译时发现有一处语法错误,对这个错误最准确的描述是______。
A、函数getK试图访问基类的私有成员变量k
B、在类MyDerived的定义中,基类名MyBase前缺少关键字public、protected或private
C、类MyDerived缺少一个无参的构造函数
D、类MyDerived的构造函数没有对基类数据成员k进行初始化
有如下程序
#include
#include
usingnamespacestd;
intmain(){
cout<cout<<12.345<<______<<34.567;
return0;
}
若程序的输出是:
**12.345**34.567
则程序中下划线处遗漏的操作符是______。
A、setprecision
B、fixed
C、setfill('*')
D、setw(8)
有如下程序
#include
#include
usingnamespacestd;
classMyClass{
public:
MyClass(){cout<<'A';}
MyClass(charc){cout<~MyClass(){cout<<'B';}
};
intmain(){
MyClasspl,*p2;
p2=newMyClass('X');
deletep2;
return0;
}
执行这个程序屏幕上将显示输出______。
A、ABX
B、ABXB
C、AXB
D、AXBB
语句ofstreamf("SALARY.DAT",ios_base:
:
app);的功能是建立流对象f,并试图打开文件SALARY.DAT与f关联,而且______。
A、若文件存在,将其置为空文件;若文件不存在,打开失败
B、若文件存在,将文件指针定位于文件尾;若文件不存在,建立一个新文件
C、若文件存在,将文件指针定位于文件首;若文件不存在,打开失败
D、若文件存在,打开失败;若文件不存在,建立一个新文件
关于关键字class和typename,下列表述中正确的是______。
A、程序中的typename都可以替换为class
B、程序中的class都可以替换为typename
C、在模板形参表中只能用typename来声明参数的类型
D、在模板形参表中只能用class或typename来声明参数的类型
关于运算符重载,下列表述中正确的是______。
A、C++已有的任何运算符都可以重载
B、运算符函数的返回类型不能声明为基本数据类型
C、在类型转换符函数的定义中不需要声明返回类型
D、可以通过运算符重载来创建C++中原来没有的运算符
下列有关内联函数的叙述中,正确的是______。
A、内联函数在调用时发生控制转移
B、内联函数必须通过关键字inline来定义
C、内联函数是通过编译器来实现的
D、内联函数函数体的最后一条语句必须是return语句
if语句的语法格式可描述为:
格式1:
if(<条件>)<语句>
或
格式2:
if(<条件>)<语句1>else<语句2>
关于上面的语法格式,下列表述中错误的是______。
A、<条件>部分可以是一个if语句,例如if(if(a==0)…)…
B、<语句>部分可以是一个if语句,例如if(…)if(…)…
C、如果在<条件>前加上逻辑非运算符!
并交换<语句1>和<语句2>的位置,语句功能不变
D、<语句>部分可以是一个循环语句,例如if(…)while(…)…
在公有继承的情况下,允许派生类直接访问的基类成员包括______。
A、公有成员
B、公有成员和保护成员
C、公有成员、保护成员和私有成员
D、保护成员
有如下说明
inta[10]={1,2,3,4,5,6,7,8,9,10},*p=a;
则数值为9的表达式是______。
A、*p+9
B、*(p+8)
C、*p+=9
D、p+8
关于在调用模板函数时模板实参的使用,下列叙述正确的是______。
A、对于虚拟类型参数所对应的模板实参,如果能从模板函数的实参中获得相同的信息,则都可以省略
B、对于虚拟类型参数所对应的模板实参,如果他们是参数表中的最后的若干参数,则都可以省略
C、对于虚拟类型参数所对应的模板实参,若能够省略则必须省略
D、对于常规参数所对应的模板实参,任何情况下都不能省略
在一个派生类对象结束其生命周期时______。
A、先调用派生类的析构函数后调用基类的析构函数
B、先调用基类的析构函数后调用派生类的析构函数
C、如果基类没有定义析构函数,则只调用派生类的析构函数
D、如果派生类没有定义析构函数,则只调用基类的析构函数
有如下程序
#include
usingnamespacestd;
inti=1;
classFun{
public:
staticinti;
intvalue(){returni-1;}
intvalue()const{returni+1;}
};
intFun:
:
i=2;
intmain(){
inti=3;
Funfun1;
constFunfun2;
______
return0;
}
若程序的输出结果是:
123
则程序中下划线处遗漏的语句是______。
A、cout<:
i<B、cout<:
i<C、cout<:
i;
D、cout<:
i<下列符号中,正确的C++标识符是______。
A、enum
B、2b
C、foo-9
D、_32
下列运算符不能重载为友元函数的是______。
A、=()[]->
B、+-++--
C、><>=<=
D、+=-=*=/=
下列关于输入流类成员函数getline()的描述中,错误的是______。
A、该函数是用来读取键盘输入的字符串的
B、该函数读取的字符串长度是受限制的
C、该函数读取字符串时,遇到终止符便停止
D、该函数读取字符串时,可以包含空格
下列情况中,不会调用拷贝构造函数的是______。
A、用一个对象去初始化同一类的另一个新对象时
B、将类的一个对象赋值给该类的另一个对象时
C、函数的形参是类的对象,调用函数进行形参和实参结合时
D、函数的返回值是类的对象,函数执行返回调用时
______的任务是诊断和改正程序中的错误。
程序调试的任务是诊断和改正程序中的错误。
它与软件测试不同,软件测试是尽可能多地发现软件中的错误。
先要发现软件的错误,然后借助于一定的调试工具去找出软件错误的具体位置。
软件测试贯穿整个软件生命期,调试主要在开发阶段。
按"先进后出"原则组织数据的数据结构是______。
栈和队列都是一种特殊的操作受限的线性表,只允许在端点处进行插入和删除。
二者的区别是:
栈只允许在表的一端进行插入或删除操作,是一种“先进后出”的线性表;而队列只允许在表的一端进行插入操作,在另一端进行删除操作,是一种“先进先出”的线性表。
数据结构分为线性结构和非线性结构,带链的队列属于______。
与栈类似,队列也是线性表,也可以采用链式存储结构。
一个关系表的行称为______。
设计数据库的目的实质上是设计出满足实际应用需求的实际关系模型;关系中的行称为元组,对应存储文件中的记录,关系中的列称为属性,对应存储文件中的字段。
下列软件系统结构图
的宽度为______。
软件系统结构图的宽度:
整体控制跨度(最大模块数的层)的表示。
如果不使用多态机制,那么通过基类的指针虽然可以指向派生类对象,但是只能访问从基类继承的成员。
下列程序没有使用多态机制,其输出结果是______。
#include
usingnamespacestd;
classBase{
public:
voidprint(){cout<<'B';}};
classDerived:
publicBase{
public:
voidprint(){cout<<'D';}};
intmain()
{
Derived*pd=newDerived();
Base*pb=pd;
pb->print();
pd->print();
deletepd;
return0;
}
本题考查的是派生类。
派生类Derived由基类Base公有继承而来,是基类的子类型。
调用pb->print();后,执行基类的函数voidprint(),因为尽管pb的函数print()可以对类Base的公有派生类Derived的对象pd进行操作,但是只能使用从基类Base中继承的成员;调用pd->print();后,执行派生类的函数voidprint()。
在声明派生类时,如果不显式地给出继承方式,缺省的类继承方式是私有继承private。
已知有如下类定义:
classeBase{
protected:
voidfun(){}
};
classDerived:
Base{};
则Base类中的成员函数fun(),在Derived类中的访问权限是______。
(注意:
要求填写private、protected或public中的一项)。
本题考查的是派生类。
派生类的继承方式如果不显式的给出,缺省的继承方式是私有继承private。
派生类从基类私有继承时,基类的公有成员和保护成员在派生类中都改变为私有成员。
下列程序的输出结果是______。
#include
usingnamespacestd;
classA{
inta;
public:
A():
a(9){}
virtualvoidprint()const{cout<};
classB:
publicA{
charb;
public:
B(){b='S';}
voidprint()const{cout<
};
voidshow(A&x){x.print();}
intmain()
{Ad1,*p;
Bd2;
p=&d2;
d1.print();
d2.print();
p->print();
show(d1);
show(d2);
return0;
}
本题主要考查了缺省构造函数。
在d1、d2定义时分别调用它们的构造函数。
调用d1.print();后,执行类A的virtualvoidprint()函数;调用d2.print();后,执行派生类B的构造函数voidprint();调用p->print();后,执行执行派生类B的构造函数voidprint();调用show(d1);后,调用函数show(A&x),再调用类A的virtualvoidprint()函数;调用show(d2);后,调用函数show(A&x),再调用派生类B的构造函数voidprint()。
己知下列程序的输出结果是42,请将画线处缺失的部分补充完整。
#include
usingnamespacestd;
classFoo{
intvalue;
public:
Foo():
value(0){}
voidsetValue(intvalue)
{______=value;}//给Foo的数据成员value赋值
voidprint(){cout<};
intmain()
{
Foof;
f.setValue(42);
f.print();
return0;
}本题考查的是this指针。
this指针,它是成员函数的所属对象的指针,它指向类对象的地址。
本题要输出42,也就是要把f.setValue(42);中的42赋值给Foo的数据成员value,因此横线处缺少的是给Foo的数据成员value赋值的语句,所以答案为this->value或Foo:
:
value。
已知递归函数f的定义如下:
intf(intn)
{
if(n<=1)return1;//递归结束情况
elsereturnn*f(n-2);//递归}
则函数调用语句f(5)的返回值是______。
本题主要考查了递归算法。
函数每次将f(n)的值转换成相应的关系式n*f(n-2),直到f
(1)时为止。
所以f(5)=5*f(5-2)=5*3*f
(1)=5*3*1=15。
若有定义语句:
int*a,b;,则变量b的数据类型是______。
本题考查的是变量的定义。
int*a,b;把a定义为一个int类型的指针;把b定义为一个整型变量
在MyClass类的定义中,对赋值运算符=进行重载。
请将画线处缺失的部分补充完整。
______MyClass:
:
operator=(constMyClass&rhs)
{
if(this==&rhs)return*this;
value=rhs.value;
return*this;
}本题考查的是运算符的重载。
一个类如果要重载运算符=,通常也就需要定义自己特有的拷贝构造函数。
可以在类体中增加:
(const&operatorMyClass&rhs);然后在MyClass的类体外给出它的完整定义:
MyClass&MyClass:
:
operator=(constMyClass&rhs)
{......}
因此在MyClass类的定义中缺少MyClass&语句。
插入排序算法的主要思想是:
每次从未排序序列中取出的一个数据,插入到已排序序列中的正确位置。
InsertSort类的成员函数sort()实现了插入排序算法。
请将画线处缺失的部分补充完整。
classInsertSort{
public:
InsertSort(int*a0,intn0):
a(a0),n(n0){}//参数a0是某数组首地址,n是数组元素个数
voidsort()
{//此函数假设已排序序列初始化状态只包含a[0],未排序序列初始为a[1]…a[n-1]
for(inti=1;iintt=a[i];
intj;
for(______;j>0;--j){
if(t>=a[j-1])break;
a[j]=a[j-1];}
a[j]=t;}}
protected:
int*a,n;//指针a用于存放数组首地址,n用于存放数组元素个数
};本题考查的是插入排序。
在Sort函数中,实现函数的插入排序算法,若队列中已有i个数,则向其中插入第i+1个数时,依次与从下标为i-1到下标为0的数比较,如果后面的数小于前面的数,则交换这两个数,否则说明该数已排好序,直接跳出内层循环,故此空应填j=i。
创建对象数组时,对数组的每一个元素都将调用一次构造函数,如果没有显式给出数组元素的初值,则调用缺省构造函数。
下列程序涉及到对象数组的创建和单个对象的创建,其输出结果是______。
#include
usingnamespacestd;
classFoo{
public:
Foo(intx){cout<<'A';}
Foo(){}
};
intmain()
{
Foof[3],g(3);
return0;
}
本题考查的是类的对象数组和成员对象。
从程序可以看出f[3]是类Foo的一个对象数组,因为f[3]没有显式的给定初值,所以系统自动调用缺省构造函数Foo();在定义类Foo的对象g(3)时,执行相应的构造函数Foo(intx),输出字母A。
已知数组a中的元素个数为n,下列语句的作用是将下标为i的元素移动到下标为i-1的单元,其中1<=i例如,当n=4,a中原有的数据为1,2,3,4时,则移动后a中元素变为2,3,4,4。
请将语句补充完整:
for(inti=0;i本题考查循环的基本应用。
解题思路为:
循环条件是i