计算机二级C++笔试243.docx
《计算机二级C++笔试243.docx》由会员分享,可在线阅读,更多相关《计算机二级C++笔试243.docx(19页珍藏版)》请在冰豆网上搜索。
![计算机二级C++笔试243.docx](https://file1.bdocx.com/fileroot1/2022-12/8/666f8e1a-1dc2-4ac2-943c-8edba110ddec/666f8e1a-1dc2-4ac2-943c-8edba110ddec1.gif)
计算机二级C++笔试243
[模拟]计算机二级(C++)笔试243
一、选择题(每小题2分,共70分)下列各题[A]、[B]、[C]、[D]四个选项中,只有一个选项是正确的。
第1题:
下列叙述中正确的是
A.程序设计就是编制程序
B.程序的测试必须由程序员自己去完成
C.程序经调试改错后还应进行再测试
D.程序经调试改错后不必进行再测试
参考答案:
C
答案解析:
程序设计是指设计、编制和调试程序的方法和过程。
软件测试的原则:
①软件开发人员即程序员应当避免测试自己的程序。
②应尽早地、不断地进行软件测试,而且必须反复地分阶段进行测试。
第2题:
下列数据结构中,能用二分法进行查找的是
A.顺序存储的有序线性表
B.线性链表
C.二叉链表
D.有序线性链表
参考答案:
A
答案解析:
二分法查找的前提条件是被查找的线性表必须是有序的。
第3题:
下列关于栈的描述中正确的是
A.在栈中只能插入元素而不能删除元素
B.在栈中只能删除元素而不能插入元素
C.栈是特殊的线性表,只能在一端插入或删除元素
D.栈是特殊的线性表,只能在一端插入元素,而在另一端删除元素
参考答案:
C
答案解析:
栈是一种数据结构,是在某一端进行插入和删除的特殊线性表。
它按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶。
在栈顶进行插入或删除操作,不需要修改栈底指针。
栈的实现可以采用顺序存储也可以采用链表存储。
第4题:
下列叙述中正确的是
A.一个逻辑数据结构只能有一种存储结构
B.数据的逻辑结构属于线性结构,存储结构属于非线性结构
C.一个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数据处理的效率
D.一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理的效率
参考答案:
D
答案解析:
数据的逻辑结构是对数据元素之间的逻辑关系的描述,它可以用一个数据元素的集合和在此集合中定义的若干关系来表示。
数据的逻辑结构在计算机存储空间中的存放形式称为数据的存储结构(也称数据的物理结构)。
一种数据的逻辑结构根据需要可以表示成多种存储结构,常用的存储结构有顺序、链接等存储结构。
但是不同的存储结构的数据的处理效率不同。
第5题:
下列叙述中正确的是
A.软件工程只是解决软件项目的管理问题
B.软件工程主要解决软件产品的生产率问题
C.软件工程的主要思想是强调在软件开发过程中需要应用工程化原则
D.软件工程只是解决软件开发中的技术问题
参考答案:
C
答案解析:
软件工程是应用计算机科学、数学及管理科学等原理开发软件的工程。
软件工程借鉴传统工程的原则、方法,以提高质量、降低成本。
软件工程的目标是:
在给定成本、进度的前提下,开发出具有可修改性、有效性、可靠性、可理解性、可维护性、可重用性、可适应性、可移植性、可追踪性和可互操作性并且满足用户需求的软件产品。
第6题:
下列对于软件的叙述中正确的是
A.软件测试的目的是证明程序是否正确
B.软件测试的目的是使程序运行结果正确
C.软件测试的目的是尽可能多地发现程序中的错误
D.软件测试的目的是使程序符合结构化原则
参考答案:
C
答案解析:
软件测试是程序的一种执行过程,目的是尽可能发现并改正被测试软件中的错误,提高软件的可靠性。
第7题:
为了使模块尽可能独立,要求
A.模块的内聚程序要尽量高,且各模块间的耦合程序要尽量强
B.模块的内聚程序要尽量高,且各模块间的耦合程序要尽量弱
C.模块的内聚程序要尽量低,且各模块间的耦合程序要尽量弱
D.模块的内聚程序要尽量低,且各模块间的耦合程序要尽量强
参考答案:
B
答案解析:
为了使模块尽可能独立,要求模块的内聚程度尽量高,且各模块之间的耦合程度要尽量弱。
第8题:
下列叙述中正确的是
A.程序就是软件
B.软件开发不受计算机系统的限制
C.软件既是逻辑实体,又是物理实体
D.软件是程序、数据与相关文档的集合
参考答案:
D
答案解析:
软件是一系列按照特定顺序组织的计算机数据和指令的集合。
软件并不只是包括在计算机上运行的程序,与这些程序相关的文档也被认为是软件的一部分。
简单地说,软件就是程序加文档和数据的集合体。
第9题:
数据独立性是数据库技术的重要特点之一。
所谓数据独立性是指
A.数据与程序独立存放
B.不同的数据被存放在不同的文件中
C.不同的数据只能被对应的应用程序所使用
D.以上3种说法都不对
参考答案:
D
答案解析:
数据独立性是指建立在数据的逻辑结构和物理结构分离的基础上,用户以简单的逻辑结构操作数据而无须考虑数据的物理结构,转换工作由数据库管理系统实现。
数据独立性分为数据的物理独立和数据的逻辑独立。
第10题:
用树状结构表示实体之间联系的模型是
A.关系模型
B.网状模型
C.层次模型
D.以上3个都是
参考答案:
C
答案解析:
实体之间的关系模型包括层次模型、网状模型和关系模型,其中,层次模型可以由树状结构来表示。
第11题:
为了取代C中带参数的宏,在C+十中使用
A.重载函数
B.内联函数
C.递归函数
D.友元函数
参考答案:
B
答案解析:
内联函数是inline,当程序中出现对该函数的调用时,编译器使用函数体中的代码插入到调用该函数的语句处,同时用实参代替形参。
一般在程序运行时不再进行函数调用,代替了C语言中的宏定义。
第12题:
下列关于类定义的叙述中,正确的是
A.类定义中包括数据成员和函数成员的声明
B.类成员的缺省访问权限是保护的
C.数据成员必须被声明为私有的
D.成员函数只能在类体外进行定义
参考答案:
A
答案解析:
在类的定义中,类的数据成员和成员函数可在类中声明,在类中或者类外定义均可。
在类外定义成员函数时,要加上类名和域作用符,类名:
:
为前缀,在类中的成员的默认访问权限为私有的。
第13题:
下列关于派生类构造函数和析构函数的叙述中,错误的是
A.派生类的构造函数会隐含调用基类的构造函数
B.如果基类中没有默认构造函数,那么派生类必须定义构造函数
C.在建立派生类对象时,先调用基类的构造函数,再调用派生类的构造函数
D.在销毁派生类对象时,先调用基类的析构函数,再调用派生类的析构函数
参考答案:
D
答案解析:
在通常情况下,派生类和基类的构造函数的执行顺序为:
先执行基类的构造函数,然后执行派生类的构造函数;当撤销派生类对象时,先执行派生类的析构函数,随后再执行基类的析构函数。
第14题:
通过运算符重载,可以改变运算符原有的
A.操作数类型
B.操作数个数
C.优先级
D.结合性
参考答案:
A
答案解析:
运算符重载不能改变运算符原有的优先级、结合特性和操作数个数。
运算符重载不能创建新的运算符,运算符重载可以改变运算符参数的类型和返回值的类型。
第15题:
有如下函数模板:
templateTsouare(Tx)(returllx*x;) 其中T是
A.函数形参
B.函数实参
C.模板形参
D.模板实参
参考答案:
C
答案解析:
函数模板定义的一般格式为:
Template<typename类型参数>返回类型 函数名(模板形参表){函数体}
第16题:
使用输入/输出操作符setw,可以控制
A.输出精度
B.输出宽度
C.对齐方式
D.填充字符
参考答案:
B
答案解析:
setw(n)设置域宽为n,用于输出。
第17题:
下列字符串中,不可以用作C++标识符的是
A.y_2006
B._FEST_H
C.Return
D.switch
参考答案:
D
答案解析:
在C++中,变量标识符必须是以大小写字母、下画线开始,由数字或者字母下画线等组成的一个字符串,其中C++关键字不能作为标识符,不能包含-、+、*、/等运算符号。
C++变量区分大小写,所以Retrun不是关键字,而是一个合法变量;swith为关键字,所以不能定义为标示符。
第18题:
字面常量42、4.2、42L的数据类型分别是
A.long、double、int
B.long、float、int
C.int、double、long
D.int、float、long
参考答案:
D
答案解析:
根据题干可知,分别为整型、浮点型和长整型。
第19题:
执行下列语句段后,输出字符“*”的个数是for(inti=50;i>l;--i)cout<<”*”
A.48
B.49
C.50
D.51
参考答案:
B
答案解析:
for(inti=50;i>1;--i),i为50~2,故打印49个*。
第20题:
有如下程序段,其中会产生编译错误的语句是inti=0,j=1;int&r=i;//①r=j;//②int*p=&i;//③*p=&r;//④
A.④
B.③
C.②
D.①
参考答案:
A
答案解析:
赋值运算符不能将int地址(指针)赋值给int变量。
第21题:
在下面的定义语句中,画线处应填入的内容是classFred{public:
voidprint(){cout<<data<<endl;}voidsetData(doubleD.{data=d;}staticintcount;private:
doubledata;};______count=0;//静态数据成员的定义
A.int
B.staticint
C.intFred:
:
D.staticintFred:
:
参考答案:
C
答案解析:
静态数据成员在类中声明,对它的访问可通过类名进行。
第22题:
有如下程序:
#include<iostream>usingnamespacestd;classBase{protected:
inti;public:
intj;};classDerived:
publicBase{intm;public:
intn;};intmain(){Derivedd;d.i=0;//[1]d.j=0;//[2]d.n1=0;//[3]d.n=0;//[4]return0;} 其中主函数中有两个赋值语句有错,这两个错误的赋值语句是
A.[1]和[2]
B.[1]和[3]
C.[2]和[3]
D.[2]和[4]
参考答案:
B
答案解析:
基类被派生类公有派生时,可以在派生类中访问基类中的公有数据成员和保护数据成员,私有数据成员在派生类中不能被直接访问,保护数据成员和私有数据成员均不能被派生类对象直接访问。
如果一个类的数据成员没有被限定就会被默认为私有数据成员,私有数据成员不能直接被类对象访问。
第23题:
在表达式x-y中,“-”是作为非成员函数重载的运算符。
若使用显式的函数调用代替直接使用运算符“-”,这个表达式还可以表示为
A.x.operator-(y)
B.operator-(y,x)
C.yoperator-(x)
D.operator-(x,y)
参考答案:
A
答案解析:
非成员函数重载的运算符的显示调用格式为:
aa.operator@bb,其中@是重载运算符号。
第24题:
下列函数模板定义中错误的是
A.template<classQ>
B.template<classQ>QF(Qx){returnQ+x;}QF(Qx){returnx+x;}
C.template<classT>
D.template<classT>TF(Tx){returnx*x;}boolF(Tx){returnx>1;}
参考答案:
A
答案解析:
在函数模板定义中,类型参数不能参与运算。
第25题:
已知outfile是一个输出流对象,要想将outfile的文件指针定位到当前位置之前321字节处,正确的函数调用语句是
A.outfile.seekp(321,ios_base:
:
cur);
B.outfile.seekp(321,ios_base:
:
beg);
C.outfile.seekp(-321,ios_base:
:
beg);
D.outfile.seekp(-321,ios_base:
:
cur);
参考答案:
D
答案解析:
在文件中偏移定位时的初始值ios:
:
base_beg将指针定位在文件的开始位置;ios:
:
base_cur将指针定位在文件的当前位置;ios:
:
base_end将指针定位在文件的结束位置。
从当前位置往后偏移量为正,从当前位置往前偏移,偏移量为负。
第26题:
有如下程序:
#include<cstring>#include<iostream>usingnamespacestd;classMyString{public:
MyString(constchar*s); ~MyString(){delete[]data;}protected:
unsignedlen;char*data;};MyString:
:
MyString(constchar*s){len=strlen(s);data=newchar[1en+1];strcpy(data,s);}intmain(){MyStringa("C++Progreanfing");MyStringb(A);return0;} 在运行上面的程序时出错,错误的原因是
A.构造函数的实参不允许是本类的对象
B.没有定义实现深层复制(深复制)的复制构造函数
C.构造对象a时实参与形参类型不符
D.系统不能生成缺失的复制构造函数
参考答案:
B
答案解析:
当类中的数据成员有指针时,必须使用深层复制构造函数,否则会发生指针悬挂。
在进行函数析构时,会出现指针丢失现象。
第27题:
有如下程序:
#include<iostream>usingnamespaeestd;classDemo{public:
Demo(){cout<<"defaultconstructor\n";}Demo(constDemo&x){cout<<"copyconstructor\n";}};DernouserCore(DemoB.{Democ(B.;returnc;}intmain(){Demoa,d;cout<<"callinguserCode()\n";d=userCode(A);return0;} 执行上面程序的过程中,构造函数Demo()和Demo(constDemo&x)被调用的次数分别为
A.1和1
B.1和2
C.2和3
D.2和4
参考答案:
C
答案解析:
无参构造函数调用和复制构造函数调用的Demoa,d;调用2次无参构造函数Demo(),在DemouserCore(DemoB.{Democ(B.;returnc;}函数中,Demob调用一次复制构造函数,Democ(B.调用一次复制构造函数,在函数返回值时还要调用一次复制构造函数,故Demo(constDemo&x)的调用次数为3次。
第28题:
已知在函数func中语句this->ff=0;与语句ff=0;的效果完全相同。
对于这一现象,下列叙述中错误的是
A.ff是某个类的数据成员,func是该类的友元函数
B.ff是某个类的数据成员,func是该类的成员函数
C.this->ff和ff是同一个变量
D.func不是一个静态成员函数
参考答案:
A
答案解析:
类的静态数据成员和友元函数,不能拥有this指针。
第29题:
如下程序的输出是#include<iostream>usingnamespacestd;classBase{public:
Base(){cout<<"BB";f();}voidf(){cout<<"Bf";}};classDerived:
publicBase{public:
Derived(){eout<<"DD";}voidf(){cout<<"Df";}};intmain(){Derivedd;return0;}
A.BBBff)D
B.BBDfDDDf
C.DD
D.DDBBBf
参考答案:
A
答案解析:
当创建派生类对象时,首先调用基类的构造函数,最后调用派生类的构造函数。
第30题:
下列叙述中错误的是
A.公有继承时基类中的public成员在派生类中仍是public成员
B.私有继承时基类中的protected成员在派生类中仍是protected成员
C.私有继承时基类中的public成员在派生类中是private成员
D.保护继承时基类中的public成员在派生类中是protected成员
参考答案:
B
答案解析:
在私有继承方式下,所有的类成员都继承为私有成员。
第31题:
下列是关于派生类声明的开始部分,其中正确的是
A.classvirtualB:
publiceA
B.virtualclassB:
publiceA
C.classB:
publicAvirtal
D.classB:
virtualpublicA
参考答案:
D
答案解析:
派生类的声明格式如下:
class派生类名:
[继承方式]基类名{派生类的数据成员和成员函数}virtual为虚继承,是继承方式,所以应该放在派生类名后面。
第32题:
在重载一个运算符为成员函数时,其参数表中没有任何参数,这说明该运算符是
A.后缀一元运算符
B.前缀一元运算符
C.无操作数的运算符
D.二元运算符
参考答案:
B
答案解析:
在成员函数重载中,一元函数重载在函数声明中可以没有任何形参,操作数就是对象本身;但是作为后缀运算符重载时,则必须在形参中添加参数。
第33题:
关于关键字class和typename,下列说法中正确的是
A.程序中所有的typename都可以替换为class
B.程序中所有的class都可以替换为typename
C.A和B都正确
D.A和B都不正确
参考答案:
B
答案解析:
只有在目标声明中,typename和class才可以相互替换,即typename可以被class替换,而有的class,不一定能被typename替换。
第34题:
如下程序的输出结果是#include<iostream>#include<iomanip>usingnamespacestd;classCSum{intx,y;public:
CSum(intx0,inty0):
X(x0),y(y0){}friendostream&operator<<(ostream&os,constCSum&xA){os<<setw(5)<<xa.x+xa.y:
returnos;}};intmain(){CSumy(3,5);cout<<setfill('*')<<8;cout<<y;return0;}
A.88
B.****88
C.****8****8
D.8****8
参考答案:
D
答案解析:
输出流控制中,如果没有指定对齐方式,则默认为左对齐、右填充,CSum类使“<<”运算符出栈,并将输出控制为宽度为5,cout<<setfill('*')<<8;执行时就打印8****,然后执行cout<<y;打印8,故答案为D。
第35题:
有如下程序:
#include<iostream>usingnamespacestd;classStack{public:
Stack(unsignedn=10):
size(n){rep_=newint[size];top=0;}Stack(Stack&s):
size(s.size){rep_=newint[size];fbr(inti=0;i<size;i++)rep_[i]=s.rep_[i];top=s.top;} ~Stack(){delete[]rep_;}voidpush(intA){rep一_top]=a;top++;}intpop(){--top;returnrep_[top];}b001isEmpty()const{returntop==0;}private:
int*rep_;unsignedsize,top;};intmain(){Stacksl;for(inti=1;i<5;i++)s1.push(i);Stacks2(s1);for(i=1;i<3;i++)cout<-<s2.pop()<<',';s2.pusl:
(6);s1.push(7);while(!
s2.isEmpty())cout<<s2.pop()<<',';return0:
} 程序的输出结果是
A.4,3,2,1,
B.4,3,6,7,2,1,
C.4,3,6,2,1,
D.1,2,3,4,
参考答案:
C
答案解析:
堆栈组织元素的原则是“先进后出”,Stacks2(s1);使用复制构造函数新建s2,里面有元素1,2,3,4。
for(i=1;i<3;i++)cout<<s2.pop()<<',';使栈顶元素4,3出栈,s2.push(6)将6压入栈顶。
while(!
s2.isEmpty())cout<<s2.pop()<<',';使元素6,2,1出栈,故答案为4,3,6,2,1。
二、填空题(每空2分,共30分)
第36题:
在深度为7的满二叉树中,度为2的结点个数为______。
参考答案:
63
详细解答:
第37题:
软件测试分为白箱(盒)测试和黑箱(盒)测试,等价类划分法属于______测试。
参考答案:
黑盒
详细解答:
等价类划分法是将所有可能的输入数据,即程序的输入域划分为若干部分(子集),然后从每个子集中选择少数具有代表性的数据作为测试用例。
该方法是一种常用的黑盒用例分析方法。
第38题:
在数据库系统中,实现各种数据管理功能的核心软件称为______。
参考答案:
DBMS
详细解答:
一个完整的数据库系统(DBS)包括数据库(DB.和数据库管理系统(DBMs),其中,数据库管理系统实现各种数据管理功能,是数据库系统的核心。
第39题:
软件生命周期可分为多个阶段,一般分为定义阶段、开发和维护阶段。
编码和测试属于______阶段。
参考答案:
开发[解释]软件的生命周期一般包括3个阶段:
软件定义、软件开发及软件维护阶段。
软件定义阶段包括:
可行性研究与计划制定和需求分析阶段;软件的开发阶段包括了软件设计、软件实现软件的编码和测试等内容;在软件维护阶段,主要是对软件的运行和维护。
详细解答:
第40题:
在结构化分析使用的数据流图(DFD.中,利用______对其中的图形元素进行确切解