1、二级 C+笔试-338 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:35,分数:70.00)1.有如下类定义: class XX int xdata: public: xx(int n=0):xdata(n) class YY:public XX int ydata; public: YY(int m=0,int n=0):xx(m),ydata(n) ; YY 类的对象包含的数据成员的个数是(分数:2.00)A.1B.2C.3D.42.软件详细设计产生的图如下,该图是 (分数:2.00)A.N-S 图B.PAD 图C.程序流程图D.E-R 图3.有以下类定义:
2、class A char*a; public: A( ):a(0) A(char*a(分数:2.00)A./把 aa 所指字符串复制到 a 所指的存储空间 a=_; strcpy(a,aA) ; A( )delete a; ; 画线处应填写的表达式是 A) new charstrlen(aA)+1B.charstC.charD.ne4.有如下程序: #includeiostream using namespaee std; class A public: A(int i):rl(i) void print( )coutErl-; void print( )constcoutCrl*rl-; p
3、rivate: int rl; ; int main( ) A al(2);eonst A a2(4); a1print( );a2print( ); return 0; 程序的输出结果是(分数:2.00)A.运行时出错B.E2-C16-C.C4-C16-D.E2-E4-5.下列关于运算符函数的叙述中,错误的是(分数:2.00)A.运算符函数的名称总是以 operator 为前缀B.运算符函数的参数可以是对象C.运算符函数只能定义为类的成员函数D.在表达式中使用重载的运算符相当于调用运算符重载函数6.在下列枚举类型的定义中,包含枚举值 3 的是(分数:2.00)A.entire test(RE
4、D,YELLOW,BLUE,BLACK);B.enum test(RED,YELLOW=4,BLUE,BLACK);C.enum test(RED=-1,YELLOW,BLUE,BLACK);D.enum test(RED,YELLOW=6,BLUE,BLACK);7.下列关于模板形参的描述中,错误的是(分数:2.00)A.模板形参表必须在关键字 template 之后B.模板形参表必须用小括号()括起来C.可以用 class 修饰模板形参D.可以用 typename 修饰模板形参8.数据库管理系统是(分数:2.00)A.操作系统的一部分B.在操作系统支持下的系统软件C.一种编译系统D.一种操
5、作系统9.有如下模板声明: templatetypename T1,typename T2class A; 下列声明中,与上述声明不等价的是(分数:2.00)A.templateclass T1,class T2class A;B.templateclass T1,typename T2class A;C.templatetypename T1,class T2class A;D.templatetypename T1,T2class A;10.对于循环队列,下列叙述中正确的是(分数:2.00)A.队头指针是固定不变的B.队头指针一定大于队尾指针C.队头指针一定小于队尾指针D.队头指针可以大于
6、队尾指针,也可以小于队尾指针11.将运算符重载为类成员函数时,其参数表中没有参数,说明该运算符是(分数:2.00)A.不合法的运算符B.一元运算符C.无操作数的运算符D.二元运算符12.算法的空间复杂度是指(分数:2.00)A.算法在执行过程中所需要的计算机存储空间B.算法所处理的数据量C.算法程序中的语句或命令条数D.算法在执行过程中所需要的临时工作单元数13.有如下程序: #includeiostream #includeiomanip using namespace std; int main( ) int S =123,234; coutrightsetfill(*)setw(6);
7、for(int i=0;i2;i+)COUtsiendl; return 0; 程序的输出结果是(分数:2.00)A.123234B.*123234C.*123*234D.*123 234*14.有如下程序: #includeiostream using namespace std; class Publication/出版物类 char name30; public: Publication(char*name=“未知名称“)strcpy(this-name,name); const char*getName( )constreturn name; /常数据成员 virtual const
8、char*getType( )constreturn“未知类型“;/虚常数据成员 ; class Book:public Publication /书类 public: Book(char*name):Publication(name) virtual const char*getType( )constreturn“书“; /虚常数据成员 ; void showPublication(Publication while(1) i+; if(i=10)break; if(i%2=0)eout$; 执行这个程序段输出字符*的个数为(分数:2.00)A.10B.3C.4D.528.有如下程序: #
9、includeiostream using namespace std; class Toy public: Toy(char*_n)strcpy(name,_n);count+; Toy()count-; char*GetName( )return name; static int getCount( )return count; private: char name10; static int count; ; int Toy:count=0: int main( ) Toy tl(“Snoopy“),t2(“Mickey“),t3(“Barbie“); coutt1getCount( )
10、endl; return 0; 程序的输出结果是(分数:2.00)A.1B.2C.3D.运行时出错29.在下列枚举符号中,用来表示“相对于当前位置”文件定位方式的是(分数:2.00)A.ios_base:CHrB.ios_base:begC.ios_base:outD.ios_base:end30.有如下程序: #includeiostream using namespace std; class Name char name20; public: Name( )strepy(name,“ “);tout?; Name(char*fname)strcpy(name,fname);cout?;
11、; int main( ) Name name3=Name(“张三“),Name(“李四“); return 0; 运行此程序输出符号“?”的个数是(分数:2.00)A.0B.1C.2D.331.有 3 个关系 R、S 和 T 如下: (分数:2.00)A.选择B.投影C.交D.并32.下列数据结构中,属于非线性结构的是(分数:2.00)A.循环队列B.代链队列C.二叉树D.带链栈33.下列数据结构中,能够按照“先进后出”原则存取数据的是(分数:2.00)A.循环队列B.栈C.队列D.二叉树34.下列关于 C+流的叙述中,错误的是(分数:2.00)A.coutA表达式可以输出字符 AB.eof
12、( )函数可以检测是否到达文件尾C.对磁盘文件进行流操作时,必须包含头文件 fstreamD.以 ios_base:out 模式打开的文件不存在时,将自动建立一个新文件35.有如下程序: #includeiostreanl using namespaee std; class AA public: AA( )cout1; ; class BB:public AA int k; public: BB( ):k(0)eout2; BB(int n):k(n)cout3; ; int main( ) BB,b(4),c; return 0; 程序的输出结果是(分数:2.00)A.1312B.132C
13、.32D.1412二、填空题(总题数:15,分数:30.00)36.某二叉树有 5 个度为 2 的结点以及 3 个度为 1 的结点,则该二叉树中共有 1 个结点。(分数:2.00)填空项 1:_37.程序流程图中的菱形框表示 1。(分数:2.00)填空项 1:_38.软件开发过程主要分为需求分析、设计、编码与测试 4 个阶段,其中 1 阶段产生“软件需求规格说明书”。(分数:2.00)填空项 1:_39.在数据库技术中,实体集之问的联系可以是一对一或一对多或多对多的,那么“学生”和“可选课程”的联系为 1。(分数:2.00)填空项 1:_40.人员基本信息一般包括身份证号、姓名、性别、年龄等。
14、其中可以作为主关键字的是 1。(分数:2.00)填空项 1:_41.若表达式(x+(y-z)+(m/n)+3 中的变量均为 double 型,则表达式值的类型为 1。(分数:2.00)填空项 1:_42.有如下循环语句: for(inti=50;i20;i-=2)couti“,“; 程序运行时循环体的执行次数是_。(分数:2.00)填空项 1:_43.利用表达式 ai可以访问 int 型数组 a 中下标为 i 的元素。在执行了语句 int*p=a;后,利用指针 p也可访问该元素,相应的表达式是 1。(分数:2.00)填空项 1:_44.下面是一个递归函数,其功能是使数组中的元素反序排列,请将函
15、数补充完整。 void reverse(int * a,int size) if(size2)return; int k=a0; a0=asize-1; asize-1=k;reverse(a+l,_); (分数:2.00)填空项 1:_45.类 Sampie 的构造函数将形参 data 赋值给数据成员 data。请将类定义补充完整。 class Sample public: Sample(int data=0); priVate: int data: ; Sample:Sample(int datA) _ (分数:2.00)填空项 1:_46.有如下类定义: class Sample pub
16、lic: Sample( ); Sample( ); private: Static int date: ; 将静态数据成员 data 初始化为 0 的语句是_。(分数:2.00)填空项 1:_47.“图形”类 Shape-中定义了纯虚函数 calArea( ),“三角形”类 Triangle 继承了类 Shape,请将Triangle 类中的 calArea 函数补充完整。 class Shape public: virtual int CalArea( )=0; class Triangle:public Shape public: Triangleint S,int h:side(S),
17、height(h) _return side * height/2; private: int side; int height; ;(分数:2.00)填空项 1:_48.有如下程序: #includeiostream using namespace std; class GrandChild public: GrandChild( )strcpy(name,“Unknown“); const char*getName( )constreturn name; virtual char * getAddress( )const=0; private: char name20; ; class G
18、randSon:public GrandChild public: GrandSon(char * name) char * getAddress( )constreturn“Shanghai“; ; int main( ) GrandChild * gs=new GrandSon(“Feifei“); coutgs-getName( )“住在“gs-getAddress( )endl; delete gs; return 0; 程序的输出结果是_。(分数:2.00)填空项 1:_49.如下程序定义了“单词”类 word,类中重载了运算符,用于比较“单词”的大小,返回相应的逻辑值。程序的输出结
19、果为:After Sorting:Happy Welcome,请将程序补充完整。 #includeiostream #includestring using namespace std; class Word public: Word(strings):str(s) string getStr( )return str; _constreturn(strwstr); friend ostream private: int rl; ; int main( ) A al(2);eonst A a2(4); a1print( );a2print( ); return 0; 程序的输出结果是(分数:2
20、.00)A.运行时出错B.E2-C16- C.C4-C16-D.E2-E4-解析:解析 在类中重载函数的情况下,常对象调用类的常成员函数,非常对象调用类的非常成员函数,故答案为 B。5.下列关于运算符函数的叙述中,错误的是(分数:2.00)A.运算符函数的名称总是以 operator 为前缀B.运算符函数的参数可以是对象C.运算符函数只能定义为类的成员函数 D.在表达式中使用重载的运算符相当于调用运算符重载函数解析:解析 运算符函数可以重载为成员函数,也可以重载为非成员函数,如重载为友元函数。6.在下列枚举类型的定义中,包含枚举值 3 的是(分数:2.00)A.entire test(RED,
21、YELLOW,BLUE,BLACK); B.enum test(RED,YELLOW=4,BLUE,BLACK);C.enum test(RED=-1,YELLOW,BLUE,BLACK);D.enum test(RED,YELLOW=6,BLUE,BLACK);解析:解析 枚举变量中的枚举元素系统是按照常量来处理的,如果没有进行元素赋值操作,那么元素将会被系统自动从 0 开始自动递增地进行赋值操作,但是,如果一旦定义了某一个元素,那么系统将对下一个元素进行前一个元素的值加 1 操作。7.下列关于模板形参的描述中,错误的是(分数:2.00)A.模板形参表必须在关键字 template 之后B.
22、模板形参表必须用小括号()括起来 C.可以用 class 修饰模板形参D.可以用 typename 修饰模板形参解析:解析 对函数模板,模板的一般格式为: templatetyname 类型参数函数类型函数名(形参)函数体 对类模板,一般格式为: templateclass 类型参数class 类名,类型参数是用一对括起来。8.数据库管理系统是(分数:2.00)A.操作系统的一部分B.在操作系统支持下的系统软件 C.一种编译系统D.一种操作系统解析:解析 数据库管理系统是指位于用户与操作系统之间的数据管理软件。数据库管理系统是为数据库建立、使用和维护而配置的软件。9.有如下模板声明: temp
23、latetypename T1,typename T2class A; 下列声明中,与上述声明不等价的是(分数:2.00)A.templateclass T1,class T2class A;B.templateclass T1,typename T2class A;C.templatetypename T1,class T2class A;D.templatetypename T1,T2class A; 解析:解析 在模板定义中,一般情况下,class 和 typename 可以互换。在选项 D 中,T2 没有类型参数限制定义,所以和题干给出的定义不同。10.对于循环队列,下列叙述中正确的是
24、(分数:2.00)A.队头指针是固定不变的B.队头指针一定大于队尾指针C.队头指针一定小于队尾指针D.队头指针可以大于队尾指针,也可以小于队尾指针 解析:解析 循环队列是将顺序队列首尾相连形成的,随着插入元素或删除元素的进行,其队头指针及队尾指针是在不断变化的,有时可能会出现队头指针大于队尾指针的情况,也可能是队尾指针大于队头指针,故答案为 D。11.将运算符重载为类成员函数时,其参数表中没有参数,说明该运算符是(分数:2.00)A.不合法的运算符B.一元运算符 C.无操作数的运算符D.二元运算符解析:解析 当运算符重载为成员函数时,如果函数参数表中没有参数,则表明该重载为单目运算符,操作数就
25、为该对象本身;如果函数参数表中有一个参数,则表示该重载为双目运算符,另外一个操作数为该对象本身。12.算法的空间复杂度是指(分数:2.00)A.算法在执行过程中所需要的计算机存储空间 B.算法所处理的数据量C.算法程序中的语句或命令条数D.算法在执行过程中所需要的临时工作单元数解析:解析 算法的空间复杂度是指:算法执行过程中所需的存储空间。一个算法所占用的存储空间包括算法程序所占的空间、输入的初始数据所占的存储空间及算法执行过程中所需要的额外空间。13.有如下程序: #includeiostream #includeiomanip using namespace std; int main(
26、) int S =123,234; coutrightsetfill(*)setw(6); for(int i=0;i2;i+)COUtsiendl; return 0; 程序的输出结果是(分数:2.00)A.123234B.*123234 C.*123*234D.*123 234*解析:解析 setfill(*)填充设置仅影响紧跟其后的输出操作,第二次循环时失效。14.有如下程序: #includeiostream using namespace std; class Publication/出版物类 char name30; public: Publication(char*name=“未
27、知名称“)strcpy(this-name,name); const char*getName( )constreturn name; /常数据成员 virtual const char*getType( )constreturn“未知类型“;/虚常数据成员 ; class Book:public Publication /书类 public: Book(char*name):Publication(name) virtual const char*getType( )constreturn“书“; /虚常数据成员 ; void showPublication(Publication whil
28、e(1) i+; if(i=10)break; if(i%2=0)eout$; 执行这个程序段输出字符*的个数为(分数:2.00)A.10B.3C.4 D.5解析:解析 相当于统计 110 之间的偶数个数,遇到偶数打印“*”,故打印*的个数为 4。28.有如下程序: #includeiostream using namespace std; class Toy public: Toy(char*_n)strcpy(name,_n);count+; Toy()count-; char*GetName( )return name; static int getCount( )return coun
29、t; private: char name10; static int count; ; int Toy:count=0: int main( ) Toy tl(“Snoopy“),t2(“Mickey“),t3(“Barbie“); coutt1getCount( )endl; return 0; 程序的输出结果是(分数:2.00)A.1B.2C.3 D.运行时出错解析:解析 静态数据成员是同一个类的不同对象之间的数据共享,无论创建多少个类,均只有一个静态数据成员,通过对静态数据成员的调用,实现了数据共享。本题创建了 3 个 Toy 对象,所以调用 3 次构造函数,count 被增加 3 次
30、,故 sount=3。29.在下列枚举符号中,用来表示“相对于当前位置”文件定位方式的是(分数:2.00)A.ios_base:CHr B.ios_base:begC.ios_base:outD.ios_base:end解析:解析 ios_base:cur 表示相对当前位置需要计算的文件字节数偏移量,ios_base:beg 表示从文件头位置开始计算的文件字节数偏移量,ios_base:end 表示从文件末尾位置开始计算的文件字节数偏移量。30.有如下程序: #includeiostream using namespace std; class Name char name20; public
31、: Name( )strepy(name,“ “);tout?; Name(char*fname)strcpy(name,fname);cout?; ; int main( ) Name name3=Name(“张三“),Name(“李四“); return 0; 运行此程序输出符号“?”的个数是(分数:2.00)A.0B.1C.2D.3 解析:解析 Name name3定义了一个 name 对象数组,有 3 个元素,前 2 个调用 Name(char *fname)构造函数,第三个元素调用 Name( )构造函数,故打印 3 个“?”。31.有 3 个关系 R、S 和 T 如下: (分数:2
32、.00)A.选择B.投影C.交D.并 解析:解析 两个相同结构关系的并是由属于这两个关系的元组组成的集合。32.下列数据结构中,属于非线性结构的是(分数:2.00)A.循环队列B.代链队列C.二叉树 D.带链栈解析:解析 根据数据结构中各数据元素之间前后关系的复杂程度,一般将数据结构分为两大类型:线性结构与非线性结构。线性结构表示数据元素之间为一对一的关系,非线性结构表示数据元素之间为一对多或者多对一的关系。根据各种结构的定义可知,二叉树是一种非线性结构。33.下列数据结构中,能够按照“先进后出”原则存取数据的是(分数:2.00)A.循环队列B.栈 C.队列D.二叉树解析:解析 栈是限定只在一
33、端进行插入与删除的线性表。通常称插入、删除的这一端为栈顶,另一端为栈底。栈顶元素总是最后被插入的元素,也是最先被删除的元素;栈底元素总是最先被插入的元素,也是最后才能被删除的元素。栈是按照“先进后出”或“后进先出”的原则组织数据的。34.下列关于 C+流的叙述中,错误的是(分数:2.00)A.coutA表达式可以输出字符 A B.eof( )函数可以检测是否到达文件尾C.对磁盘文件进行流操作时,必须包含头文件 fstreamD.以 ios_base:out 模式打开的文件不存在时,将自动建立一个新文件解析:解析 COHt 流对象后面跟的应该是插入运算符“”而不是提取运算符“”,故选项 A 错。
34、35.有如下程序: #includeiostreanl using namespaee std; class AA public: AA( )cout1; ; class BB:public AA int k; public: BB( ):k(0)eout2; BB(int n):k(n)cout3; ; int main( ) BB,b(4),c; return 0; 程序的输出结果是(分数:2.00)A.1312 B.132C.32D.1412解析:解析 创建派生类对象时,先调用基类构造函数,然后调用派生类构造函数,b(4)先调用基类构造函数,然后调用 BB 的带参数构造函数,打印 1 和
35、 3;c 调用基类 AA 的构造函数,然后调用 BB 的构造函数,打印 1 和 2。故答案为 A。二、填空题(总题数:15,分数:30.00)36.某二叉树有 5 个度为 2 的结点以及 3 个度为 1 的结点,则该二叉树中共有 1 个结点。(分数:2.00)填空项 1:_ (正确答案:14)解析:解析 在二叉树中,度为 0 的结点数是度为 2 的结点数加 1,故二叉树中结点数的总和为度为 0的结点数、度为 1 的结点数及度为 2 的结点数三者相加,得出结果为 14 个结点。37.程序流程图中的菱形框表示 1。(分数:2.00)填空项 1:_ (正确答案:逻辑判断)解析:解析 绘制流程图时对实
36、体的描述用椭圆形表示、行动方案用矩形表示、问题用菱形表示、箭头代表流动方向。38.软件开发过程主要分为需求分析、设计、编码与测试 4 个阶段,其中 1 阶段产生“软件需求规格说明书”。(分数:2.00)填空项 1:_ (正确答案:需求分析)解析:解析 需求分析阶段的工作主要包括需求获取、需求分析、编写需求规格说明书和需求评审 4 个方面,产生的主要文档为软件需求规格说明书,它可以为用户、分析人员和设计人员之间的交流提供方便,直接支持目标软件系统的确认,也可作为控制软件开发进程的依据。39.在数据库技术中,实体集之问的联系可以是一对一或一对多或多对多的,那么“学生”和“可选课程”的联系为 1。(
37、分数:2.00)填空项 1:_ (正确答案:多对多)解析:解析 一名学生可选择多门课程,一门课程也可由多名学生选择,因此是多对多联系。40.人员基本信息一般包括身份证号、姓名、性别、年龄等。其中可以作为主关键字的是 1。(分数:2.00)填空项 1:_ (正确答案:身份证号)解析:解析 主关键字是表中区别不同记录的标识,在该表中只有身份证号能起到这个作用,所以用其作为主关键字。41.若表达式(x+(y-z)+(m/n)+3 中的变量均为 double 型,则表达式值的类型为 1。(分数:2.00)填空项 1:_ (正确答案:double)解析:解析 同类数据进行四则运算类型不变。42.有如下循
38、环语句: for(inti=50;i20;i-=2)couti“,“; 程序运行时循环体的执行次数是_。(分数:2.00)填空项 1:_ (正确答案:15)解析:解析 5022 中有 15 个偶数。43.利用表达式 ai可以访问 int 型数组 a 中下标为 i 的元素。在执行了语句 int*p=a;后,利用指针 p也可访问该元素,相应的表达式是 1。(分数:2.00)填空项 1:_ (正确答案:*(p+i))解析:解析 指针 p 指向数组首地址,p+i 指向第 i 个元素地址,则*(p+i)表示第 i 个元素的值。44.下面是一个递归函数,其功能是使数组中的元素反序排列,请将函数补充完整。
39、void reverse(int * a,int size) if(size2)return; int k=a0; a0=asize-1; asize-1=k;reverse(a+l,_); (分数:2.00)填空项 1:_ (正确答案:size-2)解析:解析 函数体的基本功能是将大小为 size 的数组 a 的首尾元素进行交换。交换一次后,未交换部分的首元素地址为 a+1,未交换的元素个数为 size-2。45.类 Sampie 的构造函数将形参 data 赋值给数据成员 data。请将类定义补充完整。 class Sample public: Sample(int data=0); pr
40、iVate: int data: ; Sample:Sample(int datA) _ (分数:2.00)填空项 1:_ (正确答案:this-data=data;)解析:解析 为区分构造函数形参 data 和数据成员 data,数据成员 data 用 this 指针引导,因此构造函数将形参 data 赋值给数据成员 data,表示为 his-data=data。46.有如下类定义: class Sample public: Sample( ); Sample( ); private: Static int date: ; 将静态数据成员 data 初始化为 0 的语句是_。(分数:2.00
41、)填空项 1:_ (正确答案:int Sample:data=0;)解析:解析 静态数据成员的初始化格式为: 数据类型 类名:静态数据成员名=初始值;47.“图形”类 Shape-中定义了纯虚函数 calArea( ),“三角形”类 Triangle 继承了类 Shape,请将Triangle 类中的 calArea 函数补充完整。 class Shape public: virtual int CalArea( )=0; class Triangle:public Shape public: Triangleint S,int h:side(S),height(h) _return side
42、 * height/2; private: int side; int height; ;(分数:2.00)填空项 1:_ (正确答案:int CalArea(size,height))解析:解析 对纯虚函数 calArea( )在派生类中重新定义,赋予参数 size、height,使它适合Triangle 类中的 calArea 函数以计算三角形面积。也可以填为 virtual int calArea(size,height)。48.有如下程序: #includeiostream using namespace std; class GrandChild public: GrandChild
43、( )strcpy(name,“Unknown“); const char*getName( )constreturn name; virtual char * getAddress( )const=0; private: char name20; ; class GrandSon:public GrandChild public: GrandSon(char * name) char * getAddress( )constreturn“Shanghai“; ; int main( ) GrandChild * gs=new GrandSon(“Feifei“); coutgs-getNam
44、e( )“住在“gs-getAddress( )endl; delete gs; return 0; 程序的输出结果是_。(分数:2.00)填空项 1:_ (正确答案:Unknown 住在 Shanghai)解析:解析 首先调用构造函数将 name 初始化为“Feifei”,再通过继承的 getName( )函数调用构造函数将 name 更改为“Unknown”输出;直接输出“住在”,再调用 getAddress( )函数输出 Shanghai。49.如下程序定义了“单词”类 word,类中重载了运算符,用于比较“单词”的大小,返回相应的逻辑值。程序的输出结果为:After Sorting:H
45、appy Welcome,请将程序补充完整。 #includeiostream #includestring using namespace std; class Word public: Word(strings):str(s) string getStr( )return str; _constreturn(strwstr); friend ostream& operator(ostream& output,const Word w)outputwstr;return output; private: string str; ; int main( ) Word wl(“Happy“),w
46、2(“Welcome“); cout“After sorting:“; if(wlw2)coutw1“w2; else coutw2w1: return 0; (分数:2.00)填空项 1:_ (正确答案:bool operator(Word w))解析:解析 重载关系运算符“”为成员函数,得到逻辑类型结果,且只要一个参数。50.请将下列模板类 Data 补充完整。 template typename T class Data public: void put(T v)val=v; _get( )return val; /返回数据成员 val 的值,返回类型不加转换 private: T val; ;(分数:2.00)填空项 1:_ (正确答案:T)解析:解析 定义成员函数需要模板参数声明,使函数具有通用的类型以便被替换。