二级C++182.docx
《二级C++182.docx》由会员分享,可在线阅读,更多相关《二级C++182.docx(27页珍藏版)》请在冰点文库上搜索。
![二级C++182.docx](https://file1.bingdoc.com/fileroot1/2023-8/19/ce0897ec-db81-4de8-add5-888dbf5ccea4/ce0897ec-db81-4de8-add5-888dbf5ccea41.gif)
二级C++182
二级C++-18-2
(总分:
100.00,做题时间:
90分钟)
一、选择题(总题数:
40,分数:
40.00)
1.下列叙述中正确的是______。
(分数:
1.00)
A.栈是“先进先出”的线性表
B.队列是“先进后出”的线性表
C.循环队列是非线性结构
D.有序线性表既可以采用顺序存储结构,也可以采用链式存储结构 √
解析:
[解析]栈是先进后出的线性表,所以A错误;队列是先进先出的线性表,所以B错误;循环队列是线性结构的线性表,所以C错误。
2.支持子程序调用的数据结构是______。
(分数:
1.00)
A..栈 √
B..树
C.队列
D.二叉树
解析:
[解析]栈支持子程序调用。
栈是一种只能在一端进行插入或删除的线性表,在主程序调用子函数时要首先保存主程序当前的状态,然后转去执行子程序,最终把子程序的执行结果返回到主程序中调用子程序的位置,继续向下执行,这种调用符合栈的特点,因此本题的答案为A。
3.某二叉树有5个度为2的结点,则该二叉树中的叶子结点数是______。
(分数:
1.00)
A.10
B.8
C.6 √
D.4
解析:
[解析]根据二叉树的基本性质3:
在任意一颗二叉树中,度为0的叶子结点总是比度为2的结点多一个,所以本题中是5+1=6个。
4.下列排序方法中,最坏情况下比较次数最少的是______。
(分数:
1.00)
A.冒泡排序
B.简单选择排序
C.直接插入排序
D.堆排序 √
解析:
[解析]冒泡排序、直接插入排序与简单选择排序法在最坏情况下均需要比较n(n-1)/2次,而堆排序在最坏情况下需要比较的次数是nlog2n。
5.软件按功能可以分为:
应用软件、系统软件和支撑软件(或工具软件)。
下面属于应用软件的是______。
(分数:
1.00)
A.编译程序
B.操作系统
C.教务管理系统 √
D.汇编程序
解析:
[解析]编译软件、操作系统、汇编程序都属于系统软件,只有C教务管理系统才是应用软件。
6.下面叙述中错误的是______。
(分数:
1.00)
A.软件测试的目的是发现错误并改正错误 √
B.对被调试的程序进行“错误定位”是程序调试的必要步骤
C.程序调试通常也称为Debug
D.软件测试应严格执行测试计划,排除测试的随意性
解析:
[解析]软件测试的目的是为了发现错误而执行程序的过程,并不涉及改正错误,所以选项A错误。
程序调试的基本步骤有:
错误定位、修改设计和代码,以排除错误、进行回归测试,防止引进新的错误。
程序调试通常称为Debug,即排错。
软件测试的基本准则有:
所有测试都应追溯到需求、严格执行测试计划,排除测试的随意性、充分注意测试中的群集现象、程序员应避免检查自己的程序、穷举测试不可能、妥善保存测试计划等文件。
7.耦合性和内聚性是对模块独立性度量的两个标准。
下列叙述中正确的是______。
(分数:
1.00)
A.提高耦合性降低内聚性有利于提高模块的独立性
B.降低耦合性提高内聚性有利于提高模块的独立性 √
C.耦合性是指一个模块内部各个元素间彼此结合的紧密程度
D.内聚性是指模块间互相连接的紧密程度
解析:
[解析]模块独立性是指每个模块只完成系统要求的独立的子功能,并且与其他模块的联系最少且接口简单。
一般较优秀的软件设计,应尽量做到高内聚、低耦合,即减弱模块之间的耦合性和提高模块内的内聚性,有利于提高模块的独立性,所以A错误,B正确。
耦合性是模块间互相连接的紧密程度的度量而内聚性是指一个模块内部各个元素间彼此结合的紧密程度,所以C与D错误。
8.数据库应用系统中的核心问题是______。
(分数:
1.00)
A.数据库设计 √
B.数据库系统设计
C.数据库维护
D.数据库管理员培训
解析:
[解析]数据库应用系统中的核心问题是数据库的设计。
9.有两个关系R,S如下:
R
A
B
C
a
3
2
b
0
1
C
2
1
S
A
B
a
3
b
0
C
2
由关系R通过运算得到关系S,则所使用的运算为______。
(分数:
1.00)
A.选择
B.投影 √
C.插入
D.连接
解析:
[解析]投影运算是指对于关系内的域指定可引入新的运算。
本题中S是在原有关系R的内部进行的,是由R中原有的那些域的列所组成的关系。
所以选择B。
10.将E-R图转换为关系模式时,实体和联系都可以表示为______。
(分数:
1.00)
A.属性
B..键
C.关系 √
D..域
解析:
[解析]从E-R图到关系模式的转换是比较直接的,实体与联系都可以表示成关系,E-R图中属性也可以转换成关系的属性。
11.字面常量42、4.2、42L的数据类型分别是______。
(分数:
1.00)
A.long、double、int
B.long、float、int
C.int、double、long √
D.int、float、long
解析:
[解析]本题考查整型变量的类型和浮点变量的类型,42默认为int型数据,42后面加上L后,表示long型数据,4.2默认为double型数据。
12.执行下列语句段后,输出字符“*”的个数是______。
for(inti=50;i>1;--i)
cout<<"*";
(分数:
1.00)
A.48
B.49 √
C.50
D.51
解析:
[解析]本题考查for循环语句,--i表示用之前先减1,那么这个for循环语句只有50到2时才会输出“*”,所以总共输出49次。
13.有如下程序段:
inti=0,j=1;
nt&r=i;//①
r=j;//②
int*p=&i;//③
*p=&r;//④
其中会产生编译错误的语句是______。
(分数:
1.00)
A.④ √
B.③
C.②
D.①
解析:
[解析]本题考查指针和引用。
①为引用,使用正确;④中&r表示一个地址,而*p已经是一个值了,不能将一个指针赋值给一个值,所以编译错误。
14.必须用一对大括号括起来的程序段是______。
(分数:
1.00)
A.switch语句中的case标号语句
B.if语句的分支
C.循环语句的循环体
D.函数的函数体 √
解析:
[解析]本题考查C++基本控制结构,A、B、C三个选项中的大括号不是必须的,而D选项中的函数体必须使用大括号。
15.下列符号中不属于C++关键字的是______。
(分数:
1.00)
A.friend
B.namespace
C.continue
D.byte √
解析:
[解析]本题考查C++关键字,属于基本常识,显然D选项不正确。
16.下列有关函数重载的叙述中,错误的是______。
(分数:
1.00)
A.函数重载就是用相同的函数名定义多个函数
B.重载函数的参数列表必须不同
C.重载函数的返回值类型必须不同 √
D.重载函数的参数可以带有默认值
解析:
[解析]所谓函数重载是指同一个函数名可以对应着多个函数的实现。
每种实现对应着一个函数体,这些函数的名字相同,但是函数参数的类型不同,还允许参数的个数不同,但不能只有函数的返回值类型不同而参数的个数和类型相同的重载。
所以本题答案为C。
17.下列有关运算符重载的叙述中,正确的是______。
(分数:
1.00)
A.运算符重载是多态性的一种表现 √
B.C++中可以通过运算符重载创造新的运算符
C.C++中所有运算符都可以作为非成员函数重载
D.重载运算符时可以改变其结合性
解析:
[解析]重载运算符的规则如下:
①C++不允许用户自己定义新的运算符,只能对已有的C++运算符进行重载;②C++不能重载的运算符只有5个;③重载不能改变运算符运算对象的个数;④重载不能改变运算符的优先级和结合性;⑤重载运算符的函数不能有默认的参数;⑥重载的运算符必须和用户定义的自定义类型的对象一起使用,至少应有一个是类对象,即不允许参数全部是C++的标准类型。
故本题答案为A。
18.在下列原型所示的C++函数中,按“传值”方式传递参数的是______。
(分数:
1.00)
A.voidf1(intx); √
B.voidf2(int*x);
C.voidf3(constint*x);
D.voidf4(int&x);
解析:
[解析]函数参数的3种传递方式:
①将变量名作为形参和实参,即传值方式;②传递变量指针;③引用形参。
其中B、C选项都是传递变量指针,D选项为引用形参,所以本题答案为A。
19.将前缀运算符“--”重载为非成员函数,下列原型中能正确用于类中说明的是______。
(分数:
1.00)
A.Decr&operator--(int);
B.Decroperator--(Decr&,int);
C.friendDecr&operator--(Decr&);
D.friendDecroperator--(Decr&,int); √
解析:
[解析]非成员函数重载用友元函数的形式实现,“--”运算符重载分为前置和后置两种重载方式。
用友元函数来实现“--”运算符的重载时,前置“--”运算符的重载的一般格式为:
friend<type>operator--(ClassName&);后置++运算符的重载的一般格式为:
friend<type>operator--(ClassName&,int)。
所以答案为D。
20.有如下函数定义:
voidfunc(inta,int&b)
{a++;b++;}
若执行代码段:
intx=0,y=1;
func(x,y);
则变量x和y的值分别是______。
(分数:
1.00)
A.0和1
B.1和1
C.0和2 √
D.1和2
解析:
[解析]函数参数的3种传递方式:
①将变量名作为形参和实参,即传值方式;②传递变量指针;③引用形参。
本题中实参x为传值方式,所以x的值不会改变;y为引用形参,所以会改变。
故本题答案为C。
21.下列运算符中,不能被重载的是______。
(分数:
1.00)
A.&&
B.!
=
C.. √
D.++
解析:
[解析]C++不能重载的运算符只有5个,即“.”、“.*”、“:
:
”、“?
:
”、“sizeof”,故本题答案为C。
22.关于运算符重载,下列表述中正确的是______。
(分数:
1.00)
A.C++已有的任何运算符都可以重载
B.运算符函数的返回类型不能声明为基本数据类型
C.在类型转换符函数的定义中不需要声明返回类型 √
D.可以通过运算符重载来创建C++中原来没有的运算符
解析:
[解析]重载运算符的规则如下:
①C++不允许用户自己定义新的运算符,只能对已有的C++运算符进行重载;②C++不能重载的运算符只有5个;③重载不能改变运算符运算对象的个数;④重载不能改变运算符的优先级和结合性;⑤重载运算符的函数不能有默认的参数;⑥重载的运算符必须和用户定义的自定义类型的对象一起使用,至少应有一个是类对象,即不允许参数全部是C++的标准类型。
故本题答案为C。
23.下列关于类定义的说法中,正确的是______。
(分数:
1.00)
A.类定义中包括数据成员和函数成员的声明 √
B.类成员的缺省访问权限是保护的
C.数据成员必须被声明为私有的
D.成员函数只能在类体外进行定义
解析:
[解析]类的成员的缺省访问权限是私有的,数据成员可以是私有,可以是公刚的,也可以足受保护的。
类的成员函数可以在类内定义。
24.有如下程序:
#include<iostream>
usingnamespacestd;
classA{
public:
staticinta;
voidinit(){a=1;}
A(inta=2){init();a++;}
};
intA:
:
a=0:
Aobj;
intmain()
{
cout<<obj.a;
return0;
}
运行时输出的结果是______。
(分数:
1.00)
A.0
B.1 √
C.2
D.3
解析:
[解析]本题考查构造函数,本题中对类中的a数据成员先是赋值为0,当定义了对象obj时,执行构造函数,将a的值变为了1,所以输出1。
25.以下关键字不能用来声明类的访问权限的是______。
(分数:
1.00)
A.public
B.static √
C.protected
D.private
解析:
[解析]类的成员访问权限有3种:
public(公用)、protected(保护)、private(私有)。
26.下列关于派生类构造函数和析构函数的说法中,错误的是______。
(分数:
1.00)
A.派生类的构造函数会隐含调用基类的构造函数
B.如果基类中没有缺省构造函数,那么派生类必须定义构造函数
C.在建立派生类对象时,先调用基类的构造函数,再调用派生类的构造函数
D.在销毁派生类对象时,先调用基类的析构函数,再调用派生类的析构函数 √
解析:
[解析]在销毁派生类对象时,先调用派生类的析构函数,再调用基类的析构函数。
27.派生类的成员函数不能访问基类的______。
(分数:
1.00)
A.公有成员和保护成员
B.公有成员
C.私有成员 √
D.保护成员
解析:
[解析]本题考查3种继承方式,其中,基类的私有成员始终为基类私有。
所以派生类无法访问基类的私有成员。
本题答案为C。
28.有如下类定义:
classAA{
inta;
Public:
AA(intn=0):
a(n)}}
};
classBB:
publicAA{
public:
BB(intn)
};
其中横线处的缺失部分是______。
(分数:
1.00)
A.:
a(n){}
B.:
AA(n){} √
C.{a(n);}
D.{a=n;}
解析:
[解析]本题考查公用继承对基类成员的访问属性。
公用继承中,基类的公用成员和保护成员在派生类中保持原有访问属性,其私有成员仍为基类私有,本题中若要给派生类继承下来基类的私有成员赋值,那么只能调用基类的成员函数来对它赋值,成员变量默认的访问权限为私有,即a为私有变量。
所以本题答案为B。
29.有如下程序:
#include<iostream>
usingnamespacestd;
classtest{
private:
inta;
public:
test(){cout<<"constructor"<<endl;}
test(inta){cout<<a<<endl;}
test(consttest&_test){
a=_test.a;
cout<<"copyconstructor"<<endl;
}
~test(){cout<<"destructor"<<endl;}
};
intmain(){
testA(3);
return0;
}
执行这个程序的输出结果是______。
A.3
B.
C.
D.
(分数:
1.00)
A.
B.
C.
D. √
解析:
[解析]本题考查默认构造函数和带参数的构造函数以及析构函数,本题中定义了一个对象A(3),对象带着参数,所以执行带参数的构造函数,输出3,然后执行析构函数,输出destructor。
所以本题答案为D。
30.若有如下类声明:
classMyClass{
public:
MyClass(){cout<<1;}
};
执行下列语句
MyClassa,b[2],*p[2];
程序的输出结果是______。
(分数:
1.00)
A.11
B.111 √
C.1111
D.11111
解析:
[解析]本题考查默认构造函数和带参数的构造函数,题目中定义一个对象a以及对象数组b[2],共执行3次构造函数,对象指针不调用构造函数。
所以本题答案为B。
31.有如下程序:
#include<iostream>
usingnamespacestd;
classPoint{
public:
staticintnumber;
public:
Point(){number++;}
~Point(){number--;}
};
intPoint:
:
number=0;
intmain(){
Point*ptr;
PointA,B;
{
Point*ptr_point=newPoint[3];
ptr=ptr_point;
}
PointC;
cout<<Point:
:
number<<endl;
delete[]ptr;
return0;
}
执行这个程序的输出结果是______。
(分数:
1.00)
A.3
B.4
C.6 √
D.7
解析:
[解析]本题考查默认构造函数,题目中定义一个对象A、B以及对象数组Point[3],又定义了对象C,共执行6次构造函数,number变为了6,所以本题答案为C。
32.有如下程序:
#include<iostream>
usingnamespacestd;
classSample{
friendlongfun(Samples);
public:
Sample(longa){x=a;}
private:
longx;
};
longfun(Samples){
if(s.x<2)return1;
returns.x*fun(Sample(s.x-1));
}
intmain()
{
intsum=0;
for(inti=0;i<6;i++)
{sum+=fun(Sample(i));}
cout<<sum;
return0;
}
执行这个程序的输出结果是______。
(分数:
1.00)
A.120
B.16
C.154 √
D.34
解析:
[解析]本题考查默认构造函数,当i=0、时,fun(Sample(i))为1;当i=2时,fun(Sample(i))为2;当i=3时,fun(Sample(i))为6;当i=4时,fun(Sample(i))为24;当i=5时,fun(Sample(i))为120。
所以总和为154。
33.有如下程序:
classBase{
public:
intdata;
};
classDerivedl:
publicBase{};
classDerived2:
protectedBase{};
intmain()
{
Derivedld1;
Derived2d2;
d1.data=0;//①
d2.data=0;//②
return0;
}
下列关于程序编译结果的描述中,正确的是______。
(分数:
1.00)
A.①②皆无编译错误
B.①有编译错误,②无编译错误
C.①无编译错误,②有编译错误 √
D.①②皆有编译错误
解析:
[解析]本题考查公用继承和保护继承对基类成员的访问属性。
在公用继承中,基类的公用成员和保护成员在派生类中保持原有访问属性,其私有成员仍为基类私有。
在受保护继承中,基类的公用成员和保护成员在派生类中成了保护成员,其私有成员仍为基类私有。
本题中Dezived1公用继承。
Base,所以①编译正确,Derived2保护继承Base,所以②编译不正确。
34.有如下程序:
#include<iostream>
usingnamespacestd;
classA{
public:
A(inti){x=i;}
voiddispa(){cout<<x<<",";}
private:
intx;
};
classB:
publicA{
public:
B(inti):
A(i+10){x=i;}
voiddispb(){dispa();cout<<x<<endl;}
private:
intx;
};
intmain(){
Bb
(2);
b.dispb();
return0;
}
执行这个程序的输出结果是______。
(分数:
1.00)
A.10,2
B.12,10
C.12,2 √
D.2,2
解析:
[解析]本题考查派生类的构造函数和基类的构造函数。
本题中类B继承类A,定义了一个类B的对象并初始化b
(2),此时会执行类B的构造函数,执行的结果是继承类A中的私有成员赋值了12,给类B自身的数据成员x赋值了2,执行b.dispb()后,输出类A的私有成员x,输出类B自身的数据成员,所以答案为C。
35.有如下程序:
#include<iostream>
usingnamespacestd;
classMusic{
public:
voidsetTitle(char*str){strcpy(title,str);}
protected:
chartype[10];
private:
chartitle[20];
};
classJazz:
publicMusic{
public:
voidset(char*str){
strcpy(type,"Jazz");//①
strcpy(title,str);//②
}
};
下列叙述中正确的是______。
(分数:
1.00)
A.程序编译正确
B.程序编译时语句①出错
C.程序编译时语句②出错 √
D.程序编译时语句①和②都出错
解析:
[解析]本题考查公用继承和保护继承对基类成员的访问属性。
公用继承中,基类的公用成员和保护成员在派生类中保持原有访问属性,其私有成员仍为基类私有。
保护成员不能被类外访问,但是可以被派生类的成员函数访问。
Type成为派生类的保护成员,可以被派生类访问,title仍为基类私有,派生类不能直接访问。
所以答案为C。
36.有如下程序:
#include<iostrcam>
usingnamespacestd;
classBook{
public:
Book(char*t=""){strcpy(title,t);}
private:
chartitle[40];
};
classNovel:
publicBook{
public:
Novel(char*t=""):
Boo