二级C++184.docx
- 文档编号:10386734
- 上传时间:2023-05-25
- 格式:DOCX
- 页数:17
- 大小:23.24KB
二级C++184.docx
《二级C++184.docx》由会员分享,可在线阅读,更多相关《二级C++184.docx(17页珍藏版)》请在冰点文库上搜索。
二级C++184
二级C++-184
(总分:
100.00,做题时间:
90分钟)
一、选择题(总题数:
40,分数:
100.00)
1.下列选项中不符合良好程序设计风格的是______。
(分数:
2.50)
A.源程序要文档化
B.数据说明的次序要规范化
C.避免滥用goto语句
D.模块设计要保证高耦合、高内聚 √
解析:
[解析]良好的程序设计风格可以使程序结构清晰合理,使程序代码便于维护,因此,程序设计风格对保证程序的质量很重要。
主要应注意和考虑下述一些因素:
(1)源程序要文档化;
(2)数据说明的次序要规范化;(3)语句的结构应该简单直接,不应该为提高效率而把语句复杂化,避免滥用goto语句。
模块设计要保证低耦合、高内聚。
2.从工程管理角度看,软件设计一般分为两步完成,它们是______。
(分数:
2.50)
A.概要设计与详细设计 √
B.数据设计与接口设计
C.软件结构设计与数据设计
D.过程设计与数据设计
解析:
[解析]从工程管理角度看,软件设计分为两步完成:
概要设计与详细设计。
概要设计(又称结构设计)将软件需求转化为软件体系结构、确定系统级接口、全局数据结构或数据库模式;详细设计确立每个模块的实现算法和局部数据结构,用适当方法表示算法和数据结构的细节。
3.下列选项中不属于软件生命周期开发阶段任务的是______。
(分数:
2.50)
A.软件测试
B.概要设计
C.软件维护 √
D.详细设计
解析:
[解析]软件生命周期分为软件定义、软件开发及软件维护。
其中软件开发阶段的任务中软件设计阶段可分解成概要设计阶段和详细设计阶段;软件维护不属于软件开发阶段。
4.在数据库系统中,用户所见的数据模式为______。
(分数:
2.50)
A.概念模式
B.外模式 √
C.内模式
D.物理模式
解析:
[解析]概念模式是数据库系统中全局数据逻辑结构的描述,是全体用户(应用)公共数据视图,它主要描述数据的记录类型及数据间关系,还包括数据间的语义关系等。
数据库管理系统的三级模式结构由外模式、模式、内模式组成。
数据库的外模式也称为用户级数据库,是用户所看到和理解的数据库,是从概念模式导出的子模式,用户可以通过子模式描述语言来描述用户级数据库的记录,还可以利用数据语言对这些记录进行操作。
内模式,或称存储模式或物理模式,是指数据在数据库系统内的存储介质上的表示,即对数据的物理结构和存取方式的描述。
5.数据库设计的四个阶段是:
需求分析、概念设计、逻辑设计和______。
(分数:
2.50)
A.编码设计
B.测试阶段
C.运行阶段
D.物理设计 √
解析:
[解析]我们按规范设计方法将数据库设计分为以下六个阶段:
需求分析、概念结构设计、逻辑结构设计、数据库物理设计、数据库实现、数据库运行和维护。
一般上数据库设计方法和步骤:
需求分析、概念设计、逻辑设计和物理设计。
6.下列操作中正确的是______。
(分数:
2.50)
A.T=R∩S
B.T=R∪S
C.T=R×S √
D.T=R/S
解析:
[解析]集合的并、交、差、广义笛卡儿积:
设有两个关系为R和S,它们具有相同的结构,R和S的并是由属于R和S,或者同时属于R和S的所有元组组成的集合,记作R∪S;R和S的交是由既属于R又属于S的所有元组组成的集合,记作R∩S;R和S的差是由属于R但不属于S的所有元组组成的集合,记作R-S;元组的前n个分量是R的一个元组,后m个分量是S的一个元组,若R有K1个元组,S有K2个元组,则R×S有K1×K2个元组,记为R×S。
从图中可以看出,关系T是关系R和关系S的简单扩充,而扩充的符号为×,所以答案为T=R×S。
7.下列描述中正确的是______。
(分数:
2.50)
A.一个算法的空间复杂度大,则其时间复杂度也必定大
B.一个算法的空间复杂度大,则其时间复杂度必定小
C.一个算法的时间复杂度大,则其空间复杂度必定小
D.上述三种说法都不对 √
解析:
[解析]算法在运行过程中所需要的辅助存储空间的大小称为算法空间复杂度;算法的时间复杂度是执行该算法所需要的计算工作量,即算法执行过程中所需要的基本运算次数。
为了能够比较客观地反映出一个算法的效率,在度量一个算法的工作量时,与所使用的计算机、程序设计语言以及程序编制者无关,而且还与算法实现过程中的许多细节无关。
但可以用算法在执行过程所需基本运算的执行次数来度量算法的工作量。
8.在长度为64的有序线性表中进行顺序查找,最坏情况下需要比较的次数为______。
(分数:
2.50)
A.63
B.64 √
C.6
D.7
解析:
[解析]在进行顺序查找过程中,如果线性表中的第1个元素就是要查找元素,则只需要做一次比较就查找成功,查找效率最高;但如果被查找的元素是线性表中的最后一个元素,或者被查找的元素根本就不在线性表中,则为了查找这个元素需要与线性表中的所有元素进行比较,这是顺序查找的最坏情况。
所以对长度为n的线性表进行顺序查找,在最坏情况下需要比较n次。
9.数据库技术的根本目标是要解决数据的______。
(分数:
2.50)
A.存储问题
B.共享问题 √
C.安全问题
D.保护问题
解析:
[解析]随着网络技术的发展,使数据可为多个应用所共享,数据的共享自身又可减少数据冗余性,不仅减少了不必要的存储空间,更为重要的是可以避免数据的不一致性。
因此,数据库设计的根本目标是要解决数据共享问题,而数据的安全性保护问题和存储问题是数据库技术不可缺少的内容。
10.对下列二叉树进行中序遍历的结果是______。
(分数:
2.50)
A.ACBDFEG √
B.ACBDFGE
C.ABDCGEF
D.FCADBEG
解析:
[解析]中序遍历首先遍历左子树,然后访问根结点,最后遍历右子树。
11.下列有关内联函数的叙述中,正确的是______。
(分数:
2.50)
A.内联函数在调用时发生控制转移
B.内联函数必须通过关键字inline来定义
C.内联函数是通过编译器来实现的 √
D.内联函数函数体的最后一条语句必须是return语句
解析:
[解析]在C++中,内联函数是为了取代宏而引进的,它是真正的函数,但是和普通函数不同的是,在编译阶段通过编译器在函数调用的时候像宏一样展开使用。
并不发生控制转移.也没有返回值,没有返回语句。
内联函数除了可以用inline定义外,还可以用inline来声明实现。
12.下列情况中,不会调用拷贝构造函数的是______。
(分数:
2.50)
A.用一个对象去初始化同一类的另一个新对象时
B.将类的一个对象赋值给该类的另一个对象时 √
C.函数的形参是类的对象,调用函数进行形参和实参结合时
D.函数的返回值是类的对象,函数执行返回调用时
解析:
[解析]只要在程序的执行中,需要用一个对象来初始化另一个正在创建的对象时,都要调用复制构造函数。
13.下列有关继承和派生的叙述中,正确的是______。
(分数:
2.50)
A.如果一个派生类私有继承其基类,则该派生类对象不能访问基类的保护成员
B.派生类的成员函数可以访问基类的所有成员
C.基类对象可以赋值给派生类对象
D.如果派生类没有实现基类的一个纯虚函数,则该派生类是一个抽象类 √
解析:
[解析]派生类私有继承基类后,基类的保护成员变为派生类的私有成员,可以访问。
基类的私有成员派生类是不能访问的。
基类的对象是无法赋值给派生类的。
14.下列运算符不能重载为友元函数的是______。
(分数:
2.50)
A.=()[]-> √
B.+-+---
C.><>=<=
D.+=-=*=/=
解析:
[解析]“=”、“()”、“[]”、“->”只能作为成员函数重载。
15.关于在调用模板函数时模板实参的使用,下列表述正确的是______。
(分数:
2.50)
A.对于虚拟类型参数所对应的模板实参,如果能从模板函数的实参中获得相同的信息,则都可以省略
B.对于虚拟类型参数所对应的模板实参,如果它们是参数表中的最后的若干个参数,则都可以省略
C.对于虚拟类型参数所对应的模板实参,若能够省略则必须省略
D.对于常规参数所对应的模板实参,任何情况下都不能省略 √
解析:
[解析]只有从函数实参获得的信息已经能够判定其中部分或全部虚拟类型参数所对应的实参,而且它们又是模板参数表中最后的若干个参数,则模板参数表中的那几个参数才可以省略,但不是必须省略的。
常规参数的信息无法从模板的实参表中获得,因此不能省略,D是正确的。
16.下列关于输入流类成员函数getline()的描述中,错误的是______。
(分数:
2.50)
A.该函数是用来读取键盘输入的字符串的
B.该函数读取的字符串长度是受限制的 √
C.该函数读取字符串时,遇到终止符便停止
D.该函数读取字符串时,可以包含空格
解析:
[解析]此函数的作用是用来读取键盘输入的字符串,在读取字符串时,遇到终止符(默认为回车)便停止,因此字符串是可以包含空格的,读取的字符长度也是没有限制的,直到遇到终止符为止,但接收字符串的数组是有限的。
所以B是错误的。
17.下列符号中,正确的C++标识符是______。
(分数:
2.50)
A.enum
B.2b
C.foo-9
D._32 √
解析:
[解析]在C++中,标识符只能使用字母、数字、下画线、其中数字不能是首字符,关键字也不能为标识符,故答案D是正确的。
18.下列语句中,错误的是______。
(分数:
2.50)
A.constintbuffer=256;
B.constdouble*point;
C.intconstbuffer=256;
D.double*constpoint; √
解析:
[解析]修饰符const和<类型名>是可以互换的,B中声明的是一个指向double型常量的指针,所以不用初始化,D项定义的是指向double型变量的常指针,故必须是定义的同时要初始化。
且在程序中式不可以改变的。
19.if语句的语法格式可描述为:
格式1:
if(<条件>)<语句>或格式2:
if(<条件>)<语句1>else<语句2>关于上面的语法格式,下列表述中错误的是______。
(分数:
2.50)
A.<条件>部分可以是一个if语句,例如if(if(a==0)…)… √
B.<语句>部分可以是一个if语句,例如if(…)if(…)…
C.如果在<条件>前加上逻辑非运算符!
并交换<语句1>和<语句2>的位置,语句功能不变
D.<语句>部分可以是一个循环语句,例如if(…)while(…)…
解析:
[解析]if语句的<条件>一般为一个表达式或者是一个声明语句且必须用圆括号包围起来;if语句的<语句>部分可以是任何类型的语句(包括复合语句和空语句)。
A选项的<条件>既不是表达式又不是声明语句,故A项是错误的。
20.有如下说明:
inta[10]={1,2,3,4,5,6,7,8,9,10},*p=a;
则数值为9的表达式是______。
(分数:
2.50)
A.*p+9
B.*(p+8) √
C.*p+=9
D.p+8
解析:
[解析]定义了指针p,初值为数组a的首地址,*p为第一个元素.所以第几个元素是*(p+8)。
21.若有下面的函数调用:
fun(a+b,3,max(n-1,b)),则fun的实参个数是______。
(分数:
2.50)
A.3 √
B.4
C.5
D.6
解析:
[解析]第一个参数为表达式a+b,第二个参数是3,第三个参数是一个函数。
22.以下关键字不能用来声明类的访问权限的是______。
(分数:
2.50)
A.public
B.static √
C.protected
D.private
解析:
[解析]public、protected、private是声明类的访问权限的,static是用来声明静态变量的。
23.在公有继承的情况下,允许派生类直接访问的基类成员包括______。
(分数:
2.50)
A.公有成员
B.公有成员和保护成员 √
C.公有成员、保护成员和私有成员
D.保护成员
解析:
[解析]派生类公有继承基类后,基类的成员访问权限没有发生变化,派生类可以直接访问其公有和保护成员。
24.关于运算符重载,下列表述中正确的是______。
(分数:
2.50)
A.C++已有的任何运算符都可以重载
B.运算符函数的返回类型不能声明为基本数据类型
C.在类型转换符函数的定义中不需要声明返回类型 √
D.可以通过运算符重载来创建C++中原来没有的运算符
解析:
[解析]“.”、“:
:
”、“.*”、“->”、“?
:
”五个运算符是不可以重载的,运算符的返回类型不能为void类型,其他基本数据类型都可,重载只是重定义原来存在的运算符,不可能创造出新的运算符。
25.关于关键字class和typename,下列表述中正确的是______。
(分数:
2.50)
A.程序中的typename都可以替换为class √
B.程序中的class都可以替换为typename
C.在模板形参表中只能用typename来声明参数的类型
D.在模板形参表中只能用class或typename来声明参数的类型
解析:
[解析]程序中typename是可以用class替换的,但class在类模板名前代表的是类不能用typename替换,在模板形参表中除了它们以外,常规类型也可以声明参数类型。
26.有如下程序:
#include<iostream>
#include<iomanip>
usingnamespacestd;
intmain()
{
cout<<setprecision(3)<<fixed<<
setfill("*")<<setw(8);
cout<<12.345<<______<<34.567;
return0;
}
若程序的输出是:
**12.345**34.567
则程序中下画线处遗漏的操作符是______。
(分数:
2.50)
A.setprecision(3)
B.fixed
C.setfill("*")
D.setw(8) √
解析:
[解析]执行语句cout<<setprecision(3)<<fixed<<setfill("*")<<setw(8);完成的功能是:
设置小数为定点输出,小数后有三位,设置宽度为8,默认右对齐,填充字符*,其中setw的效果只对一次输入/输出有效,而setprecision和sefill的设置效果一直持续到下次设置,故12.345输出为**12.345,而第二个数字输出格式与12.345相同,因此必须再次设置宽度,即setw(8)。
27.有如下程序:
#include<iostream>
#include<iomanip>
usingnamespacestd;
classMyClass{
public:
MyClass(){cout<<"A";}
MyClass(charc){cout<<c;}
~MyClass(){cout<<"B";}
};
intmain(){
MyClassp1,*p2;
p2=newMyClass("X");
deletep2;
return0;
}
执行这个程序屏幕上将显示输出______。
(分数:
2.50)
A.ABX
B.ABXB
C.AXB
D.AXBB √
解析:
[解析]定义对象p1时,调用无参构造函数,输出A,定义对象指针p2时,不调用构造函数,初始化p2时,调用含参构造函数,输出X,删除对象指针时调用析构函数,输出B,主函数结束时,对象p1调用析构函数释放空间,输出B。
28.有如下程序:
#include<iostream>
usingnamespacestd;
inti=1;
classFun{
public:
staticinti;
intvalue(){returni-1;}
intvalue()const{returni+1;}
};
intFun:
:
i=2;
intmain(){
inti=3;
Funfun1;
constFunfun2;
______
return0;
}
若程序的输出结果是:
123
则程序中下画线处遗漏的语句是______。
(分数:
2.50)
A.cout<<fun1.value()<<Fun:
:
i<<fun2.value(); √
B.cout<<Fun:
:
i<<fun1.value()<<fun2.value();
C.cout<<fun1.value()<<fun2.value()<<Fun:
:
i;
D.cout<<fun2.value()<<Fun:
:
i<<fun1.value();
解析:
[解析]此程序中有全局变量、静态变量和局部变量以及常函数,根据它们的定义,可执行fun1.value()调用的i,FUN:
:
i,常对象fun2.value()调用的i,即可得到输出123。
29.有如下程序:
#include<iostream>
usingnamespacestd;
classObj(
staticinti;
public:
Obj(){i++;}
~Obj(){i--;}
staticintgetVal(){returni;}
};
intObj:
:
i=0;
voidf(){Objob2;cout<<ob2.getVal();}
intmain(){
Objob1;
f();
Obj*ob3=newObj;cout<<ob3->getVal();
deleteob3;cout<<Obj:
:
getVal();
return0;
}
程序的输出结果是______。
(分数:
2.50)
A.232
B.231
C.222
D.221 √
解析:
[解析]静态数据成员i=0,创建对象ob1时,调用构造函数i++,调用f()函数,创建ob2时,再调用构造函数,i++,然后利用静态成员函数输出i=2;f()函数结束时,调用析构函数i--,创建ob3对象时,再调用构造函数,i++,利用静态成员函数输出i=2,删除对象ob3,调用析构函数i--,利用成员函数输出i=1。
30.有如下程序:
#include<iostream>
usingnamespacestd;
classBase{
protected:
Base(){cout<<"A";}
Base(charc){cout<<c;}
};
classDerived:
publicBase{
public:
Derived(charc){cout<<c;}
};
intmain(){
Derivedd1("B");
return0;
}
执行这个程序屏幕上将显示输出______。
(分数:
2.50)
A..B
B.BA
C.AB √
D.BB
解析:
[解析]根据派生类的构造函数执行顺序,创建派生类对象时,首先执行基类的默认构造函数,输出A,接下来执行派生类B的构造函数,输出B。
31.有如下类定义:
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;}
};
编译时发现有一处语法错误,对这个错误最准确的描述是______。
(分数:
2.50)
A.函数getK试图访问基类的私有成员变量k √
B.在类MyDerived的定义中,基类名MyBase前缺少关键字public、protected或private
C.类MyDerived缺少一个无参的构造函数
D.类MyDerived的构造函数没有对基类数据成员k进行初始化
解析:
[解析]类中的成员若没有指明访问权限则默认为私有成员,派生类无论刚什么方式继承都不能访问基类的私有成员。
当不指名继承方式时,也默认为私有继承。
32.在一个派生类对象结束其生命周期时______。
(分数:
2.50)
A.先调用派生类的析构函数后调用基类的析构函数 √
B.先调用基类的析构函数后调用派生类的析构函数
C.如果基类没有定义析构函数,则只调用派生类的析构函数
D.如果派生类没有定义析构函数,则只调用基类的析构函数
解析:
[解析]根据派生类调用析构函数的顺序可知,派生类在结束生命周期时,先调用派生类的析构函数,再调用基类的构造函数。
33.有如下的运算符重载函数定义:
doubleoperator+(inti,intk){returndouble(i+k);}
但定义有错误,对这个错误最准确的描述是
(分数:
2.50)
A.+只能作为成员函数重载,而这里的+是作为非成员函数重载的
B.两个int型参数的和也应该是int型,而这里将+的返回类型声明为double
C.没有将运算符重载函数声明为某个类的友元
D.C++已经提供了求两个int型数据之和的运算符+,不能再定义同样的运算符 √
解析:
[解析]运算符重载不能改变当运算符作用于C++内部类型的对象时的含义,例如,不能改变运算符“+”作用于两个int型的含义,即运算符重载函数的参数中至少存在一个用户自定义对象。
34.语句“ofstreamf("SALARY.DAT",ios_base:
:
app);”的功能是建立流对象f,并试图打开文件SALARY.DAT与f关联,而且______。
(分数:
2.50)
A.若文件存在,将其置为空文件;若文件不存在,打开失败
B.若文件存在,将文件指针定位于文件尾;若文件不存在,建立一个新文件 √
C.若文件存在,将文件指针定位于文件首;若文件不存在,打开失败
D.若文件存在,打开失败;若文件不存在,建立一个新文件
解析:
[解析]ios_base:
:
app的作用是为添加数据而打开(总在末尾),因此答案B是正确的。
35.有如下程序:
#include<iostream>
usingnamespacestd;
classA{
public:
virtualvoidfuncl(){cout<<"A1";}
voidfunc2(){cout<<"A2";}
};
classB:
publicA{
public:
voidfunc1(){cout<<"B1";}
voi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 二级 C+ 184