《全国计算机等级考试无纸化真考题库试卷二级C++(5).docx》由会员分享,可在线阅读,更多相关《全国计算机等级考试无纸化真考题库试卷二级C++(5).docx(16页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、全国计算机等级考试无纸化真考题库试卷(5)二级C+(考试时问120分钟,满分100分)一、选择题(每小题1分。共40分)(1)下列叙述中正确的是( )。 A)线性表的链式存储结构与顺序存储结构所需要的存储空间是相同的B)线性表的链式存储结构所需要的存储空间一般要多于顺序存储结构 C)线性表的链式存储结构所需要的存储空间一般要少于顺序存储结构 D)线性表的链式存储结构与顺序存储结构在存储空间的需求上没有可比性(2)下列叙述中正确的是( )。A)栈是一种先进先出的线性表 B)队列是一种后进先出的线性表 C)栈与队列都是非线性结构D)以上三种说法都不对(3)软件测试的目的是( )。A)评估软件可靠性
2、 B)发现并改正程序中的错误 C)改正程序中的错误 D)发现程序中的错误(4)在软件开发中,需求分析阶段产生的主要文档是( )。A)软件集成测试计划 B)软件详细设计说明书 C)用户手册 D)软件需求规格说明书(5)软件生命周期是指( )。A)软件产品从提出、实现、使用维护到停止使用退役的过程 B)软件从需求分析、设计、实现到测试完成的过程C)软件的开发过程 D)软件的运行维护过程(6)面向对象方法中,继承是指( )。A)一组对象所具有的相似性质 B)一个对象具有另一个对象的性质 C)各对象之间的共同性质 D)类之间共享属性和操作的机制(7)层次型、网状型和关系型数据库划分原则是( )。A)己
3、录长度 B)文件的大小C)联系的复杂程度 D)数据之间的联系方式(8)一个工作人员可以使用多台计算机,而一台计算机可被多个人使用,则实体工作人员与实体计算机之间 的联系是( )。A)一对一 B)一对多 C)多对多 D)多对一(9)数据库设计中反映用户对数据要求的模式是( )。A)内模式 B)概念模式 C)外模式 D)设计模式(10)有三个关系R、S和T如下:则由关系R和S得到关系T的操作是( )。A)自然连接 B)差 C)交 D)并(11)下列符号中能够作为C+标识符的是( )。A)Coflst B)2a C)_shape D)Count(12)已知枚举类型声明语句为:enum COl,ORW
4、HITE,YELLOW,GREEN=5,RED,BLACK=10; 则下列说法中错误的是( )。A)枚举常量YELLOW的值为1 B)枚举常量RED的值为6 C)枚举常量BLACK的值为10 D)枚举常量WHITE的值为1(13)执行下列语句段后,输出字符“*”的个数是( )。for(int i=50;i1;i一=2) tout*:A)24 B)25 C)26 D)50(14)有如下定义:int a5=1,3,5,7,9,* P=a;下列表达式中不能得到数值5的是( )。A)a2 B)a3 C)*(P+2)D)+P+4(15)下列语句中错误的是( )。A)Const int a; B)Cons
5、t int a=10;C)Const int * point=0;D)Const int * point=new int(10);(16)已知函数FA调用函数FB,若要把这两个函数定义在同一个文件中,则( )。A)FA必须定义在FB之前 B)FB必须定义在FA之前 C)若FA定义在FB之后,则FA的原型必须出现在FB的定义之前D)若FB定义在FA之后,则FB的原型必须出现在FA的定义之前(17)下列关于运算符函数的描述中,错误的是( )。A)运算符函数的名称总是以operator为前缀 B)运算符函数的参数可以是对象D)在表达式中使用重载的运算符相当予调用运算符重载函数(18)为了提高函数调用
6、的实际运行速度,可以将较简单的函数定义为( )。A)内联函数 B)重载函数 C)递归函数 D)函数模板(19)若要对Data类中重载的加法运算符成员函数进行声明,下列选项中正确的是( )。A)Data+(Data); B)Data operator+(Data); C)Data+operator(Data); D)operator+(Data,Data);(20)已知函数f的原型是void f(int*a,long&b);,变量vl、v2的定义是:int vl;lon9:v2;下列调用语句中正确的是( )。A)f(vl,&v2); B)f(vl,v2); C)f(&vl,&v2);D)f(&v
7、l,v2);(21)已知Value是一个类,value是Value的一个对象。下列以非成员函数形式重载的运算符函数原型中,正确的是( )。A)Value operator+(Value v,int i);B)Value operator+(Value v=value,int i); C)Value operator+(Value v,inl:i=0):D)Value operator+(Value v=vallle,int i=0);(22) 下列关于运算符重载的描述中,正确的是( )。A)运算符重载为成员函数时,若参数表中无参数,重载的是一元运算符B)一元运算符只能作为成员函数重载c)二元运
8、算符重载为非成员函数时,参数表中有一个参数D)c+中可以重载所有的运算符(23)下列有关类成员的叙述中,正确的是( )。A)友元函数是类的成员函数 B)类成员的默认访问权限是私有的c)类成员函数必须声明为公有的 D)类的静态数据成员不能是常成员(24)有如下类定义: class Point private: static int how_many; ; _how_many=0;要初始化Point类的静态成员how_many,下画线处应填入的内容是( )。A)int B)static int C)int Point: D)static int Point:(25)有如下头文件: int fl()
9、; static int f2(); class MA public: int f3(); static int f4(); ;在所描述的函数中,具有隐含的this指针的是( )。A)fl B)f2 C)f3 D)f4(26)下列有关类继承的叙述中,错误的是( )。A)继承可以实现软件复用B)虚基类可以解决由多继承产生的二义性问题c)派生类构造函数要负责调用基类的构造函数D)派生类没有继承基类的私有成员(27)在下列关键字中,不能用来表示继承方式的是( )。A)private B)static C)public D)protected(28)有如下两个类定义:class XXprivate:
10、double xl;protected: double x2;public: double x3;class YY:protected XXprivate: double yl;protected: double y2;public: double y3;在类YY中保护成员变量的个数是( )。A)1 B)2 C)3 D)4(29)有如下类定义:class MyClass int value;public:MyClass(int n):value(n)int getValue()constretum value;则类MyClass的构造函数的个数是( )。A)1个 B)2个 c)3个 D)4个(
11、30)有如下类和对象的定义:class Constantspublic:static double getPI()return 31416;Constants constants:下列各组语句中,能输出31416的是( )。A)coutgetPI();和coutConstants:getPI();B)coutconstantsgetPI();和coutConstantsgetPI();C)coutgetPI();和coutgetPI();D)coutconstantsgetPI();和coutConstants:getPI();(31)有如下程序:#includeusing namespace
12、 std;class VACpublic:intf()constreturn 3;int f()retum 5;int main() VAC vl; const VAC v2; coutvlf()v2f(); return 0;执行这个程序的输出结果是( )。A) 53 B)35 C)55 D)33(32)有如下程序:#includeusing namespace std;class MyClasspublic:MyClass(int i=0)cout1;MyClass(const MyClass&x)cout2;MyClass&operator=(const MyClass&x)cout3;
13、retum$this;MyClass()cout4;int main()MyClass objl(1),obj2(2),obj3(objl);retum 0;执行这个程序的输出结果是( )。A)112444 B)11114444 C)121444 D)11314444(33)有如下类声明:class Baseprotected: int amount;public: Base(int n=0):amount(n) int getAmount()constretum amount;class Derived:public Baseprotected: int value;public:Deriv
14、ed(int m,int n):value(m),Base(n)int getData()constreturn value+amount;:已知x是一个Derived对象,则下列表达式中正确的是( )。A)xvalue+XgetAmount() B)xgetData()一xgetAmount()C)xgetData()一xamount D)xvalue+Xamount(34)有如下程序:#includeusing namespace std;class AA int k;protected: int n; void setK(int k)this一k=k;public: void setN(
15、int n)this一n=n;class BB:public AA*类体略*;int main() BB X; Xn=1;1 XsetN(2);2 Xk=3;3 XsetK(4);4return 0;在标注号码的四条语句中正确的是( )。A)1 B)2 C)3 D)4(35)有如下程序:#includeusing namespace std;class Base int x:public: Base(int n=0):x(n)coutn; int getX()constreturn x;cjass Derived:public Base int Y:J;Iublic: Derived(int
16、m,int n):y(m),Base(n)coutm; Derived(int m):Y(m)coutm;int main() Derived dl(3),d2(5,7); retum 0;执行这个程序的输出结果是( )。A)375 B)357 C)0375 D)0557(36)有如下程序:#includeusing namespace std;class GApublic: virtual int f()t retum l;class GB:public GApublic: virtual int f()retum 2;void show(GA g)eout9f();void display
17、(GA&g)cout9f();int main() GA a;show(a);display(a); GB b;show(b);display(b); return 0;执行这个程序的输出结果是( )。A)1111 B)1211 C)1112 D)1212(37)下列有关模板的叙述中,正确的是( )。A)函数模板不能含有常规形参 B)函数模板的一个实例就是一个函数定义C)类模板的成员函数不能是模板函数 D)用类模板定义对象时,绝对不能省略模板实参(38)下面是一个模板声明的开始部分:templatedouble由此可知( )。A)这可能是一个函数模板的声明B)这可能是一个类模板的声明c)这既可
18、能是一个函数模板的声明,也可能是一个类模板的声明D)这肯定是一个错误的模板声明(39)C+系统预定义了4个用于标准数据流的对象,下列选项中不属于此类对象的是( )。A)cout B)cin C)cerr D)cset(40)下列语句都是程序运行时的第1条输出语句,其中一条语句的输出效果与其他三条语句不同,该语句是( )。A)coutinternal12345; B)eoutleft12345;C)coutright12345; D)coutsetw(6)12345;二、基本操作题(共18分) 请使用VC6或使用【答题】菜单打开考生文件夹projl下的工程projl。程序中位于每个“ERROR*
19、found料*之后的一行语句有错误,请加以改正。改正后程序的输出结果应为:Name:Smith Age:21 ID:99999 CourseNum:12Record:970注意:只修改每个“ERROR*found*”下的那一行,不要改动程序中的其他内容。#includeusing namespace std;class Studentlnfoprotected:ERROR*found* char Name; int Age; int ID: int CourseNum; float Record;public: Studentlnfo(char*name,int Age,int ID,int
20、coumeNum,float record);ERROR *found*voidStudentlnfo()float AverageRecord() return RecordCourseNum; void show()const cout”Name:”Name”Age:”Age”ID:”ID ”CourseNum:”CourseNum”Record:”RecordID=ID: CourseNum=courseNum: Record=record;int main() Studentlnfo st(Smith”,21,99999,12,970); stshow(); return 0;三、简单
21、应用题(共24分) 请使用VC6或使用【答题】菜单打开考生文件夹proj2下的工程proj2,其中定义了vehiele类,并派生出motorcar类和bicycle类。然后以motorcar和bicycle作为基类,再派生出motorcycle类。要求将Vehicle作为虚基类,避免二义性问题。请在程序中的横线处填写适当的代码并删除横线,以实现上述类定义。此程序的正确输出结果应为:801501001注意:只能在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“*found*”。#includeclass vehicleprivate: int MaxSpeed; int Wei
22、ght;public:*found*vehicle(int maxspeed,int weight):vehicle();int getMaxSpeed()return MaxSpeed; int getWeight()retum Weight; ; *found* class bicycle:public vehicle private: int Height; public: bicycle(int maxspeed,int weight,int height):vehicle(maxspeed,weight),Height(height) int getHeight()retum Hei
23、ght; ; *found* class motorcar:public vehicle private: int SeatNum; public: motorcar(int maxspeed。int weight,int seatnum):vehicle(maxspeed,weight),SeatNum(seatnum) int getSeatNum()return SeatNum; ; *found* class motorcycle: public: motorcycle(int maxspeed,int weight,int height):vehicle(maxspeed,weigh
24、t),bicycle(maxspeed,weight,height),motorcar(maxspeed,weight,1) ; void main() motorcycle a(80,150,100); coutagetMaxSpeed()endl; coutagetWeight()endl; coutagetHeight()endl; coutagetSeatNum()endl; 四、综合应用题(共18分) 请使用VC6或使用【答题】菜单打开考生文件夹proj3下的工程proj3,其中声明的CDeepCopy是一个用于表示矩阵的类。请编写这个类的赋值运算符成员函数0perator=,以实现
25、深层复制。 要求: 补充编制的内容写在“*333*”与“*666*”之间。不得修改程序的其他部分。 注意:程序最后将结果输出到文件outdat中。输出函数writeToFile已经编译为obj文件,并且在本程序中调用。 CDeepCopyh #include #includeusing namespace std;class CDeepCopypublic: int n;动态数组的元素个数 int *p;动态数组首地址 CDeepCopy(int); CDeepCopy(); CDeepCopy&operator=(const CDeepCopy&r);赋值运算符函数 ; void write
26、ToFile(char); maincpp #include”CDeepCopyh” CDeepCopy:一CDeepCopy()deleteP; CDeepCopy:CDeepCopy(int k)n=k;p=new intn;构造函数实现 CDeepCopy&CDeepCopy:0perator=(const CDeepCopy&r)赋值运算符函数实现 *333* *666* int main() CDeepCopy a(2),d(3); apO=1;dpO=666;对象a,d数组元素的赋值 CDeepCopy b(3);调用赋值运算符函数 apO=88;b=a; coutbpO;显示内层
27、局部对象的数组元素 coutdpO;显示d数组元素apO的值 cout”d fade away;n”; coutapO;显示a数组元素apO的值 writeToFile(”); return 0;无纸化真考题库试卷(5)一、选择题(1)B 【解析】线性链式存储结构中每个结点都由数据域与指针域两部分组成,增加了存储空间,所以一般要多于顺序存储结构。(2)D 【解析】栈是一种先进后出的线性表,队列是一种先进先出的线性表,栈与队列都是线性结构。(3)D 【解析】软件测试是为了发现错误而执行程序的过程,测试要以查找错误为中心,而不是为了演示软件的正确功能。不是为了评估软件或改正错误。(4)D 【解析】
28、需求分析阶段的工作可以概括为:需求获取、需求分析、编写需求规格说明书、需求评审四个方面。所以选择D。(5)A 【解析】通常,将软件产品从提出、实现、使用维护到停止使用退役的过程称为软件生命周期。也就是说,软件产品从考虑其概念开始,到该软件产品不能使用为止的整个时期都属于软件生命周期。(6)D 【解析】继承是面向对象的方法的一个主要特征,是使用已有的类的定义作为基础建立新类的定义技术。广义的说,继承是指能够直接获得已有的性质和特征,而不必重复定义它们,所以说继承是指类之间共享属性和操作的机制。(7)D 【解析】层次模型的基本结构是树形结构,网状模型是一个不加任何条件限制的无向图,关系模型采用二维
29、表来表示,所以三种数据库的划分原则是数据之间的联系方式。(8)C 【解析】因为一个人可以操作多个计算机,而一台计算机又可以被多个人使用,所以两个实体之问是多对多的关系。(9)C 【解析】数据库系统的三级模式是概念模式、外模式和内模式。概念模式是数据库系统中全局数据逻辑结构的描述,是全体用户公共数据视图。外模式也称予模式或用户模式,它是用户的数据视图,给出了每个用户的局部数据描述,所以选择C。内模式又称物理模式,它给出了数据库物理存储结构与物理存取方法。(10)B 【解析】关系T中的元组是R关系中有而S关系中没有的元组的集合,所以进行的是差的运算。(11)C 【解析】本题考查c+标识符的命名规则
30、,其规则有如下几点:所有标识符必须由字母、数字或下画线组成,且必须由字母或下画线开头;所有标识符不能使用c+已有的关键字;大、小写字母表示不同意义,即代表不同的标识符。选项A是关键字,选项B不能以数字开头,选项D包含了字符”一”,且不能以此字符开头。故答案为C。(12)D 【解析】c+语言规定枚举常量的默认值依次等于0,1,n-1。也可以给枚举常量赋初值,方法是:在枚举常量的后面跟上“=整型常量”,在给枚举常量赋初值时,如果给其中任何一一个枚举常量赋初值,则其后的枚举常量将按自然数的规则依次赋初值。所以本题答案为D。(13)B 【解析】本题考查for循环语句,题目中每执行完循环体后,i都会减2
31、,那么只有50到2之间的偶数才能输出“*”,所以总共输出25次。(14)B 【解析】本题考查指向数组的指针,本题中指针变量P指向数组a,直接使用数组下标即可取值,数组F标是从0开始标号的,所以a2能取到5,而a3取不到5,(:选项中使用指针后移方法能够取到5,D选项中*P为1,所以*P+4为5。(15)A 【解析】const是一个c+语言的关键字,它限定一个变量不允许被改变。使用const在一定程度上可以提高程序的安全性和可靠性。限定符声明变量照能被读,必须初始化。A选项没有初始化,B、C、D选项都正确。(16)D 【解析】如果使用用户自己定义的函数,而该函数与调用它的函数(即主调用函数)在同
32、一程序单元中,且位置在主调用函数之后,则必须在调用此函数之前对被凋用的函数作声明。(17)C 【解析】运算符函数可以定义为类的友元函数所以C选项错误。(18)A 【解析】一般函数进行调用时,要将程序执行权转到被调用函数中然后再返回到调用它的函数中;而内联函数在调用时,是将调用表达式用内联函数体来替换,一般只将将规模很小而使用频繁的函数声明为内联函数,可以避免函数调用时间开销,从而提高运行速度。(19)B 【解析】根据重载加法运算符的格式,只有B选项正确。(20)D 【解析】函数参数的3种传递方式:将变量名作为形参和实参,即传值方式;传递变量指针;引用形参,本题中函数f的第一个形参为指针,那么调
33、用f函数时,第一一个参数必须是地址,所以必须是&v1第二个形参为引用,所以对应实参为v2即可。故本题答案为D。(21)A 【解析】本题考查运算符重载,其中重载运算符的函数不能有默认的参数,所以本题答案为A。(22)A 【解析】运算符重载为成员函数时,会省略一个参数,如果无参数,表明是一元运算符。一元运算符既可以作为成员函数重载,也可以作为非成员函数重载。二元运算符如果作为非成员函数,则参数表中必须有两个参数。c+有5个运算符不能重载,它们是:(成员访问运算符)、*(成员指针访问运算符)、:(域运算符)、sizeof(长度运算符)和?:(条件运算符)。故本题答案为A。(23)B 【解析】友元函数
34、是指某些虽然不是类成员却能访问类的所有成员的函数,故友元函数不足类的成员函数。类成员的默认访问权限是私有的,类的成员函数r以是3种权限中的一种,静态数据成员可以为常成员。故本题答案为8。(24)C 【解析】本题考查静态数据成员,静态数据成员可以初始化,但只能在类体外进行初始化,其一般形式为:数据类型类名:静态数据成员名=初值。所以本题答案为C。(25)C 【解析】只有类的非静态成员函数才隐含this指针。其作用域是类内部,当类的非静态成员函数中访问类的非静态成员时,编译器会自动将对象本身的地址作为一个隐含参数传递给函数,而不必一定写上this。所以本题答案为C。(26)D 【解析】3种继承方式
35、中,派生类继承了基类的私有成员,但不能被直接访问,可以通过派生类的友元函数去访问基类的私有成员。(27)B 【解析】3种继承方式:公用继承、私有继承和保护继承分别使用public、private和protected3个关键字来定义。(28)C 【解析】本题考查保护继承中派生类对基类的访问属性,在受保护继承中,基类的公用成员和保护成员在派生类中成了保护成员,所以基类的成员x2、x3变成了保护成员,派生类中的y2也是保护成员,所以共有3个保护成员。本题答案为C、(29)B 【解析】本题考查类的默认构造函数和自定义的构造函数、本题中MyClass(int n):value(n)为自定义的构造函数,加
36、上默认构造函数,一共有2个构造函数。(30)D 【解析】本题考查静态成员函数。静态成员函数由于没有this指针,所以不能访问本类中的非静态成员。引用静态成员函数有2种方式,一种是直接使用类来引用,即Constants:getpI();另一种是使用对象来引用,即constantsgetPI()。所以本题答案为D。(31)A 【解析】本题考查常对象及常成员函数及构造函数,常埘象只能凋用常成员函数,所以本题中,对象v1为普通对象,执行v1f()后,会执行默认构造函数,输出5,对象v2为常列象,执行v2f()后,会执行常构造函数,输出3。(32)A 【解析】本题:考查构造函数和复制构造函数以及重载运算
37、符。本题中先后定义了两个对象obj1,obj2,依次输出口,然后定义了对象obj3,凋用复制构造函数,输出2,最后执行三次析构函数,输出444。(33)B 【解析】本题考查公有继承中派生类对象对基类的访问属性。在公有继承中,派生类对象只能访问基类的公有成员,而不能方问基类的保护成员和私有成员。题中x是派生类的对象,只能访问基类中公有的Base()和getAmount()成员,而不能访问保护类型的amount成员,故选项C、D错误。而类对象对类成员的访问也存在类似的情况,即类对象只能访问类的公有成员,而value是Derived的保护成员,所以A选项也错误。故答案为B。(34)B 【解析】本题考
38、查公用继承对基类成员的访问属性。在公用继承中,基类的公用成员和保护成员在派生类中保持原有访问属性,其私有成员仍为基类私有。所以本题中n、k和setK变为了派生类的保护成员,不能直接使用,即1、3、4错误,所以B选项正确。(35)C 【解析】本题考查派生类的构造函数和析构函数,在定义一个派生类的对象时,先调用基类的构造函数,然后再执行派生类的构造函数,对象释放时,先执行派生类的析构函数。再执行基类的析构函数。本题中定义了一个对象d1,先执行基类的构造函数输出0,再执行派生类的构造函数输出3,然后定义了一个对象d2(5,7),其中需要调用基类的构造函数输出7最后输出5,所以答案为c。(36)C 【
39、解析】本题主要考察虚函数。虚函数指在某基类中声明为virtual并在一一个或多个派生类中被重新定义的成员函数,本题中定义类GA的对象a,执行show(a)、display(a),输出ll,定义了类GB的对象b,执行show(b),仍然输出l,display(b)执行会调用派生类的f函数,因为f函数为虚函数,输出2,所以本题答案为c。(37)B 【解析】本题考查函数模板和类模板的基础知识,所以本题答案为B。(38)A 【解析】本题考查函数模板和类模板的基础知识,从templatedouble这里就可以看出这是个函数模板的声明。(39)D【解析】c+标准数据流的对象分别足cout、cin、CelT
40、、cl09,所以本题答案为D。(40)D 【解析】本题考查控制输出格式,A、B、c选项都会输出“】2345”,只有D选项输出“12345”,所以本题答案为D。二、基本操作题【参考答案】(1)char*Name;(2)Studentlnfo()(3)Studentlnf0:Studentlnfo(char*name,int age,,int ID,int eourseNum,float record)【考点分析】本题考查Studentlnf0类,其中涉及构造函数、动态数组、析构函数和成员函数。声明数组时要指定数组的大小,否则将会导致程序出错,不论是构造函数还是析构函数都不能在函数名前添加返回类型。【解题思路】(1)主要考查考生对动态数组的掌握,由题目可知Name应该指向一个动态数组,而不是一个有效char型字符,因此要定义成char型指针。(2)主要考查考生对析构函数的掌握,析构函数不需要函数返回类型,应把void去掉。