1、国家二级( C+)笔试模拟试卷 215及答案与解析 1 下列叙述中正确的是 ( )。 ( A)线性链表的各元素在存储空间中的位置必须是连续的 ( B)线性链表的头元素一定存储在其他元素的前面 ( C)线性链表中的各元素在存储空间中的位置不一定是连续的,但表头元素一定存储在其他元素的前面 ( D)线性链表中的各元素在存储空间中的位置不一定是连续的,且各元素的存储顺序也是任意的 2 数据库的概念模型独立于 ( A)具体的机器和 DBMS ( B) E-R图 ( C)信息世界 ( D)现实世界 3 对长 度为 N的线性表进行顺序查找,在最坏情况下,需要的比较次数是 ( )。 A) N+1 B) N
2、C) (N+1)/2 D) N/2 4 在一个派生类的成员函数中,试图调用其基类的成员函数 “void f( ); ”,但无法通过编译,这说明 ( A) f( )是基类的私有成员 ( B) f( )是基类的保护成员 ( C)派生类的继承方式为私有 ( D)派生类的继承方式为保护 5 6 在下列横线处应添加的语句是 ( )。 class Basepublic:void fun()cout “Base:fun“ end1; class: Derived: public Base public: void fun() _/显示调用基类的 fun函数 cout “Derived:fun“end1; ;
3、 ( A) Derived:fun ( B) Base:fun(); ( C) Pubic:fun ( D) fun(); 7 下列说法中,不属于数据模型所描述的内容的是 ( A)数据 结构 ( B)数据操作 ( C)数据查询 ( D)数据约束 8 在软件生存周期小,能准确地确定软件系统必须做什么和必须具备哪些功能的阶段是 ( A)概要设计 ( B)详细设计 ( C)可行性分析 ( D)需求分析 9 数据处理的最小单位是 ( A)数据 ( B)数据元素 ( C)数据项 ( D)数据结构 10 下列叙述中正确的是 ( A)线性链表是线性表的链式存储结构 ( B)栈与队列是非线性结构 ( C)双向
4、链表是非线性结构 ( D)只有根结点的二叉树是线性结构 11 已知枚举类型定义语句 为: enum Token NAME, NUMBER, PLUS=5,MINUS, PRINT=10; 则下列说法中错误的是 ( A)枚举常量 NAME的值为 1 ( B)枚举常量 NUMBER的值为 1 ( C)枚举常量 MINUS的值为 6 ( D)枚举常量 PRINT的值为 10 12 下列关于纯虚函数与抽象类的描述中,错误的是 ( )。 ( A)纯虚函数是一种特殊的虚函数,它没有具体的实现 ( B)抽象类是指具有纯虚函数的类 ( C)一个基类中说明具有纯虚函数,该基类的派生类一定不再是抽象类 ( D)抽
5、象类只能作为基类来使用,其纯虚函数的实现由派生类给出 13 必须用一对大括号括起来的程序段是 ( )。 ( A) switch语句中的 case标号语句 ( B) if语句的分支 ( C)循环语句的循环体 ( D)函数的函数体 14 若运行时给变量 x输入 12,则以下程序的运行结果是 #include iostream.h void main() int x,y; cin x; y X 12?x+10: x-12; cout y; cout endl; ( A) 0 ( B) 22 ( C) 12 ( D) 10 15 下列哪个是 C语言的有效标识符 ? ( A) _No1 ( B) No.
6、1 ( C) 12345 ( D) int 16 下列叙述中错误的是 ( )。 ( A)派生类可以使用 private派生 ( B)对基类成员的访问必须是无二义性的 ( C)基类成员的访问能力在派生类中维持不变 ( D)赋值兼容规则也适用于多继承的组合 17 重载输入流运算符必须使用的原 型为 ( )。 ( A) istream ( B) istream ( C) istream operator (istream,类名 ( D)类名 operator (istream 18 下面程序中错误之处是 _。 #include iostream.h class A private: int xl;
7、protected: int x2; public: int x3; ; class B: public A private: int b1; protected: int b2; public: int b3; void disp()cout x1 b2 end1; /A void set(int i)x3=i; /B ; void main() B bb; bb. a3=10 /C bb. b3=10 /D 19 设有如下程序段: char str=”World”; char*ptr=str; 执行上面的程序段后, *(ptr+5)的值为 _。 ( A) o ( B) 0 ( C)不确定的
8、值 ( D) o的地址 20 设 x和 y均为 bool 量,则 x Y为假的条件是 _ 。 ( A)二者均为真 ( B)二者均为假 ( C)其中一个为真 ( D)其中一个为假 21 下列关于 this 指针的叙述中,正确的是 _ 。 ( A)任何与类相关的函数都有 this指针 ( B)类的成员函数都有 this指针 ( C)类的友元函数都有 this指针 ( D)类的非静态成员函数才有 this指针 22 能正确表示逻辑关系: “a10或 a0”的 C+语言表达式是 ( A) a =10 or a =0 ( B) a =0|a =10 ( C) a +10 cout (a 3*5,a*4,
9、a+5); ( A) 65 ( B) 20 ( C) 15 ( D) 10 33 若有以下程序: main() int k=2, i 2, m; m=(k+ i*=k); coutm “, “ i end1; 执行后的输出结果是 ( A) 8, 6 ( B) 8, 3 ( C) 6, 4 ( D) 7, 4 34 以下叙述中不正确的是 ( A)在 C中,调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参 ( B)在 C的函数中,最好使用全局变量 ( C)在 C中, 形式参数只是局限于所在函数 ( D)在 C中,函数名的存储类别为外部 35 有如下类定义: class XX int X
10、X; public: xx(): xx(0)toutA; XX(int n): xx(n)coutB; ; class Y: Y: public XX int YY; public: YY(): YV(O)coutYY; ) YY(int n): xx(n+1), YY(n)coutYY; YY(int m, int n): XX(m), YY(n)coutyy; ) ; 下列选项中,输出结果为 A0的语句是 ( A) YY yl(0, 0); ( B) YY 72(1); ( C) YY y3(0); ( D) YY y4; 36 37 在类中, _成员为类的所有对象所共享。 38 39 有
11、 64个结点的完全二叉树的深度为【 】 (根的层次为 1)。 40 若有: int i=1000; int * ip=cc; p- f( ); return 0; 程序的输出结果是 _。 45 以下程序的执行结果是【 】。 #include iostream.h void main() cout.fill(*); cout.width(10); cout 123.45 endl; cout.width(8); cout 123.45 endl; cout.width(4); cout 123.45 endl; 46 以下程序运行后的输出结果是【 】。 #include iostream.h v
12、oid main() char s “123456”, *p; for(p=s; p s+2; p+) cout p end1; 47 【 】允许用户为类定义一种模式,使得类中的某些数据成员及某些成员函数的返回位能取任意类型。 48 下面程序是一个堆栈的类模板,在横线处填上适当语句,完成类模板的定义。 #define MAXSIZE 100 template class T class Stack T sMAXSIZE; int top; public: stack() top=1; void push(T newValue) if(top MAXSIZE) top=top+1; stop=n
13、ewValue; else cout “堆栈满,无法进栈 “ end1; void pop(); ; 【 】 if(top 1) cout stop end1; top=top-1; else cout “堆栈空 ! “ end1; 49 C+语句 const char*const p=“hello“;,所定义的指针 p和它所指的内容都不能被【 】。 50 参照函数模板的写法,完成非模板函数的定义,语句为【 】。 #include iostream, h #include string. h template class T T min(T a, T b) return(a b? a:b);
14、char * min(char * a, char * b) _ void main() double a=1.23,b=3.45; char s1=“abcd“,s2=“erg“; cout min(a, b) min(s1,s2) end1: 国家二级( C+)笔试模拟试卷 215答案与解析 1 【正确答案】 D 【试题解析】 在线性链表中,各元素在存储空间中的位置是任意的,各元素的顺序也是任意的,依靠指针来实现数据元童的前后件关系。 2 【正确答案】 A 【试题解析】 概念模型侧重于表达建模对象之间联系的语义,它是一种独立于计算机系统的模型,是现实世界的第一层次的抽象,是用户和数据库设计
15、人员进行交流的工具。所以答案为 A。 3 【正确答案】 B 【试题解析】 在进行顺序查找过程中,如果线性表中被查的元素是线性表 中的最后一个,或者被查元素根本不在线性表中,则为了查找这个元素需要与线性表中所有元素进行比较,这是顺序查找最坏的情况。所以在此最坏情况下所需要比较的次数是该线性表的长度值。 4 【正确答案】 C 5 【正确答案】 B 6 【正确答案】 B 7 【正确答案】 C 【试题解析】 数据模型所描述的内容有 3个部分,它们是数据结构、数据操作和数据约束。其中,数据模型中的数据结构主要描述数据的类型、内容、性质,以及数据库的联系等;数据操作主要是描述在相应数据结构上的操作类型与操
16、作方式。 8 【正确答案】 D 【试题解析】 在需求分析阶段中,根据可行性研究阶段所提交的文档,特别是从数据流图出发,对目标系统提出清晰、准确和具体的要求,即要明确系统必须做什么的问题。本题的正确答案为 D。 9 【正确答案】 C 【试题解析】 数据处理的最小单位是数据项;由若干数据项组成数据元素;而数据是指能够被计算机识别、存储和加工处理的信息载体;数据结构是指数据之间的相互关系和数据运算。故正确答案为选项 C。 10 【正确答案】 A 【试题解析】 一个非空的数据结构如果满足下列两个条件: (1)有且只有一个根结点; (2)每一个结点最多有一个前件,也最多有一个后件。则称为线性结构。线性链
17、表是线性表的链式存储结构,选项 A的说法是正确的。栈与队列是特殊的线性表,它们也是线性结构,选项 B 的说法是错误的;双向链表是线性表的链式存储结构,其对应的逻辑结构也是线性结构,而不是非线性结构,选项 C的说法是错误的;二叉树是非线性结构,而不是线性结构,选项 D的说法是错误的。因此,本题的正确答案为 A。 11 【正确答案】 A 【试题解析】 本题考核 C+数据类型中枚举。枚举类型定义了一些整型符号常量的集合,使 用枚举类型时应该注意以下几点:枚举类型的第一个常量默认值是 0;枚举类型常量的值允许彼此相同;虽然枚举类型常量是整数类型,但是不允许使用整数直接赋值给枚举类型变量,也不允许与整数
18、进行运算,只可以与整数进行比较。 由此可知枚举常量 NAME 的值应为 0。所以 A) 选项是错误的。 12 【正确答案】 C 【试题解析】 纯虚函数是在声明虚函数时被 “初始化 ”为 0的虚函数。不定义对象而只作为一种基本类型用作继承的类,称为抽象类。凡是包含纯虚函数的类都是抽象类。抽象类的作用是作为一个类族的共同基类。 13 【 正确答案】 D 【试题解析】 此题考查的是语句块和函数。 if 语句的分支和循环语句的循环体可以是一条语句也可以使一个语句块,所以不是必须用一个大括号括起来; switch语句中的 case标号语句可以是一系列语句,也可以包含语句块,也不是必须用一对大括号括起来;
19、函数的函数体必须用一对大括号括起来。 14 【正确答案】 A 15 【正确答案】 A 【试题解析】 标识符是一个以字母或下画线开始的,由字母、下画线和数字组成的字符串,标识符不能与任意关键字同名。 16 【正确答案】 C 【试 题解析】 在建立派生类时,并不是简单地把基类的私有成员直接作为派生类的私有成员,把基类的公用成员直接作为派生类的公用成员。涉及如何确定基类的成员在派生类中的访问属性问题,不仅要考虑对类成员所声明的访问属性,还要考虑派生类所声明的对基类的继承方式,根据这两个因素共同决定基类成员在派生类的访问属性。所以本题选择选项 C)。 17 【正确答案】 A 【试题解析】 C+流的输入
20、运算符 “ ”和输出运算符 “ ”只能作为非成员函数重载。重载输入流运算符 “ ”须使用以下原型: istream&operator(istream&,类名 );。 18 【正确答案】 1 19 【正确答案】 B 20 【正确答案】 B 【试题解析】 x y为假的条件是二者均为假。 21 【正确答案】 D 【试题解析】 类的非静态成员函数才有 this指针。 22 【正确答案】 D 【试题解析】 逻辑运算符 “|”表示或的意思。 23 【正确答案】 C 【试题解析】 C+语言中默认小数的输出位一共是 6位, fixed的意义是在小数点后保留 6位。 24 【正确答案】 D 【试题解析】 C语言
21、是一种面向过程的程序设计语言,而 C+语言是一种面向对象的设计语言, C +语言是 C语言的超集,它包含了 C语言的所有语言特性,并进行了扩充。 25 【正确答案】 A 【试题解析】 本题的函数是根据 a和 b的值来给 c赋值。 26 【正确答案】 A 27 【正确答案】 A 【试题解析】 C+语言标识符只能由数字,字母和下划线组成,并且只能以字母和下划线为开头。 28 【正确答案】 B 【试题解析】 C+语言中的浮点数常量分为整数部分和小数部分,一个浮点数 常量可以用科学计数法和通常的十进制数表示法: 在十进制数表示法中,浮点数常量由整型、小数点和小数 3部分组成,其中整数部分或小数部分可以
22、没有,如 12, 0.9等。 在科学计数表示法中,浮点常量是由尾数、字母 e或 E 和指数 3部分组成,其中,尾数部分可以是十进制整型常量,或属于第一种形式的实数,指数部分则是十进制的短整型常量,如 10e2、 1.432e2、 0.4e-5等。 观察所给出的 4个选项,选项 A是一个十六进制的整型常量;选项 C的指数部分不是整型常量;选项 D中在前面无整数。所以选项 A、 C、 D都 不符合上述形式。 29 【正确答案】 B 【试题解析】 break 语句和 continue语句都是 C+的跳转语句。 break 语句又称为跳出语句,它可以用在循环语句和 switch 语句中。在 switc
23、h 语句中, break 用来使执行流程跳出 switch 语句。在循环语句中, break 语句用来使执行流无条件跳出本层循环体。 continue语句又称为继续语句,它仅用在循环语句中。它的功能是:结束本次循环,接着进行下一次是否执行循环的条件判定。 30 【正确答案】 D 31 【正确答案】 A 【试题解析】 本题中 (a b C的运算次序是先算 a b,返回 1,再运算 1 c,返回 1,所以表达式 a b c的值为 1。 32 【正确答案】 B 【试题解析】 本题考查逗号表达式的运算特点。逗号表达式是所有表达式中优先级最低的,从左到右结合,其求解过程是:将逗号表达式各表达式按从左到右
24、的顺序依次求值,并将最右边的表达式结果作为整个逗号表达式的结果。这里考生要注意的是,第二个表达式执行完后, n的值并没有发生变化,依然是 15,所以在执行 a+5的时候,结果是 20,而不是 65。有的考生可能误选 A。正确答案应 是B。 33 【正确答案】 C 【试题解析】 首先进行括号内的运算,注意赋值表达式是从右向左进行的。因此,只要考生细心运算就可以得到正确答案为 C。 34 【正确答案】 B 【试题解析】 本题也是考查 C语言中函数的概念及其使用。函数调用时,值可以双向传递,并没有限制使用全局变量还是局部变量,需要根据程序的逻辑需要进行选择。 35 【正确答案】 D 【试题解析】 建
25、立派生类对象时,构值函数的执行顺序为:执行基类的构造函数一执行成员对象的构造函数一执行派生类的构造函数。 D)选项定义对 象 y4时没有传人任何值,则先调用基类的构造函数 XX( ),输出 A。,然后调用派生类的构造函数 YY( ),输出 yy=0,最终输出为 A0。故本题答案为 D)。 36 【正确答案】 (n-1) 2 37 【正确答案】 静态 38 【正确答案】 输出 【试题解析】 测试用例由测试输入数据 (输入值集 )和与之对应的预期输出结果 (输出值集 )两部分组成。 39 【正确答案】 7 40 【正确答案】 把整型指针赋给通用指针 41 【正确答案】 10 10 20 【试题解析
26、】 本题考核函 数的引用传递。 “引用 ”实际上是给一个已知变量起个别名,对引用的操作也就是对被它引用的变量的操作。函数 funA 的功能是将第二个实参的值乘以 2再赋值给第一个实参 (通过引用传递实现 ),函数 funB 的功能是将全局变量 x加上 4再赋值给第二个实参,同时 x等于第一个实参与第二个实参相加的和。 42 【正确答案】 类。 【试题解析】 本题考查的是类模板的定义, C+语言中模板分为两种:类模板和函数模板,类模板只能用于类型参数,函数模板可以重载。 43 【正确答案】 10-10 【试题解析】 此题考查的 是引用的定义和使用。题目中 r初始化为对 x的引用,那么 r的值就与
27、 x的值相等。 44 【正确答案】 2213 【试题解析】 TWO bb;调用 TWO的构造函数打印 2; THREE cc;调用继承类TWO 的构造函数打印 2; p- f( );调用类 TREE 的函数 f( ),先显式调用 TWO类的函数 f( ), TWO中没有重新定义 f( )函数,所以调用 TWO的基类 ONE 的虚函数 f( );打印 1,然后再打印 3,故答案为 2213。 45 【正确答案】 *123.45 *123.45 123.45 46 【正确答案】 123456 23456 47 【正确答案】 类模板 【试题解析】 本题考核类模板的基本概念。类模板就是一系列相关类的模
28、型或样板,这些类的成员组成相同,成员函数的源代码形式相同,所不同的只是所针对的类型 (成员的类型以及成员函数的参数和返回值的类型 )。对于类模板,数据类型本身成了它的参数,因而是一种参数化类型的类,是类的生成器。类模板中声明的类称为模板类。 48 【正确答案】 template classT voidstack T :pop() 【试题解析 】 本程序用类模板方式设计一个栈类 stack T,其中有两个私有数据成员 s(存放栈元素 )和 top(栈顶元素下标 ),以及两个公有成员函数 push()(元素入栈 )、 pop()(元素出栈 )。 49 【正确答案】 改变 【试题解析】 本题考查的是定义常量的关键字 const,由 const定义的变量的值不可以再改变,所以定义时必须进行初始化。 50 【正确答案】 return(strcmp(a,b) 0? a:b); 【试题解析】 由于对于两个变量的比较来说,字符间的比较不同于整型或浮点剩变 量那样可以直接比较,而是要采用专用函数进行,因此不能采用同一个函数模板,所以本题采用的就是单独写成一个非模板函数。