1.下列叙述中正确的是()。
A.循环队列是队列的一种链式存储结构B.循环队列是一种逻辑结构
C.循环队列是队列的一种顺序存储结构D.循环队列是非线性结构
【答案】C
【解析】
线性表常用存储结构为:①顺序存储结构,物理上连续存储,空间位置隐含逻辑位置;②链式存储结构,存储上不连续,通过指针相连。循环队列是指用一段地址连续的存储单元存储数据元素,定义两个游标:指向队头的游标(front)、指向队尾的游标(rear)。2.下列叙述中正确的是()。A.栈是一种先进先出的线性表B.队列是一种后进先出的线性表C.栈与队列都是非线性结构D.以上三种说法都不对
【答案】D
【解析】
栈和队列都是操作受限的线性表:栈只能在栈顶插入和删除元素,按照先进后出的原则组织数据;队列只能在队头删除元素,在队尾插入元素,按照先进先出的原则组织数据。对于每一个节点都有一个前件和一个后件,属于线性结构。3.一棵二叉树共有25个结点,其中5个是叶子结点,则度为1的结点数为()。A.16B.10C.6D.4
【答案】A
【解析】
二叉树中,度为0的结点(即叶子结点)比度为二的结点多1个,而度为0、1、2的结点相加等于总结点数25,所以度为1的结点数为25-5-(5-1)=16。4.在下列模式中,能够给出数据库物理存储结构与物理存取方法的是()。A.外模式B.内模式C.概念模式
D.逻辑模式
【答案】B
【解析】
数据库管理系统的三级模式包括:①外模式,也称子模式、用户模式,是指数据库用户所看到的数据结构,是用户看到的数据视图;②模式,也称逻辑模式,是数据库中对全体数据的逻辑结构和特性的描述,是所有用户所见到的数据视图的总和;③内模式,也称存储模式、物理模式,是指数据在数据库系统内的存储介质上的表示,是对数据的物理结构和存取方式的描述。答案选择B选项。5.在满足实体完整性约束的条件下()。A.一个关系中应该有一个或多个候选关键字B.一个关系中只能有一个候选关键字C.一个关系中必须有多个候选关键字D.一个关系中可以没有候选关键字
【答案】A
【解析】
在关系R中如记录完全函数依赖于属性(组)X,则称X为关系R中的一个候选关键字。候选关键字的性质有;①在一个关系中,候选关键字可以有多个;②任何两条记录候选关键字值都是不相同的;③关键字由一个属性构成,也可能由多个属性构成;④在任何关系中至少有一个关键字。所以,在满足实体完整性约束的条件下,一个关系中应该有一个或多个候选关键字。答案选择A选项。6.有三个关系R、S和T如下:
则由关系R和S得到关系T的操作是(A.自然连接B.并C.交D.差
)。
【答案】D
【解析】
差是指将属于一个集合但不属于后一个集合的元素组成新的关系;自然连接是二元运算,其结果是得到两个关系中公共属性名字上相等的所有元组的组合;交是指将那些同时属性两个关系的元素组成一个新的关系;并是指将两个关系中的元素全部合并到一个新的关系之中。由图中可以看出,关系T是由属于R但不属性
S的元组组成的集合,所以为差操作。答案选择D选项。7.软件生命周期的活动中不包括()。A.市场调研B.需求分析C.软件测试D.软件维护
【答案】A
【解析】
软件生命周期包括软件产品从提出、实现、使用维护到停止使用退役的过程。其主要活动阶段包括:可行性分析与计划制定、需求分析、软件设计(概要设计和详细设计)、软件实现(编码)、测试、维护等。8.下面不属于需求分析阶段任务的是()。A.确定软件系统的功能需求B.确定软件系统的性能需求C.需求规格说明书评审D.制订软件集成测试计划
【答案】D
【解析】
需求分析阶段的工作主要包括4个方面:①需求获取,其目的是确定对目标系统的各方面需求;②需求分析,对获取的需求进行分析和综合,最终给出系统的解决方案和目标系统的逻辑模型;③编写文档,编写需求规格说明书,编写初步用户使用手册;④确认测试计划,修改完善软件开发计划,需求评审。制定软件集成测试计划属于概要设计阶段的任务。答案选择D选项。9.在黑盒测试方法中,设计测试用例的主要根据是()。A.程序内部逻辑B.程序外部功能C.程序数据结构D.程序流程图
【答案】B
【解析】
黑盒测试完全不考虑程序内部的逻辑结构和内部特性,只根据程序的需求和功能规格说明,检查程序的功能是否符合它的功能规格说明。答案选择B选项。10.在软件设计中不使用的工具是()。A.系统结构图B.PAD
C.数据流图(DFD)D.程序流程图
【答案】C
【解析】
数据流图(DFD图)软件定义阶段结构化分析方法常用的工具。软件设计包括概要设计和详细设计。其中,概要设计中常用的软件结构设计工具是结构图,又称程序结构图;详细设计中常见的过程设计工具有:程序流程图、N-S、PAD、HIPO、判定表和PDL(伪码)。答案选择C选项。
11.若一个函数的原型为“int*Xfun1(intx,int&y,charz);”,则该函数的返回值类型为()。A.int*B.intC.int&D.char
【答案】A
【解析】
函数定义中包括函数返回值的类型,函数名以及参数列表。
12.若AA为一个类,a为该类的私有整型数据成员,getA()为该类的一个非静态公有成员函数,功能是返回a的值。如果x为该类的一个对象,要在类外访问x对象中a的值,正确的访问格式为()。A.AA.getA()B.x.getA()C.x.aD.AA.a
【答案】B
【解析】
访问对象x的public属性值,可以通过访问对象的变量x.a或成员函数x.getA()来获取,但类AA中a为其私有数据成员,所以只能通过成员函数x.getA()来获取。
13.当派生类继承一个基类时,默认的继承方式为()。A.publicB.protectedC.privateD.不确定
【答案】C
【解析】
派生类继承一个基类时可以分为public、private或protected三种继承方式。如果省略,则默认为private方式。
14.若需要为XV类重载乘法运算符,运算结果为XV类型,在将其声明为类的成
员函数时,下列原型声明正确的是(A.XVoperator*(XV,XV);B.XV*(XV);
C.operator*(XV);D.XVoperator*(XV);
)。
【答案】D
【解析】
运算符重载形式有两种:一种是重载为类的成员函数;一种是重载为类的友员函数。具体格式:
函数类型operator运算符(参数表)函数体:
15.在定义函数模板或类模板时,开头的保留字是(A.typenameB.templateC.classD.typedef
)。
【答案】B
【解析】
template是一个声明模板的关键字,函数模板是指一系列相关函数的模型或样板,这些函数的源代码形式相同,只是所针对的数据类型不同。对其进行调用时,只需要确定数据类型即可;class是定义类的关键字;typedef是类型定义。16.若需要向一个二进制文件尾部添加数据,则该文件的打开方式为()。A.ios_base::app
B.ios_base::binaryios_base::outC.ios_base::out
D.ios_base::binaryios_base::app
【答案】D
【解析】
打开文件的方式在类ios(是所有流式I/O类的基类)中定义,常用的值如下:①ios::app是指以追加的方式打开文件;②ios::ate是指文件打开后定位到文件尾,ios::app就包含有此属性;③ios::binary是指以二进制方式打开文件,默认的方式是文本方式;④ios::in是指文件以输入方式打开;⑤ios::out是指文件以输出方式打开;⑥ios::nocreate是指不建立文件,所以文件不存在时打开失败;⑦ios::noreplace是指不覆盖文件,所以打开文件时如果文件存在失败;⑧ios::trune是指如果文件存在,把文件长度设为0。可以用“或”把以上属性连接起来。
17.在开发一个C++程序的整个过程中,第3个步骤为(A.链接B.运行C.编辑D.编译
)。
【答案】A
【解析】
C++程序的开发步骤为:编辑→编译→链接→运行。
18.若有定义“intx=4,y=5”,则表达式“y>x++?x--:y++”的值为(A.3B.4C.5D.6
)。
【答案】C
【解析】
“条件表达式”基本格式如下:判定条件?表达式1:表达式2;若判定条件为真则执行表达式1,否则执行表达式2。题中y=5,x=4,5>4表达式成立,此时x=4+1=5.则执行x--,--在其后,则此时x=5。所以表达式的值此时为5.19.有如下程序:
运行这个程序的输出结果是(A.3B.5C.7D.9
)。
【答案】C
【解析】
for语句基本格式:for(表达式1;表达式2;表达式3)。执行过程如下:①先求解表达式1;②求解表达式2,若其值为真(值为非0),则执行for语句中
指定的内嵌语句,然后执行下面第(3)步。若为假(值为0),则结束循环,转到第(5)步;③求解表达式3;④转回上面第(2)步骤继续执行;⑤循环结束,执行for语句下面的一个语句。
20.若字符指针p所指向的字符串为\"abcdefg\",在执行语句char*ap=newchar[strlen(p)+1];之后,ap指向的字符数组的元素个数为()。A.9B.8C.7D.6
【答案】B
【解析】
“char*ap=newchar[strlen(p)+1];”语句的意思是“动态分配一个长度为strlen(p)+1的字符数组空间,并把数组首地址赋给指针变量ap”,而strlen(p)是计算字符串“abedefg”的长度。21.有如下程序:
运行这个程序的输出结果是(A.22B.23C.24D.25
)。
【答案】B
【解析】
在执行f1(x)时,f1()参数传递方式为地址传递,x=10+1。执行f2(y)时,f2()参数传递方式是按值传递的,执行完后,y的值仍为12,输出结果为11+12=23。22.有如下程序:
运行这个程序的输出结果是(A.9B.11C.13D.15
)。
【答案】C
【解析】
构造函数的功能是对对象进行初始化,即对数据成员进行初始化。当定义对象d1、d2时,对其内的数据成员a进行了初始化,d1.getA()=4,d2,getA()=5,变量b的类型为静态static的,执行了2次构造函数,b=2.。运行结果为4+5+2+2=13。23.有如下程序:
运行这个程序的输出结果是(A.3B.4C.7D.10
)。
【答案】C
【解析】
构造函数的功能是对对象进行初始化,即对数据成员进行初始化;本题定义YY的对象c,使用了构造函数初始化了数据成员y与x,在输出语句调用了函数getY(),得到结果为3+4=7,所以输出结果为7。24.在类中重载赋值运算符时,应将其声明为类的()。A.静态函数B.友元函数C.成员函数D.构造函数
【答案】C
【解析】
赋值运算符只能作为成员函数重载。
25.若有函数模板mySwap和一些变量定义如下:
下列对mySwap的调用中,错误的是(A.mySwap(i1,i2)B.mySwap(d1,d2)C.mySwap(i1,d1)
D.mySwap )。 【答案】C 【解析】 template是一个声明模板的关键字,函数模板是指一系列相关函数的模型或样板,这些函数的源代码形式相同,只是所针对的数据类型不同。对其进行调用时,只需要确定数据类型即可。同时,两个参数的类型必须是一致的。26.在C++中,打开一个文件时与该文件建立联系的是()。A.流对象B.模板C.函数D.类 【答案】A 【解析】 打开文件就是将该文件与输入输出流建立了联系。 27.已知类IMS中两个成员函数的声明为“voidlisten()const;”与“voidspeak();”,另有两个对象的定义为“IMSobj1;”与“constIMSobj2;”,则下列语句中,产生编译错误的是()。A.obj1.listen();B.obj1.speak();C.obj2.listen();D.obj2.speak(); 【答案】D 【解析】 函数listen()作为类IMS的常成员函数,一般对象obj1和常对象obj2都可以调用它;而函数speal()作为类IMS的一般成员函数,只有一般对象obj1才可以调用它,常对象obj2调用,则会编译出错。28.有如下程序: 运行这个程序的输出结果是(A.MYXB.MYMYC.MXYD.MXYY )。 【答案】D 【解析】 在类Monkey中定义了默认的构造函数和带参数的构造函数,在定义对象p1时,执行默认的构造函数,输出M;在定义p2=newMonkey(‘X’),执行带参数的构造函数,输出M;deletep2时,执行Monkey的析构函数,输出Y;函数退出时,再执行一次析构函数,输出Y。输出结果为MXYY。29.有如下程序: 下列关于程序的描述中,正确的是(A.程序编译正确 B.程序编译时语句①出错C.程序编译时语句②出错D.程序编译时语句③出错 )。 【答案】B 【解析】 友元函数定义参数时用“,”分隔参数,应将①中“.”改为“,”。30.有如下程序: 编译时有错误的是(A.语句①B.语句②C.语句③D.语句④ )。 【答案】B 【解析】 派生类Book的继承方式为private,所以基类Media中的成员函数在派生类Book中变成了私有成员函数,所以类Book的对象Bible不能访问其私有成员函数Name(). 31.有如下程序: 运行这个程序的输出结果是(A.BBB.BDC.DBD.DD )。 【答案】D 【解析】 在基类Base中定义了虚函数show(),在派生类Derived中对虚函数show()进行了重新定义。主函数中对函数show()进行了多态调用,调用的是派生类中的函数show().输出结果为DD。32.有如下类定义: 关于上述类定义,下列描述中错误的是()。A.类Koala是类Animal的派生类 B.类Koala中的Name函数是一个虚函数C.类Animal中的Name函数是一个纯虚函数 D.语句“Animala;”能够建立类Animal的一个对象a 【答案】D 【解析】 类Koala是类Animal的派生类;类Animal中的函数Name()是一个纯虚函数,其类就是一个抽象类,抽象类是不可以建立对象的。 33.已知类MyClock中未显式定义构造函数,并重载了加法运算符,使得下面的语句序列能够正确执行:MyClockc1,c2;//…… c2=c1+10: 由此可知,为类MyClock重载的“+”运算符函数的声明是()。A.friendMyClockoperator+(MyClock,int);B.friendMyClockoperator+(MyClock,MyClock):C.friendMyClockoperator+(int,MyClock);D.MyClockoperator+(MyClock): 【答案】A 【解析】 由语句“c2=c1+10”可知,对运算符“+”进行重载,第一个操作数是类MyClock对象,第二个操作数是整数型数据。 34.下列控制对齐方式的操作符中,错误的是()。A.internalB.centerC.leftD.right【答案】 A 【解析】 C++中控制对齐方式的操作符包括center、left和right。35.有如下程序: 运行这个程序的输出结果是(A.庐山海拔1000米B.庐山海拔0米C.山海拔1000米D.山海拔0米 )。 【答案】A 【解析】 在基类Mountain中定义了虚函数Getname(),而在派生类Lusan中对虚函数进行了重新定义。主函数中对派生类的虚函数Getname()进行了多态调用,输出“庐山”,GetHeight()执行基类Mountain中的构造函数为1000。最后输出结果为庐山海拔1000米。 36.下列叙述中正确的是()。 A.程序执行的效率与数据的存储结构密切相关 B.程序执行的效率只取决于程序的控制结构C.程序执行的效率只取决于所处理的数据量D.以上三种说法都不对 【答案】A 【解析】 数据的存储结构属于物理存储方式,数据的逻辑结构并没有一一对应的关系,但存储结构的不同导致数据操作不同,对数据处理的效率是不同的。例如,在有序存储的表中查找某个数值比在无序存储的表中查找的效率高很多。 37.在函数中,可以用auto、extern、register和static这四个关键字中的一个来说明变量的存储类型,如果不说明存储类型,则默认的存储类型是()。A.autoB.externC.registerD.static 【答案】A 【解析】 在C++中,如果不指定存储类型的话,则默认为auto。38.C++中的模板包括()。A.对象模板和函数模板B.对象模板和类模板C.函数模板和类模板D.变量模板和对象模板 【答案】C 【解析】 template是一个声明模板的关键字,C++语言通过模板提供一种将类型参数化的机制,包括函数模板和类模板。函数模板是指一系列相关函数的模型或样板,这些函数的源代码形式相同,只是所针对的数据类型不同。对其进行调用时,只需要确定数据类型即可;39.有如下头文件: 在所描述的函数中,具有隐含的this指针的是()。 A.B.C.D.f1f2f3f4 【答案】C 【解析】 this指针是C++中的一个关键字,用在类的非静态成员函数内部,代表当前对象的首地址。this指针只能存在类的成员函数中使用,静态成员函数没有this指针。 40.有如下程序: 程序的输出结果是(A.121B.232C.221D.122【答案】A 【解析】 )。 静态成员变量count初值为0,定义对象obj时,调用构造函数,此时count+1,输出1。动态创建指针对象时调用构造函数,count+1,输出2。删除指针对象,调用析构函数,count-1,输出1。二、基本操作题(18分。) 1.以下程序运行时有错误,请改正错误使得程序正常运行。使该程序能正确地输出结果:m_c1=2m_c2=2m_c1=2m_c2=4 注意:错误包含在/********found********/的下面。修改该语句即可,其他语句不能修改。 /**********code.c**********/ /**********-code.c**********/ 【答案】 第一处:将friendvoidSet(MyClassobj,charc)修改为friendvoidSet(MyClass&obj,charc) 第二处:将voidSet(MyClassobj,charc,charc1)修改为voidSet(MyClass&obj,charc,charc1) 第三处:将t.Set(&t,’2’,’4’)修改为t.Set(t,’2’,’4’)解析:第一处,当传递的参数为对象时,则将其定义为对象的引用。第二处,同第一处。 第三处,当参数定义为引用时,就相当于给对象起了个别名,因此传递的是对象而非地址。 三、简单应用题(24分。) 1.阅读下列函数说明和代码,补充空出的代码。函数Trim(char*str)实现的功能是,如果字符串最前面有空格或者不可打印字符,则全部去掉。然后返回转换后的字符串。 注意:不能修改程序的其他部分,只能补充Trim(char*str)函数。/**********code.c**********/ /**********-code.c**********/ 【答案】 解析:基本思想:从已知的字符串首字符开始判断是否为空或者为不可打印字符,若是,则将其删除,返回其后的非空或可打印字符串位置。 四、综合应用题(18分。) 1.本题类的定义并不完整,按要求完成下列操作,将类的定义补充完整。 (1)定义类Plane的保护数据成员distance和revolve,它们分别表示行星距太阳的距离和行星的公转周期。其中,distance为double型,revolve为int型。请在注释 //*******1******后添加适当的语句。 (2)定义类Earth的构造函数Earth(doubled,intr),并在其中计算地球绕太阳公转的轨道周长。假定cir.cumstance=2*d*3.1416。请在注释//*******2*****后加适当的语句。(3)定义类Earth的成员show(),用于显示所有信息。包括地球距太阳的距离,地球的公转周期,以及地球绕太阳公转的轨道周长。请在注释//*******3******* 后添加适当的语句。 注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。/**********code.c**********/ /**********-code.c**********/ 【答案】 第一处,应添加doubledistance;intrevolve; 第二处,Earth(doubled,intr);应改为Earth(doubled,intr):Planet(d,r); 第三处,应添加voidshow() 解析:第一处为定义私有数据成员;第二处,在调用派生类构造函数时,应该先调用基类构造函数,并为之传递参数。第三处定义成员函数show(),通过输出流类对象cout输出题目所要求的3个数据成员。 因篇幅问题不能全部显示,请点此查看更多更全内容