1、2012 年 3月国家二级( C+)笔试真题试卷及答案与解析 1 假设线性表的长度为 n,则在最坏情况下,冒泡排序需要的比较次数为 ( A) log2n ( B) n2 ( C) O(n1.5) ( D) n(n-1)/2 2 算法分析的目的是 ( A)找出数据结构的合理性 ( B)找出算法中输入和输出之间的关系 ( C)分析算法的易懂性和可靠性 ( D)分析算法的效率以求改进 3 线性表 L=(a1,a2,a3,ai , an) ,下列说法正确的是 ( A)每个元素都有一个直接前件和直接后件 ( B)线性表中至 少要有一个元素 ( C)表中诸元素的排列顺序必须是由小到大或由大到小 ( D)除
2、第一个元素和最后一个元素外,其余每个元素都有一个且只有一个直接前件和直接后件 4 在单链表中,增加头结点的目的是 ( A)方便运算的实现 ( B)使单链表至少有一个结点 ( C)标识表结点中首结点的位置 ( D)说明单链表是线性表的链式存储实现 5 软件工程的出现是由于 ( A)程序设计方法学的影响 ( B)软件产业化的需要 ( C)软件危机的出现 ( D)计算机的发展 6 软件开发离不开系统环境资源的支持,其中必要 的测试数据属于 ( A)硬件资源 ( B)通信资源 ( C)支持软件 ( D)辅助资源 7 在数据流图 (DFD) 中,带有名字的箭头表示 ( A)模块之间的调用关系 ( B)程
3、序的组成成分 ( C)控制程序的执行顺序 ( D)数据的流向 8 分布式数据库系统不具有的特点是 ( A)数据分布性和逻辑整体性 ( B)位置透明性和复制透明性 ( C)分布性 ( D)数据冗余 9 关系表中的每一横行称为一个 ( A)元组 ( B)字段 ( C)属性 ( D)码 10 下列数据模型中,具有坚实理论基础 的是 ( A)层次模型 ( B)网状模型 ( C)关系模型 ( D)以上 3个都是 11 下列字符串中可以用作 C+语言标识符的是 ( A) _1234 ( B) foo bar ( C) virtual ( D) 34var 12 关于 C+语言与 C语言关系描述中错误的是
4、( A) C+语言是 C语言的超集 ( B) C+语言对 C语言进行了扩充 ( C) C+语言包含 C语言的全部语法特征 ( D) C+语言与 C语言都是面向对象的程序设计语言 13 下列语句的输出结果 cout strlen(“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 void main() int x=3; do x=x-2; cout x; while(!
5、(-x); 则上面程序段 ( A)输出的是 1 ( B)输出的是 1和 -2 ( C)输出 的是 3和 0 ( D)是死循环 16 下面有关 for循环的正确描述是 ( A) for循环只能用于循环次数已经确定的情况 ( B) for循环是先执行循环体语句,后判断表达式 ( C)在 for循环中,不能用 break语句跳出循环体 ( D) for循环的循环体语句中,可以包含多条语句,但必须用花括号括起来 17 以下程序中调用 cin函数给变量 a输入数值的方法是错误的,其错误原因是 #include void main() int *p,*q,a,b; p= cout “input a:“;
6、cin p; ( A) *p表示的是指针变量 p的地址 ( B) p表示的是变量 a的地址,而不是变量 a的值 ( C) *p表示的是指针变量 p的值 ( D) *p只能用来说明 p是一个指针变量 18 假定 int类型变量占用两个字节,其有定义 int x10=0,2,4;,则数组 x在内存中所占字节数是 ( A) 3 ( B) 6 ( C) 10 ( D) 20 19 有以下程序 #include void fun(int a,int b,int c) a=456,b=567,c=678; void main() int x=10,y=20,z=30; fun(x,y,z); cout x
7、 , y , z endl; 输出结果是 ( A) 30,20,10 ( B) 10,20,30 ( C) 456,567,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 下面的语句中错
8、误的是 ( A) int a=5; int xa; ( B) const int a=5; int xa; ( C) int n=5; int *p=new int a; ( D) const int n=5; int *p=new int a; 23 下面程序的结果是 #include 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 int a; public: C()
9、:a (3) void showa()cout a; ; void main() C c; c.showa(); ( A) 1 ( B) 2 ( C) 3 ( D)程序有错误 24 关于二义性的描述错误的是 ( A)一个子类的两个父类中都有某个同名成员,在子类中对该成员访问可能出现二义性 ( B)解决二义性可以用对成员名的限定法 ( C)父类和子类中同时出现同名函数,也可能存在二义性 ( D)一个子类是从两个父类派生出来的,而这两个父类又有一个共同的父类,对该父类成员进行访问时,可能出现二义性 25 如果表达式 x*y+z 中, “*“是作为友元函数重载的, “+“是作为友元函数重载的 ,则该
10、表达式还可为 ( A) operator+(operator*(x, y),z) ( B) x.operator+(operator*(x, y),z) ( C) y.operator*(operator+(x, y),z) ( D) x.operator+(operator*(x, y) 26 函数模板: template T add(T x,T y)return x+y; 下列对 add函数的调用不正确的 是 ( A) add (1,2) ( B) add(1,2) ( C) add(1.0,2) ( D) add(1.0,2.0) 27 对于语句 cout setfill(*) setw
11、(10) 1 setfill(*) setw (2) 2;的输出结果是 ( A) *1*2 ( B) *12 ( C) *1*2 ( D) 12* 28 this指针是 C+语言实现什么的一种机制 ? ( A)抽象 ( B)封装 ( C)继承 ( D)重载 29 有如下程序 #include int func(int a,int b) return(a+b); void main() int x=2,y=5,z=8,r; r=func(func(x,y),z); cout r; 该程序的输出的结果是 ( A) 12 ( B) 13 ( C) 14 ( D) 15 30 下列描述中,抽象类的特性
12、是 ( A)可以说明虚函数 ( B)可以定义友元函数 ( C)可以进行构造函数重载 ( D)不能说明其对象 31 在 C+语言中,打开一个文件就是将这个文件与一个什么建立关联 ? ( A)流 ( B)类 ( C)结构 ( D)对象 32 下列程序的运行结果是 #include void fun(int *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 33 执行语句 for(i=1;i+ 4;);
13、,后变量 i的值是 ( A) 3 ( B) 4 ( C) 5 ( D)不定 34 判断 char型变量 c是否为小写字母的正确表达式是 ( A) a =c =z ( B) (c =A) a+=(a=8); cout a; 46 若要在 C盘根目录下作为二进制文件打开文件 test.dat,则应该用的语句是_。 46 下面程序的运行结果是 1_和 2_。 #include #define N 10 #define s(x)x*x #define f(x)(x*x) void main() int i1,i2; i1=1000/s(N); i2=1000/f(N); cout i1 “ “ i2;
14、 47 1_ 48 2_。 48 1_是实现 C+语言编译时多态性的机制, 2_是实现 C+语言运行时多态性的机制。 49 1_ 50 2_。 2012 年 3月国家二级( C+)笔试真题试卷答案与解析 1 【正确答案】 D 【试题解析】 假设线性表的长度为 n,则在最坏情况下,冒泡排序要经过 n/2遍的从前往后的扫描和 n/2遍的从后往前的扫描,需要的比较次数为 n(n-1)/2。 2 【正确答案】 D 【试题解析】 算法分析是指对一个算法的运行时间和占用空间做定量的分析,一般计算出相应的数量级,常用时间复杂度和空间复杂度表示。分析算法的目的就是要降低算法的时间复杂度和空间复杂度,提高算法的
15、执行效率。 3 【正确答案】 D 【试题解析】 线性表可以为空表;第一个元素没有直接前件,最后一个元素没有直接后件;线性表的定义中,元素的排列并没有规定大小顺序。 4 【正确答案】 A 【试题解析】 头结点不仅标识了表中首结点的位置,而且根据单链表 (包含头结点 )的结构,只要掌握了表头,就能够访问整个链表,因此增加头结点目的是为了便于运算的实现。 5 【正确答案】 C 【试题解析】 软件工程概念的出现源自于软件危机。为了消除软件危机,通过认真研究解决软件危机的方法,认识到软件工程是使计算机软件走向工程科学的途径,逐步形成了软件工程的概念。 6 【正确答案】 D 【试题解析】 软件测试过程中,
16、辅助资源包括测试用例 (测试数据 )、测试计划、出错统计和最终分析报告等。 7 【正确答案】 D 【试题解析】 数据流相当于一条管道 ,并有一级数据 (信息 )流经它。在数据流图中,用标有名字的箭头表示数据流。数据流可以从加工流向加工,也可以从加工流向文件或从文件流向加工 ,并且可以从外部实体流向系统或从系统流向外部实体。 8 【正确答案】 D 【试题解析】 分布式数据库系统具有数据分布性、逻辑整体性、位置透明性和复制透明性的特点,其数据也是分布的;但分布式数据库系统中数据经常重复存储,数据也并非必须重复存储,主要视数据的分配模式而定。若分配模式是一对多,即一个片段分配到多个场地存放,则是冗余
17、的数据库,否则是非冗余的数据库。 9 【正确答案】 A 【试题解析】 关系表中,每一行称为一个元组,对应表中的一条记录;每一列称为表中的一个属性,对应表中的一个字段; 在二维表中凡能惟一标识元组的最小属性集称为该表的键或码。 10 【正确答案】 C 【试题解析】 关系模型较之格式化模型 (网状模型和层次模型 )有以下方面的优点,即数据结构比较简单、具有很高的数据独立性、可以直接处理多对多的联系,以及有坚实的理论基础。 11 【正确答案】 A 【试题解析】 C+语言标识符只能由数字,字母和下划线组成,并且只能以字母和下划线为开头。 12 【正确答案】 D 【试题解析】 C语言是一种面向过程的程序
18、设计语言,而 C+语言是一种面向对象的设计语言, C+语言是 C语言的超集,它包含了 C语言的所有语言特性,并进行了扩充。 13 【正确答案】 A 【试题解析】 该字符串中包含的字符是 t(跳格符 )、 “(双引号 )、 065(ASCII值为八进制 065,也即十进制为 51的字符 )、 xff(ASC 值为十六进制 ff,也即十进制为 255的字符 )、 n(换行符 )。 14 【正确答案】 C 【试题解析】 在 C+语言中,实数有两种形式表示,即十进制数形式和指数形式,在指数形式中, e3,2.1e3.5,.e3,e等都是不合法的指数形 式。再如 123e3或123E3都代表 123乘以
19、 10的 3次方。注意,字母 e的前面必须有数字,且 e的后面必须是整数。 15 【正确答案】 B 【试题解析】 do-while 语句的一般格式为 do 循环体语句 while(表达式 ); ,先执行循环体语句一次,再判断表达式的值,若为真则继续执行循环,否则终止循环。本题中,先执行 x=x-2,即为 1。判断表达式的值, !(-x)为真, x=0,继续循环。再次执行循环体语句后, x=-2,此时表达式的值为 0,结束循环。 16 【正确答案】 D 【试题解析】 选 项 A)for循环可以用于循环次数不确定的情况;选项 B)for循环是先判断表达式,后执行循环体语句;选项 C)在 for循环
20、中,可以用 break 语句跳出循环体,从而接着执行循环体后面的语句。 17 【正确答案】 B 【试题解析】 p 表示的是变量 a的地址,定义后 *p表示的是变量 a的值。 18 【正确答案】 D 【试题解析】 x数组共有 10个元素,在花括弧内只提供 3个初值,这表示只给前面的 3个成员赋值,后 7个元素的值为 0,所以,一共有 20 个字节。 19 【正确答案】 B 【试题解析】 本 题考查函数中变量的作用范围,在主函数中给变量 x, y, z赋值,然后将其作为实参传递给了函数 fun(),虽然在函数 fun()中改变了这 3个变量的值,但只是同名的局部变量,不影响函数中变量的值,所以在调
21、用函数 fun()结束后,主函数 3个变量的值未改变。 20 【正确答案】 D 【试题解析】 在 C+语言中,所有的函数都是平行的,即在定义函数时是互相独立的,一个函数并不从属于另一个函数,即函数不能嵌套定义,但可以互相调用。但是不能调用 main()函数。 21 【正确答案】 A 【试题解析】 const int *p;是只能改变指针地址, int * const p;是只能改变 *p 的内容, const int *const p;是指针的地址和 *p的内容都不能改变, int *p;是两者都能改变。 22 【正确答案】 A 【试题解析】 在 C+中定义数组时,数组的范围参数在静态定义时必
22、须是一个常数,而在动态分配内存定义时可以是常数,也可以是一个赋了值得参数。故选项A)是错误的定义方法。 23 【正确答案】 C 【试题解析】 类 A,类 B,中都有 showa()函数,类 C继承后再次重写 showa()函数就解决了继承的二义性,这时 c.showa()函数显示的就是类 C中的 showa()的值。 24 【正确答案】 C 【试题解析】 基类和其继承类同时出现同名函数,则在继承类中实现对象中调用该函数是使用继承类中的定义,这种情况下是不会产生二义性的。 25 【正确答案】 A 【试题解析】 C+中用成员函数重载 x*y为: x.operator*(y),用友元函数重载x*y为
23、: operator*(x, y),用成员函数重载 x+y为: x. operator+(y),用友元函数重载 x+y为: operator+(x, y)。 26 【正确答案】 C 【试题解析】 对于 template T add(T x, T y)return x+y; 调用时可以省略模板实参的声明,但是要求 x和 y的数据类型必须是一样的。 27 【正确答案】 A 【试题解析】 C+语言中 setfill 的意思是在空格的地方填上 setfill函数中的参数字符, setw 的意思是设置整个输出字符串的字符个数,本题中用 *来代替空格。 28 【正确答案】 B 【试题解析】 this 指针
24、是 C+语言实现封装 的一种机制,它将对象和该对象调用的成员函数连接在一起,在外部看来,每一个对象都拥有自己的函数成员。 29 【正确答案】 D 【试题解析】 语句 r=func(func(x, y), z);中, fun(x, y)是一次调用函数,它的值作为 func另一次调用的实参。注意本题调用两次函数。 30 【正确答案】 D 31 【正确答案】 A 【试题解析】 C+的 I/O 系统是通过一种称为流的机制来实现文件和控制台的I/O 操作。简单地说,在 C+中,输入输出操作是通过流来完成的。而文件流以磁盘文件以及其 他可按文件方式进行管理的外部设备为输入输出对象。每个文件流都应当与一个打
25、开的文件相联系;关闭一个文件就是取消这种联系。 32 【正确答案】 B 【试题解析】 函数的参数不仅可以是整型、实型、字符型等数据,还可以是指针类型。它的作用是将一个变量的地址传送到另一个函数中去。在本题解析中,我们试图将这一问题解释清楚! 大家可以考虑一下利用下面这函数可不可以实现 a和 b的互换。 swap(int x, int y) int t; t=x; x=y; y=t; 如果在 main 函数中用 swap(a, b),会有甚么结果呢?在函数调用开始时, a的值传送给 x, b 的值传递给 y 。执行完 swap()函数后, x和 y的值是互换了,但main()函数中的 a和 b并
26、未互换。也就是说由于 “单向传递 “的 “值传递 “方式,形参值的改变无法传递给实参。 为了使在函数中改变了的变量值能被 main()函数所用,不能采取上述办法,而应该用指针变量做函数参数。在函数执行过程中使指针变量所指向的变量值发生变化,函数调用结束后,这些变量值的变化被保留下来,这样就实现了调用函数改变变量的值,在主调函数中使用这些改变 了的值的目的。 swap(int *p1, int *p2) int p; p=*p1; *p1=*p2; *p2=p; 注意交换 *p1 和 *p2的值是如何实现的,如果写成下面这样就有问题了! swap(int *p1, int *p2) int *p
27、; *p=*p1; /*此语句有问题 */ *p1=*p2; *p2=*p; *p1就是 a,是整型变量。而 *p是指针变量 p所指向的变量,但 p 中并无确切地址,用 *p可能会造成破坏系统的正常工作状态。 应该将 *p1 的值赋给一个整型变量,用整型变量作为过渡变量实现 *p1 和 *p2的交换。 33 【正确答案】 C 【试题解析】 for语句中的表达式可以部分或全部省略,但两个 “; “不能省略,若三个表达式均省略,会因为缺少条件判断,导致循环无限执行,而形成死循环。本题中当 i的值为 5的时候,循环终止。 34 【正确答案】 D 【试题解析】 字符型数据在计算机内部是以 ASCII码
28、存储的,英文大写字母和小写字母在 ASCII 码表中都是连续的。大写字母 A Z是从 65 90,小写字母a z是从 97 122。 所以只要变量 c大于等于 a并且等于小于 z就能保证其为小写字母。 35 【正确答案】 D 【试题解析】 所谓算法是指解题方案的准确而完整的描述。是一组严谨地定义运算顺序的规则 并且每一个规则都是有效的,且是明确的,此顺序将在有限的次数下终止。算法不等于程序,也不等于计算方法。设计算法时不仅要考虑对数据对象的运算和操作,还要考虑算法的控制结构。 36 【正确答案】 时间复杂度和空间复杂度 37 【正确答案】 SQR(x2+y2)/(a+b) 38 【正确答案】
29、软件工程学 39 【 正确答案】 数据模型 【试题解析】 数据模型是对客观事物及联系的数据描述,它反映了实体内部及实体与实体之间的联系。因此,数据模型是数据库设计的核心。 40 【正确答案】 关系 【试题解析】 在关系模型中,把数据看成一个二维表,每一个二维表称为一个关系。表中的每一列称为一个属性,相当于记录中的一个数据项,对属性的命名称为属性名;表中的一行称为一个元组,相当于记录值。 41 【正确答案】 编译 【试题解析】 C+语言程序开发的基本步骤是编辑、编译、链接、运行和调试。 42 【正 确答案】 1 【试题解析】 计算表达式 !a b,先计算 !a,因 a的值为 10, !a 的值为
30、 0。关系表达式 0 20为真,所以表达式 !a 43 【正确答案】 友元函数 【试题解析】 C+语言中友元类中的函数都是另一个类的友元函数。 44 【正确答案】 +x 【试题解析】 C+语言中用成员函数重载 +x为 x.operator+()用友元函数重载+x为: operator+(x)。 45 【正确答案】 16 【试题解析】 解答本题的关键是要分析清楚表达式 a+=(a=8)中, a的值已经被赋为 8,而不是 0。 46 【正确答案】 ifstream fin(“C:test.dat“ ,ios_binary);ifstream 【试题解析】 C+中打开文件有两种方式 ifstream
31、 fin(“test.dat“); ifstream fin;fin.open(“test.dat“);, ios_binary的意义是以二进制文件打开。 47 【正确答案】 1000/10 /b,先计算 !a,因 a的值为 10, !a的值为 0。 48 【正确答案】 关系表达式 0 20为 真,所以表达式 !a。 【试题解析】 对于 define宏定义语句,系统会在编译前进行替换。本题替换过程如下: i1=1000/s(N) i1=1000/s(10) i1=1000/10*10 i1=1000 i2=1000/f(N) i2=1000/f(10) i2=1000/(10*10) i2=10 49 【正确答案】 静态联编静态绑定 50 【正确答案】 动态联编动态绑定 【试题解析】 C+语言编译时多态性的机制是静态绑定,实现 C+语言运行时多态性 的机制是动态绑定。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1