1、国家二级( C+)笔试模拟试卷 154及答案与解析 1 下列叙述中正确的是 ( A)线性表是线性结构 ( B)栈与队列是非线性结构 ( C)线性链表是非线性结构 ( D)二叉树是线性结构 2 非空的循环单链表 head的尾节点 (由 p所指向 ) ,满足 ( A) p- next NULL ( B) p NULL ( C) p- next head ( D) p head 3 已知数据表 A中每个元素距其最终位置不远,为节省时间,应采用的算法是 ( A)堆排序 ( B)直接插入排序 ( C)快速排序 ( D)直 接选择排序 4 对建立良好的程序设计风格,下面描述正确的是 ( A)程序应简单、清
2、晰、可读性好 ( B)符号名的命名只要符合语法 ( C)充分考虑程序的执行效率 ( D)程序的注释可有可无 5 下列不属于结构化分析的常用工具的是 ( A)数据流图 ( B)数据字典 ( C)判定树 ( D) PAD图 6 在软件生产过程中,需求信息的给出是 ( A)程序员 ( B)项目管理者 ( C)软件分析设计人员 ( D)软件用户 7 下列工具中为需求分析常用工具的是 ( A) PAD ( B) PFD ( C) N-S ( D) DFD 8 NULL是指 ( A) 0 ( B)空格 ( C)未知的值或无任何值 ( D)空字符串 9 数据库的故障恢复一般是由 ( A)数据流图完成的 (
3、B)数据字典完成的 ( C) DBA完成的 ( D) PAD图完成的 10 下列说法中,不属于数据模型所描述的内容的是 ( A)数据结构 ( B)数据操作 ( C)数据查询 ( D)数据约束 11 下列字符串中可以用做 C语言标识符的是 ( A) _1234 ( B) foo bar ( C) virtual ( D) 34var 12 关于 C语言与 C语言关系描述中错误的是 ( A) C语言是 C语言的超集 ( B) C语言对 C语言进行了扩充 ( C) C语言包含 C语言的全部语法特征 ( D) C语言与 C语言都是面向对象的程序设计语言 13 下列语句的输出结果 cout strlen
4、(“t“065xffn“) ; ( A) 5 ( B) 14 ( C) 8 ( D)输出项不合法,无正常输出 14 在 C语言中,不合法的实型数据是 ( A) 0.123 ( B) 123e3 ( C) 2.1e3.5 ( D) 123.0 15 若有如下语句 : #include iostream.h void main( ) int x 3; do x x 2; cout x; while(!( X) ) ; 则上面程序段 ( A)输出的是 1 ( B)输出的是 1和 2 ( C)输出的是 3和 0 ( D)是死循环 16 下面有关 for循环的正确描述是 ( A) for循环只能用于循环
5、次数已经确定的情况 ( B) for循环是先执行循环体语句,后判断表达式 ( C)在 for循环中,不能用 break语句跳出循环体 ( D)在 for循环的循环体语句中,可以包含多条语句,但必须用花括号括起来 17 以下程序中调用 cin函数给变量 a输入数值的方法是错误的,其错误原因是 #include iostream.h void main( ) int * p, * q, a, b; p cout “input a:“; cin p; ( A) * p表示的是指针变量 p的地址 ( B) p表示的是变量 a的地址,而不是变量 a的值 ( C) * p表示的是指针变量 p的值 ( D)
6、 * p只能用来说明 p是一个指针变量 18 假定 int类型变量占用两个字节,其有定义 int x10 0,2,4;,则数组 x在内存中所占字节数是 ( A) 3 ( B) 6 ( C) 10 ( D) 20 19 有以下程序 : #include iostream.h void fun(int a, int b, int c) a 456,b567,c 678; void main( ) int x 10,y 20,z 30; fun(x, y, z) ; cout x , y , z endl; 输出结果是 ( A) 30,20,10 ( B) 10,20,30 ( C) 456,567
7、,678 ( D) 678,567,456 20 以下叙述正确的是 ( A)函数可以嵌套定义但不能嵌套调用 ( B)函数既可以嵌套调用也可以嵌套定义 ( C)函数既不可以嵌套定义也不可以嵌套调用 ( D)函数可以嵌套调用但不可以嵌套定义 21 下列定义中 p指向的地址可更改,但 * p不能够更改的是 ( A) const int * p; ( B) int * const p; ( C) const int * const p; ( D) int * p; 22 下面的语句中错误的是 ( A) int a 5;int xa ; ( B) const int a 5;int xa ; ( C)
8、int n 5;int * p new inta ; ( D) const int n 5;int * p new inta ; 23 下面程序的结果是 #include iostream.h class A int a; public: A( ) :a(1) void showa ( ) cout a; ; class B int a; public: B( ) :a(2) void showa( ) cout a; ; class C: public A, public B t a; public: C( ) :a(3) void showa( ) cout a; ; void main(
9、 ) C c; c.showa( ) ; ( A) 1 ( B) 2 ( C) 3 ( D)程序有错误 24 关于二义性的描述错误的是 ( A)一个子类的两个父类中都有某个 同名成员,在子类中对该成员访问可能出现二义性 ( B)解决二义性可以用对成员名的限定法 ( C)父类和子类中同时出现同名函数,也可能存在二义性 ( D)一个子类是从两个父类派生出来的,而这两个父类又有一个共同的父类,对该父类成员进行访问时,可能出现二义性 25 如果表达式 x * y z中 ,“*”是作为友元函数重载的, “ ”是作为成员函数重载的,则该表达式还可为 ( A) operator (operator * (x
10、, y) ,Z) ( B) x. operator (operator * (x, y) ,z) ( C) y. operator * (operator (x, y) ,z) ( D) x. operator (operator * (x, y) ) 26 函数模板 :template class T T add(T x, T y) return x y; 下列对 add函数的调用不正确的是 ( A) add (1,2) ( B) add int (1,2) ( C) add(1.0,2) ( D) add(1.0,2.0) 27 对于语句 cout setfill(*) setw(10)
11、1 setfill(*) setw(2) 2;的输出结果是 ( A) * * * * * * * * * 1 * 2 ( B) * * * * * * * * 12 ( C) * * * * * * * 1 * 2 ( D) 12 * * * * * * * * 28 this指针是 C语言实现什么的一种机制 ? ( A)抽象 ( B)封装 ( C)继承 ( D)重载 29 有如下程序 : #include iostream.h int func(int a, int b) return(a b) ; void main( ) int x 2,y 5,z 8,r; r func(func(x,
12、y) ,z) ; cout r; 该程序的输出的结果是 ( A) 12 ( B) 13 ( C) 14 ( D) 15 30 下列程序的输出结果是 #include iostream.h class Myclass public:Myclass(int i 0,int j 0) x i; y j; void show( ) cout “x “ x “ “ “y “ y endl; void show( ) constcout “x “ “ “ “y “ y endl; privated: int x; int y; ; void main( ) Myclass my1(3,4) ; const
13、 my2(7, 8) ; my1.show( ) ;my2.show( ) ; ( A) x 4,y 3;x 7,y 8 ( B) x 3,y 4;x 7,y 8 ( C) x 7,y 8;x 4,y 3 ( D) x 8,y 7;x 7,y 8 31 下列描述中,抽象类的特性是 ( A)可以说明虚函数 ( B)可以定义友元函数 ( C)可以进行构造函数重载 ( D)不能说明其对象 32 在 C语言中, 打开一个文件就是将这个文件与一个什么建立关联 ? ( A)流 ( B)类 ( C)结构 ( D)对象 33 下列程序的运行结果是 #include iostream.h void fun(in
14、t * a,int * b) int * k; k a; a b; b k; void main( ) int a 3,b 6, * x fun(x, y) ; cout a “ “ b; ( A) 6 3 ( B) 3 6 ( C)编译出错 ( D) 0 0 34 执行语句 for(i 1;i 4;) ;后 ,变量 i的值是 ( A) 3 ( B) 4 ( C) 5 ( D)不定 35 判断 char型变量 c是否为小写字母的正确表达式是 ( A) a c z ( B) (c A) 则表达式 a b的值为 _。 43 下面程序的输出结果为 _。 #include iostream.h voi
15、d main( ) in num 0, i 8; do i ; num ; while( i) ; cout num endl; 44 通过使用 new和 delete两个运算符进行的分配为 _存储分配。 45 下面程序的运行结果为 _。 #include iostream.h void fun(int x 0, int y 0) cout x y; void main( ) fun(5) ; 46 C语言支持的两种多态性分别是编译时的多态性和 _的多态性。 47 重载的运算符保持其原有的 _、优先级和结合性不变。 48 cout. put(A) ;,还可以表示为 _。 国家二级( C+)笔试
16、模拟试卷 154答案与解析 1 【正确答案】 A 【试题解析】 线性表是一种线性结 构,数据元素在线性表中的位置只取决于它们自己的序号,即数据元素之间的相对位置是线性的 ;栈、队列、线性链表实际上也是线性表,故也是线性结构 ;树是一种简单的非线性结构。 2 【正确答案】 C 【试题解析】 循环链表就是将链表的最后一个节点指向链表头节点 (或第一个节点 ) ,即 p- next head。 3 【正确答案】 B 【试题解析】 当数据表 A中每个元素距其最终位置不远,说明数据表 A按关键字值基本有序,在待排序序列基本有序的情况下,采用插入排序所用时间最少,故答案为选项 B) 。 4 【正确答案】
17、A 【试题解析】 程序设计应该简单易懂,语句构造应该简单直接,不应该为提高效率而把语句复杂化。 5 【正确答案】 D 【试题解析】 结构化分析的常用工具有数据流图、数据字典、判定树和判定表。而 PAD图是常见的过程设计工具中的图形设计工具。 6 【正确答案】 D 【试题解析】 软件需求是指用户对目标软件系统在功能、行为、性能、设计约束等方面的期望。 7 【正确答案】 D 【试题解析】 PAD、 PFD、 N-S和 HIPO为详细设计过程中的过程设计工具中的图形 工具。 DFD、 DD (数据字典 ) 、判定表和判定树是需求分析中的结构化分析工具。 8 【正确答案】 C 【试题解析】 此题属于记
18、忆性的题目, NULL是指未知的值或无任何值。 9 【正确答案】 C 【试题解析】 一旦数据库中的数据遭受破坏,需要及时进行恢复, RDBMS一般都提供此种功能,并由 DBA负责执行故障恢复功能。 10 【正确答案】 C 【试题解析】 数据模型所描述的内容有 3个部分,它们是数据结构、数据操作和数据约束。其中,数据模型中的数据结构主要描述数据的类型、内容、性 质,以及数据库的联系等 ;数据操作主要是描述在相应数据结构上的操作类型与操作方式。 11 【正确答案】 A 【试题解析】 C语言标识符只能由数字、字母和下画线组成,并且只能以字母和下画线为开头。 12 【正确答案】 D 【试题解析】 C语
19、言是一种面向过程的程序设计语言,而 C语言是一种面向对象的设计语言, C语言是 C语言的超集,它包含了 C语言的所有语言特性,并进行了扩充。 13 【正确答案】 A 【试题解析】 该字符串中包含的字符是 t (跳格符 ) 、 “/(双 引号 ) 、065(ASCII值为八进制数 065,也即十进制数为 51的字符 ) 、 xff(ASCII值为十六进制数 ff,也即十进制数为 255的字符 ) 、 n(换行符 ) 。 14 【正确答案】 C 【试题解析】 在 C语言中,实数有两种形式表示,即十进制数形式和指数形式,在指数形式中, e3、 2.1e3.5、 .e3、 e等都是不合法的指数形式。再
20、如 123e3或 123E3都代表 123乘以 10的 3次方。注意,字母 e的前面必须有数字,且 e的后面必须是整数。 15 【正确答案】 B 【试题解析】 dowhile 语句的一般格式为 do循环体语句 while(表达式 ) ;,先执行循环体语句一次,再判断表达式的值,若为真则继续执行循环,否则终止循环。本题中,先执行 x x 2,即为 1。判断表达式的值, !( x) 为真, x 0,继续循环。再次执行循环体语句后, x 2,此时表达式的值为 0,结束循环。 16 【正确答案】 D 【试题解析】 选项 A) for循环可以用于循环次数不确定的情况 ;选项 B) for循环是先判断表达
21、式,后执行循环体语句 ;选项 C) 在 for循环中,可以用 break语 句跳出循环体,从而接着执行循环体后面的语句。 17 【正确答案】 B 【试题解析】 p表示的是变量 a的地址,定义后 * p表示的是变量 a的值。 18 【正确答案】 D 【试题解析】 x数组共有 10个元素,在花括号内只提供 3个初值,这表示只给前面的 3个成员赋值,后 7个元素的值为 0,所以,一共有 20个字节。 19 【正确答案】 B 【试题解析】 本题考查函数中变量的作用范围,在主函数中给变量 x、 y、 z赋值,然后将其作为实参传递给了函数 fun( ) ,虽然在函数 fun( ) 中改变了 这 3个变量的
22、值,但只是同名的局部变量,不影响函数中变量的值,所以在调用函数 fun( ) 结束后,主函数 3个变量的值未改变。 20 【正确答案】 D 【试题解析】 在 C语言中,所有的函数都是平行的,即在定义函数时是互相独立的,一个函数并不从属于另一个函数,即函数不能嵌套定义,但可以互相调用。但是不能调用 main( ) 函数。 21 【正确答案】 A 【试题解析】 const int * p;是只能改变指针地址, int * const p;是只能改变 * p的内容, const int * const p;是指针的地址和 * p的内容都不能改变, int * p;是两者都能改变。 22 【正确答案】
23、 A 【试题解析】 在 C中定义数组时,数组的范围参数在静态定义时必须是一个常数,而在动态分配内存定义时可以是常数,也可以是一个赋了值的参数。故选项 A) 是错误的定义方法。 23 【正确答案】 C 【试题解析】 类 A、类 B中都有 showa( ) 函数,类 C继承后再次重写 showa( ) 函数就解决了继承的二义性,这时 c. showa( ) 函数显示的就是类 C中的 showa ( ) 的值。 24 【正确答案】 C 【试题解析】 基类和其继承类同时出现同名函数,则在继承类中实现对象中调用该函数是使用继承类中的定义,这种情况下是不会产生二义性的。 25 【正确答案】 A 【试题解析
24、】 C中用成员函数重载 x * y为 :x. operator * (y) ,用友元函数重载 x * y为 :operator * (x, y) ,用成员函数重载 x y为 :x. operator (y) ,用友元函数重载 x y为 :operator (x, y) 。 26 【正确答案】 C 【试题解析】 对于 template class T T add (T x, T y) return x y; 调用时可以省略模板实参的声明,但是要求 x和 y的数据类型必须是一样的。 27 【正确答案】 A 【试题解析】 C语言中 setfill的意思是在空格的地方填上 serfill函数中的参数字
25、符, setw的意思是设置整个输出字符串的字符个数,本题中用。来代替空格。 28 【正确答案】 B 【试题解析】 this指针是 C语言实现封装的一种机制,它将对象和该对象 调用的成员函数连接在一起,在外部看来,每一个对象都拥有自己的函数成员。 29 【正确答案】 D 【试题解析】 在语句 r func(func(x, y) ,z) ;中, fun(x, y) 是一次调用函数,它的值作为 func另一次调用的实参。注意本题调用两次函数。 30 【正确答案】 A 【试题解析】 在 Myclass类中定义了两个同名函数 show,其中一个是常成员函数。在 main函数中定义了两个对象 my1、 m
26、y2,其中对象 my2是常对象。这两个对象调用成员函数 show时,通过对象 my1调用 的是没有用 const修饰的一般成员函数,而通过对象 my2调用的是 const修饰的常成员函数。 31 【正确答案】 D 【试题解析】 带有纯虚函数的类称为抽象类,抽象类中的纯虚函数没有具体的定义,所以不能说明抽象类的对象。 32 【正确答案】 A 【试题解析】 C的 I/O系统是通过一种称为流的机制来实现文件和控制台的I/O操作的。简单地说,在 C中,输入 /输出操作是通过流来完成的。而文件流以磁盘文件及其他可按文件方式进行管理的外部设备为输入 /输出对象。每个文件流都应当与一个打开的文件 相联系 ;
27、关闭一个文件就是取消这种联系。 33 【正确答案】 B 【试题解析】 函数的参数不仅可以是整型、实型、字符型等数据,还可以是指针类型。它的作用是将一个变量的地址传送到另一个函数中去。在本题解析中,我们试图将这一问题解释清楚 ! 大家可以考虑一下利用下面这函数可不可以实现 a和 b的互换。 swap(int x, int y) int; t X; x y; y t; 如果在 main函数中用 swap(a, b) ,会有什么结果 呢 ?在函数调用开始时, a的值传送给 x, b的值传递给 y。执行完 swap( ) 函数后, x和 y的值是互换了,但 main( ) 函数中的 a和 b并未互换。
28、也就是说由于 “单向传递 ”的 “值传递 ”方式,形参值的改变无法传递给实参。 为了使在函数中改变了的变量值能被 main( ) 函数所用,不能采取上述办法,而应该用指针变量作函数参数。在函数执行过程中使指针变量所指向的变量值发生变化,函数调用结束后,这些变量值的变化被保留下来,这样就实现了调用函数改变变量的值,在主调函数中使用这些改变了的值的目的。 swap(int * p1,int * p2) int p; p * p1; * p1 * p2; * p2 p; 注意交换 * p1和 * p2的值是如何实现的,如果写成下面这样就有问题了 ! swap(int * p1,int * p2) i
29、nt * p; * p p1;/ * 此语句有问题 * / * p1 * p2; * p2 * p; * p1就是 a,是整型变量。而 * p是指针变量 p所指向的变量,但 p中并无确切地址,用 * p可能会破坏系统的正常工作状态。应该将。 p1的值赋给一个整型变量,用整型变量作为过渡变量实现, p1和 * p2的交换。 34 【正确答案】 C 【试题解析】 for语句中的表达式可以部分或全部省略,但两个 “;”不能省略,若3个表达式均省略,会因为缺少条件判断,导致循环无限执行,而形成死循环。本题中当 i的值为 5的时候,循环终止。 35 【正确答案】 D 【试题解析】 字符型数据在计算机内部
30、是以 ASCII码存储的,英文大写字母和小写字母在 ASCII码表中都是连续的。大写字母 A Z是从 65 90,小写字母a z是从 97 122。所以只要变量 c大于等于 a并且小于等于 z就能保证其为小写字母。 36 【正确答案】 非线性结构 【试题解析】 数据的逻辑结构有线性结构和非线性结构两大类。 37 【正确答案】 相邻 【试题解析】 常用的存储表示方法有 4种,顺序存储、链式存储、索引存储、散列存储。其中,顺序存储的方法是把逻辑上相邻的节点存储在物理位置也相邻的存储单元中。 38 【正确答案】 可重用性 【试题解析】 本题考查了继承的优点 :相似的对象可以共享程序代码和数据结构,从
31、而大大减少了程序中的冗余,提高软件的可重用性。 39 【正确答案】 软件开发 【试题解析】 基于软件工程的目标,软件工程的理论和技术性研究的内容主要包括 :软件开发技术和软件工程管理。软件开发技术包括 :软件开发方法学、开发过程、开发工具和软件工程环境,其主体内容是软件开发方法学。软件工程管理包括 :软件管理学、软件工程经济学,以及软件心理学等内容。 40 【正确答案】 集合 【试题解析】 在关系操作中,所有操作对象与操作结果都是关系。而关系定义为元数 相同的元组的集合。因此,关系操作的特点是集合操作。 41 【正确答案】 编译 【试题解析】 C语言是以编译方式实现的高级语言, C语言程序的实
32、现,必须要使用某种 C语言的编译器对程序进行编译。 42 【正确答案】 2 【试题解析】 因为运算符和都是右结合的且优先级高于双目运算符,所以上式的运算顺序为先 a, b,再 a b,最后 a自加 1。 43 【正确答案】 4 【试题解析】 本题考查的是考生分析简单循环结构的能力。大体过程为第 1次进入循环, i变成 7, num变为 1, i变为 6;第 2次进入循环, i变成 5, num变为2, i变为 4;第 3次进入循环, i变成 3, num变为 3, i变为 2;第 4次进入循环, i变成 1, num变为 4, i变为 0,循环结束。 44 【正确答案】 动态 【试题解析】 本
33、题考查的是对动态分配内存的掌握,在 C语言中,使用关键字 new和 delete进行动态内存申请和释放。 45 【正确答案】 50 【试题解析】 本题考查的是函数的默认参数,如果一个函数中有多个参数,则默认参数应从右至左逐个定义,所以题目中 x使用参数 5, y使用默认参 数 0。 46 【正确答案】 运行时 【试题解析】 本题考查的是多态性的概念,多态性主要是指发出同样的消息而被不同类型的对象接收时导致完全不同的行为,它一般分为编译时的多态性和运行时的多态性,比如函数重载和虚函数。 47 【正确答案】 操作符个数 【试题解析】 本题考查的是运算符重载的概念,用户重新定义的运算符不改变原运算符的优先性和结合性,也不改变运算符的语法结构,也就是说重载运算符不会产生新的运算符。 48 【正确答案】 cout A; 【试题解析】 本题考查的是 C语言的流输出操作。 cout是 C语言定义好的输出流对象,其中包括成员函数 put(charc) ,其功能是输出一个字符到屏幕,实际上 c语言中已经重载了操作符 “ ”作为流输出操作符。