C++模拟试题笔试11.docx
《C++模拟试题笔试11.docx》由会员分享,可在线阅读,更多相关《C++模拟试题笔试11.docx(20页珍藏版)》请在冰豆网上搜索。
![C++模拟试题笔试11.docx](https://file1.bdocx.com/fileroot1/2023-6/6/fb4afabb-374c-40a3-b136-de2994b45c4c/fb4afabb-374c-40a3-b136-de2994b45c4c1.gif)
C++模拟试题笔试11
在软件开发中,需求分析阶段可以使用的工具是______。
A、N-S图
B、DFD图
C、PAD图
D、程序流程图
在长度为n的有序线性表中进行二分查找,最坏情况下需要比较的次数是______。
A、O(n)
B、
C、
D、
数据流图中带有箭头的线段表示的是______。
A、控制流
B、事件驱动
C、模块调用
D、数据流
一间宿舍可住多个学生,则实体宿舍和学生之间的联系是______。
A、一对一
B、一对多
C、多对一
D、多对多
下列叙述中正确的是______。
A、顺序存储结构的存储一定是连续的,链式存储结构的存储空间不一定是连续的
B、顺序存储结构只针对线性结构,链式存储结构只针对非线性结构
C、顺序存储结构能存储有序表,链式存储结构不能存储有序表
D、链式存储结构比顺序存储结构节省存储空间
有三个关系R、S和T如下:
由关系R和S通过运算得到关系T,则所使用的运算为______。
A、笛卡尔积
B、交
C、并
D、自然连接
在数据管理技术发展的三个阶段中,数据共享最好的是______。
A、人工管理阶段
B、文件系统阶段
C、数据库系统阶段
D、三个阶段相同
一个栈的初始状态为空。
现将元素1、2、3、4、5、A、B、C、D、E依次入栈,然后再依次出栈,则元素出栈的顺序是______。
A、12345ABCDE
B、EDCBA54321
C、ABCDE12345
D、54321EDCBA
在面向对象方法中,不属于"对象"基本特点的是______。
A、一致性
B、分类性
C、多态性
D、标识惟一性
下列叙述中正确的是______。
A、循环队列中有队头和队尾两个指针,因此,循环队列是非线性结构
B、在循环队列中,只需要队头指针就能反映队列中元素的动态变化情况
C、在循环队列中,只需要队尾指针就能反映队列中元素的动态变化情况
D、循环队列中元素的个数是由队头指针和队尾指针共同决定
下列运算符函数中,肯定不属于类Value的成员函数的是______。
A、Valueoperator+(Value);
B、Valueoperator-(Value,Value);
C、Valueoperator*(int);
D、Valueoperator/(Value);
在C++中,编译系统自动为一个类生成缺省构造函数的条件是______。
A、该类没有定义任何有参构造函数
B、该类没有定义任何无参构造函数
C、该类没有定义任何构造函数
D、该类没有定义任何成员函数
下列语句中错误的是______。
A、constinta;
B、constinta=10;
C、constint*point=0;
D、constint*point=newint(10);
有如下程序:
#include
usingnamespacestd;
classSample{
public:
Sample(){}
~Sample(){cout<<'*';}
};
intmain(){
Sampletemp[2],*pTemp[2];
return0;
}
执行这个程序输出星号(*)的个数为______。
A、1
B、2
C、3
D、4
建立一个有成员对象的派生类对象时,各构造函数体的执行次序为______。
A、派生类、成员对象类、基类
B、成员对象类、基类、派生类
C、基类、成员对象类、派生类
D、基类、派生类、成员对象类
定义派生类时,若不使用关键字显式地规定采用何种继承方式,则默认方式为______。
A、私有继承
B、非私有继承
C、保护继承
D、公有继承
对于通过公有继承定义的派生类,若其成员函数可以直接访问基类的某个成员,说明该基类成员的访问权限是______。
A、公有或私有
B、私有
C、保护或私有
D、公有或保护
在类声明中,紧跟在"public:
"后声明的成员的访问权限是______。
A、私有
B、公有
C、保护
D、默认
有如下程序:
#include
usingnamespacestd;
classMyClass{
public:
MyClass(inti=0){cout<<1;}
MyClass(constMyClass&x){cout<<2;}
MyClass&operator=(constMyClass&x){cout<<3;return*this;}
~MyClass(){cout<<4;}
};
intmain(){
MyClassobj1
(1),obj2
(2),obj3(obj1);
return0;
}
运行时的输出结果是______。
A、112444
B、11114444
C、121444
D、11314444
如果表达式a>=b中的">="是作为非成员函数重载的运算符,则可以等效地表示为______。
A、a.operator>=(b)
B、b.operator>=(a)
C、operator>=(a,b)
D、operator>=(b,a)
在一个抽象类中,一定包含有______。
A、虚函数
B、纯虚函数
C、模板函数
D、重载函数
当使用ofstream流类定义一个流对象并打开一个磁盘文件时,文件的默认打开方式为______。
A、ios_base:
:
in
B、ios_base:
:
binary
C、ios_base:
:
in|ios_base:
:
out
D、ios_base:
:
out
下列模板声明中,有语法错误的是______。
A、templateTfun(Tx){returnx;}
B、templateTfun(Tx,intn){returnx*n;}
C、templateTfun(T*p){return*p;}
D、templateTclassA{Tn;};
在语句"cout<<'A';"中,cout是______。
A、类名
B、对象名
C、函数名
D、C++的关键字
下列语句中,正确的是______。
A、char*myString="Hello-World!
";
B、charmyString="Hello-World!
";
C、charmyString[11]="Hello-World!
";
D、charmyString[12]="Hello-World!
";
若已经声明了函数原型"voidfun(inta,doubleb=0.0);",则下列重载函数声明中正确的是______。
A、voidfun(inta=90,doubleb=0.0);
B、intfun(inta,doubleB);
C、voidfun(doublea,intB);
D、boolfun(inta,doubleb=0.0);
下列选项中,与实现运行时多态性无关的是______。
A、重载函数
B、虚函数
C、指针
D、引用
在一个派生类的成员函数中,试图调用其基类的成员函数"Voidf();",但无法通过编译。
这说明______。
A、f()是基类的私有成员
B、f()是基类的保护成员
C、派生类的继承方式为私有
D、派生类的继承方式为保护
下列字符串中不能作为C++标识符使用的是______。
A、WHILE
B、user
C、_1var
D、9stars
在下列原型所示的C++函数中,按"传值"方式传递参数的是______。
A、Voidf1(intx);
B、Voidf2(int*x);
C、Voidf3(constint*x);
D、Voidf4(int&x);
要利用C++流进行文件操作,必须在程序中包含的头文件是______。
A、iostream
B、fstream
C、strstream
D、iomanip
有如下程序:
#include
usingnamespacestd;
intmain(){
intsum;
for(inti=0;i<6;i+=3){
sum=i;
for(intj=i;j<6;j++)sum+=j;
}
cout<return0;
}
运行时的输出结果是______。
A、3
B、10
C、12
D、15
有如下程序:
#include
usingnamespacestd;
classMyClass{
public:
MyClass(intx):
val(x){}
voidSet(intx){val=x;}
voidPrint()const{cout<<"val="<private:
intval;
};
intmain(){
constMyClassobj1(10);
MyClassobj2(20);
obj1.Print();//语句1
obj2.Print();//语句2
obj1.Set(20);//语句3
obj2.Set(30);//语句4
return0;
}
其主函数中错误的语句是______。
A、语句1
B、语句2
C、语句3
D、语句4
下列关于运算符重载的叙述中,错误的是______。
A、有的运算符可以作为非成员函数重载
B、所有的运算符都可以通过重载而被赋予新的含义
C、不得为重载的运算符函数的参数设置默认值
D、有的运算符只能作为成员函数重载
下列关于模板的叙述中,错误的是______。
A、调用模板函数时,在一定条件下可以省略模板实参
B、可以用int、double这样的类型修饰符来声明模板参数
C、模板声明中的关键字class都可以用关键字typename替代
D、模板的形参表中可以有多个参数
软件工程三要素包括方法、工具和过程,其中,______支持软件开发的各个环节的控制和管理。
软件工程包括3个要素,即方法、工具和过程。
方法是完成软件工程项目的技术手段;工具支持软件的开发、管理、文档生成;过程支持软件开发的各个环节的控制、管理。
按照软件测试的一般步骤,集成测试应在______测试之后进行。
软件测试的过程按照四个步骤进行,即单元测试、集成测试、验收测试(确认测试)和系统测试。
单元测试又称模块测试,所以本题中也可以填写模块测试。
在二维表中,元组的______不能再分成更小的数据项。
二维表一般满足下面7个性质:
1、二维表中元组的个数是有限的--元组个数有限性。
2、二维表中元组均不相同--元组的惟一性。
3、二维表中元组的次序可以任意交换--元组的次序无关性。
4、二维表中元组的分量是不可分割的基本数据项--元组分量的原子性。
5、二维表中属性名各不相同--属性名惟一性。
6、二维表中属性与次序无关,可任意交换--属性的次序无关性。
7、二维表中属性的分量具有与该属性相同的值域--分量值域的同一性。
对下列二叉树进行中序遍历的结果是______。
二叉树的中序遍历指在访问根结点、遍历左子树与遍历右子树这三者中,首先遍历左子树,然后访问根结点,最后遍历右子树;并且遍历左、右子树时,仍然先遍历左子树,然后访问根结点,最后遍历右子树。
因此本题中序遍历的结果为DBXEAYFZC。
数据库设计包括概念设计、______和物理设计。
数据库设计目前一般采用生命周期法,即将整个数据库应用系统的开发分解成目标独立的若干个阶段。
它们是:
需求分析阶段、概念设计阶段、逻辑设计阶段、物理设计阶段、编码阶段、测试阶段、运行阶段、进一步修改阶段。
在数据库设计中采用上面几个阶段中的前四个阶段。
有如下类定义,请将Sample类的拷贝构造函数补充完整。
classSample{
public:
Sample(){}
~Sample(){if(p)deletep;}
Sample(constSample&s){
______
}
voidSetData(intdata){p=newint(data);}
private:
int*p;
};
本题主要考查了拷贝构造函数。
拷贝构造函数的作用是用一个已存在的对象(由拷贝构造函数的形参指定)去初始化同类的一个新创建的对象。
默认的拷贝构造函数的功能是把初始值对象的每个数据成员的值一一复制给新建立对象的对应数据成员。
类Sample的数据成员是一个指针,如果本题填写语句p=s.p;,将两个对象的对应数据成员进行简单复制,因为指针变量存放的是内存单元的地址,那么这两个对象的数据成员p存放的是同一个内存单元的地址,即指向同一个地址空间,在这两个对象生存期结束前系统将自动调用其析构函数去释放其数据成员所指向的地址空间,先析构的正确,后析构的就会释放一块已经释放的内存空间,于是导致运行错误。
实际上这里需要的是两个指针所指向的存储空间里的值相同。
因此在拷贝构造函数里应使用new运算符动态申请一个用于存放int型数据的内存空间,将已有对象的数据成员p所指向的地址空间的值存入该新分配的空间中,然后将新空间的首地址赋给新创建对象的数据成员p,对应的实现语句为p=newint(*(s.p));。
从而实现两个指针所指向的存储空间里的值相同,而不是指向同一个地址空间。
故横线处应填入p=newint(*(s.p));。
当使用关键字______作为函数返回类型时,该函数不返回任何值。
本题主要考查了函数的定义。
函数的定义形式为:
<返回类型><函数名>(<形参列表>){<函数体>}
<返回类型>又称函数类型,表示一个函数所计算(或运行)的结果值的类型。
如果一个函数仅用来更新(或设置)变量值、显示信息等,不返回任何值,则该函数返回类型为void类型。
故横线处应填入void。
重载加法运算符"+",其函数名是______。
本题主要考查了运算符重载。
C++把重载的运算符视为特殊的函数,称为运算符函数,函数名就是在运算符前加上保留字operator。
故横线处应填入operator+。
请在下列程序中的空格处填写正确的语句:
classSample{
public:
Sample(){}
~Sample(){}
voidSetDate(intdata){//将Sample类成员变量date设置成形参的值
______
}
private:
intdata;
};
本题主要考查了变量的作用域和可见性。
类Sample的数据成员data具有类作用域,成员函数SetData的形参data具有块作用域,该类作用域包含块作用域,因为在两个或多个具有包含关系的作用域中声明了同名标识符,则外层标识符在内层不可见,所以在成员函数SetData中直接使用data引用的是形参变量data而不是Sample类的数据成员data。
此时,有两个方法可以引用到Sample类的数据成员:
一是通过this指针,在类的成员函数中this指针是成员函数所属对象的指针,它指向类对象的地址,故横线处可以填this->data=data。
二是通过作用域运算符":
:
"明确指出访问的是Sample类的成员,故还可以填Sample:
:
data=data。
有如下程序:
#include
usingnamespacestd;
intfun1(intx){return++x;}
intfun2(int&x){return++x;}
intmain(){
intx=1,y=2;
y=fun1(fun2(x));
cout<return0;
}
程序的输出结果是______。
本题主要考查了函数的嵌套调用及参数值的传递。
执行到语句y=fun1(fun2(x));时,先以变量x为实参调用函数fun2,函数fun2中的参数采用引用传值方式,即函数中对形参值的改变同样作用于实参上,调用函数fun2后,实参变量x的值为2,函数返回值为2,再以该返回值2作为实参调用函数fun1,返回值为3,然后将函数fun1的返回值3赋给变量y。
故程序的输出结果为2,3。
有如下程序:
#include
usingnamespacestd;
classpumpkin{
public:
pumpkin(){++count;}
~pumpkin(){--count;}
staticvoidtotal_count(){
cout<}
private:
staticintcount;
};
intpumpkin:
:
count=0;
intmain(){
pumpkinp1[10];
pumpkin:
:
total_count();
return0;
}
这个程序的输出结果是______。
本题主要考查了静态数据成员。
一个类的静态成员的特性是被这个类的所有对象所共享,静态成员不属于类的任何一个对象。
它的作用域是类范围。
本题中,pumpkin类定义了一个静态数据成员count,并被初始化为0。
main函数的第一条语句定义了一个含有10个元素的对象数组,即创建了10个pumpkin对象,因为每创建一个pumpkin对象,系统自动调用一次pumpkin类的构造函数,count的值就增1,由此可知count用来记录建立对象的个数。
故第一条语句执行结束后,pumpkin类的构造函数被调用10次,静态数据成员count的值为10,第二条语句调用静态成员函数total_count(),执行函数体语句cout<因此本题程序的输出结果是10pumpkin(s)。
有如下递归函数:
intFun(intn){
if(n<=1)return1;
______
}
请补充完整,使得函数Fun能够正确计算形参n的阶乘。
本题主要考查了递归函数。
递归函数即自调用函数,在函数体内部直接或间接的自己调用自己。
一般递归函数由递归出口和递归体两部分组成。
递归出口给出了递归终止的条件;递归体给出了递归的方式。
题中程序已给出递归出口,但没有给出递归体,根据阶乘的定义:
n!
=n*(n-1)*…*2*1,即n!
=n*(n-1)!
可知其递归体为n*Fun(n-1),又因为所求的阶乘为函数的返回值,故横线处应填入returnn*Fun(n-1);或returnFun(n-1)*n;。
有如下程序:
#include
usingnamespacestd;
classWages{//"工资"类
doublebase;//基本工资
doublebonus;//奖金
doubletax;//税金
public:
Wages(doubleCBase,doubleCBonus,doubleCTax):
base(CBase),bonus(CBonus),tax(CTax){}
doublegetPay()const;//返回应付工资额
Wagesoperator+(Wagesw)const;//重载加法
};
doubleWages:
:
getPay()const{returnbase+bonus-tax;}
WagesWages:
:
operator+(Wagesw)const{
returnWages(base+w.base,bonus+w.bonus,tax+w.tax);
}
intmain(){
Wagesw1(2000,500,100),w2(5000,1000,300);
cout<<(w1+w2).getPay()<return0;
}
程序的输出结果是______。
本题主要考查了运算符重载。
本题程序中加法运算符"+"被重载为类Wages的成员函数,使加法运算符可以应用于类Wages的对象。
main函数的第一条语句定义了两个对象w1和w2并对其进行初始化,执行第二条语句时,先执行w1+w2,相当于w1.operator+(w2),即调用运算符函数,执行其中的语句returnWages(base+w.base,bonus+w.bonus,tax+w.tax);,创建一个临时的无名Wages对象作为返回值返回主函数,临时对象的数据成员base,bonus和tax的值分别为对象w1的相应成员和对象w2的相应成员之和,即为7000、1500和400,然后临时对象调用成员函数getPay得到应付工资额为8100(即7000+1500-400),通过return语句返回给cout对象输出。
故本题程序的输出结果为8100。
已知数组a中有n个元素,下列语句将数组a中从下标x1开始的k个元素移动到从下标x2开始的k个元素中,其中0<=x1for(inti=x1+k-1;i>=x1;i--)
a[______]=a[i];
本题主要考查了数组。
将下标x1开始的k个元素移动到从下标x2开始的k个元素,也就是将下标为i(x1≤i≤x1+k-1)的元素逐一向后方移(x2-x1)个数,即移动到下标为(i+x2-x1)的单元,所以循环体中的语句应该为a[i+x2-x1]=a[i];或a[x2-x1+i]=a[i];。
故横线处应填入i+x2-x1或x2-x1+i。
有如下程序:
#include
usingnamespacestd;
classPet{
charname[10];
public:
Pet(char*name){strcpy(this->name,name);}
constchar*getName()const{returnname;}
virtualvoidcall()const=0;
};
classDog:
publicPet{
public:
Dog(char*name):
Pet(name){}
voidcall()const{cout<<"汪汪叫";}
};
classCat:
publicPet{
public:
Cat(char*name):
Pet(name){}
voidcall()const{cout<<"喵喵叫";}
};
intmain(){
Pet*pet1=newDog("哈克"),*pet2=newCat("吉米");
cout<getName();pet1->call();cout<cout<getName();pet2->call();cout<