1、国家二级( C+)笔试模拟试卷 81及答案与解析 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)数据流图完成的 ( B)
3、数据字典完成的 ( 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 st
4、rlen(“t“065xffn“); ( A) 5 ( B) 14 ( C) 8 ( D)输出项不合法,无正常输出 14 在 C+语言中,不合法的实型数据的是 ( A) 0.123 ( B) 123e3 ( C) 2.1e3.5 ( D) 123 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= y=j; void show( )cout “x=“ x “ “ “y=“ y endl; void show( )constcout “x=“ “ “ “y=“ y endl; privated: i
6、nt x; int y; ; void main( ) Myclass my l (3,4); const my2(7,8); my l 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)流 (
7、B)类 ( C)结构 ( D)对象 33 下列程序的运行结果是 #include iostream.h void fun(int *a, int *B) int *k; k=a; a=b; b=k; void main( ) int a=3, b=6, *x=);,后变量 i的值是 ( A) 3 ( B) 4 ( C) 5 ( D)不定 35 判断 char型变量 c是否为小写字母的正确表达式是 ( A) a =c =2 ( B) (c = ) int x; void funA(int void funB(int,int int main() int first; int second=5;
8、x=6; funA(first,second); funB(first,second); cout first “ “ second “ “ x endl; return 0; void funA(int first=a+b; a=2*b; b=first+4; void funB(int u,int second=x; v=second+4; x=u+v; 44 下面程序的运行结果是【 】。 #include iostream using namespace std; class count static int n; public: count() n+; static int test(
9、) for(int i=0;i 4;i+) n+; return n; ; int count:n = O; int main() cout count: test() “ “; count c1, c2; cout count: test() endl; return 0; 45 以下程序运行后的输出结果是【 】。 #include iostream #include string using namespace std; class Y; class X iht x; char *strx; public: X(int a,char *str) x=a; strx=new charstrl
10、en(str)+1; strcpy(strx,str); void show(Y ; class Y private: iht y; char *stry; public: Y(int b,char *str) y=b; stry=new charstrlen(str)+ 1 ; strcpy(stry, str); friend void X:show(Y ; void X:show(Y cout ob.stry endl; int main() X a(10,“stringX“); Y b(20,“stringY“); a.show(b); return 0; 46 在下面横线上填上适当的
11、语句,完成程序。 #include iostream using namespace std; class Base int x; public: Base(int i) x=i; Base() ; class Derived: public Base public: _ 完成类 Derive 构造函数的定义 ; int main() Derived Obj; return 0; 在横线处应填入的语句是【 】。 47 虚函数必须是类的【 】。 48 【 】允许用户为类定义一种模式,使得类中的某些数据成员及某些成员函数的返回值能取任意类型。 49 有以下程序: #include iostream
12、 using namespace std; class Base public: Base() x=0; int x; ; class Derivedl: virtual public Base public: Derived1() x=10; ; class Derived2: : virtual public Base public: Derived2() x=20; ; class Derived: public Derived1,protected Derived2 ; int main() Derived obj; cout obj.x endl; return 0; 该程序运行后的
13、输出结果是【 】。 50 下面是复数类 complex的定义,其中作为友元函数重载的运算符 “-”的功能是将参数对象的实部减 1,然后返回对该对象的引用;请补充完整。 class complex private: int real; iht imag; public: complex(int r=0,int i=0):real(r),imag(i) void show() cout real (imag 0?“-“ :“+“) imag i; 【 】 ; ; complex return c; 国家二级( C+)笔试模拟试卷 81答案与解析 1 【正确答案】 A 【试题解析】 线性表是一种线性
14、结构,数据元素在线性表中的位置只取决于它们自 己的序号,即数据元素之间的相对位置是线性的;栈、队列、线性链表实际上也是线性表,故也是线性结构;树是一种简单的非线性结构。 2 【正确答案】 C 【试题解析】 循环链表就是将链表的最后一个结点指向链表头结点 (或第一个结点 ),即 p- next =head。 3 【正确答案】 B 【试题解析】 当数据表 A中每个元素距其最终位置不远,说明数据表 A按关键字值基本有序,在待排序序列基本有序的情况下,采用插入排序所用时间最少,故答案为选项 B。 4 【正确答案】 A 【试题解析】 程序设计应 该简单易懂,语句构造应该简单直接,不应该为提高效率而把语句
15、复杂化。 5 【正确答案】 D 【试题解析】 结构化分析的常用工具有数据流图、数据字典、判定树和判定表。而 PAD图是常见的过程设计工具中的图形设计工具。 6 【正确答案】 D 【试题解析】 软件需求是指用户对目标软件系统在功能、行为、性能、设计约束等方面的期望。 7 【正确答案】 D 【试题解析】 PAD、 PFD、 N-S和 HIPO为详细设计过程中的过程设计工具中的图形工具。 DFD、 DD (数据字典 )、判定表和判定树是需求 分析中的结构化分析工具。 8 【正确答案】 C 【试题解析】 此题属于记忆性的题目, NULL是指未知的值或无任何值。 9 【正确答案】 C 【试题解析】 一旦
16、数据库中的数据遭受破坏,需要及时进行恢复, RDBMS一般都提供此种功能,并由 DBA负责执行故障恢复功能。 10 【正确答案】 C 【试题解析】 数据模型所描述的内容有 3个部分,它们是数据结构、数据操作和数据约束。其中,数据模型中的数据结构主要描述数据的类型、内容、性质,以及数据库的联系等;数据操作主要是描述在相应数据结构 上的操作类型与操作方式。 11 【正确答案】 A 【试题解析】 C+语言标识符只能由数字,字母和下划线组成,并且只能以字母和下划线为开头。 12 【正确答案】 D 【试题解析】 C语言是一种面向过程的程序设计语言,而 C+语言是一种面向对象的设计语言, C +语言是 C
17、语言的超集,它包含了 C语言的所有语言特性,并进行了扩充。 13 【正确答案】 A 【试题解析】 该字符串中包含的字符是 t (跳格符 )、 “(双引号 )、 065(ASCII值为八进制 065,也即十进 制为 51的字符 )、 xff(ASCII值为十六进制 ff,也即十进制为 255的字符 )、 n(换行符 )。 14 【正确答案】 C 【试题解析】 在 C+语言中,实数有两种形式表示,即十进制数形式和指数形式,在指数形式中, e3, 2.1e3.5, .e3, e等都是不合法的指数形式。再如 123e3或 123E3都代表 123乘以 10的 3次方。注意,字母 e的前面必须有数字,且
18、 e的后面必须是整数。 15 【正确答案】 B 【试题解析】 do-while语句的一般格式为 do循环体语句 while(表 达式 );先执行循环体语句一次,再判断表达式的值,若为真则继续执行循环,否则终止循环。本题中,先执行 x=x-2,即为 1。判断表达式的值, !(-x)为真, x=0,继续循环。再次执行循环体语句后, x=-2,此时表达式的值为 0,结束循环。 16 【正确答案】 D 【试题解析】 选项 Afor循环可以用于循环次数不确定的情况;选项 Bfor循环是先判断表达式,后执行循环体语句;选项 C在 for循环中,可以用 break语句跳出循环体,从而接着执行循环体后面的语句
19、。 17 【正确答案】 B 【试题解析】 p表示的是变量 a的地址,定义后 *p表示的是变量 a的值。 18 【正确答案】 D 【试题解析】 x数组共有 10个元素,在花括弧内只提供 3个初值,这表示只给前面的 3个成员赋值,后 7个元素的值为 0,所以,一共有 20个字节。 19 【正确答案】 B 【试题解析】 本题考查函数中变量的作用范围,在主函数中给变量 x, y, z赋值,然后将其作为实参传递给了函数 fun(),虽然在函数 fun()中改变了这 3个变量的值,但只是同名的局部变量,不影响函数中变量的值,所以在调用函数 fun()结束后,主函数 3个变量 的值未改变。 20 【正确答案
20、】 D 【试题解析】 在 C+语言中,所有的函数都是平行的,即在定义函数时是互相独立的,一个函数并不从属于另一个函数,即函数不能嵌套定义,但可以互相调用。但是不能调用 main()函数。 21 【正确答案】 A 【试题解析】 const int*p;是只能改变指针地址, int * const p;是只能改变 *p的内容, const int* const p;是指针的地址和 *p的内容都不能改变, int * p;是两者都能改变。 22 【正确答案】 A 【 试题解析】 在 C+中定义数组时,数组的范围参数在静态定义时必须是一个常数,而在动态分配内存定义时可以是常数,也可以是一个赋了值得参数
21、。故选项A是错误的定义方法。 23 【正确答案】 C 【试题解析】 类 A,类 B,中都有 showa()函数,类 C继承后再次重写 showa()函数就解决了继承的二义性,这时 c.showa()函数显示的就是类 C中的 showa()的值。 24 【正确答案】 C 【试题解析】 基类和其继承类同时出现同名函数,则在继承类中实现对象中调用该函数是使用继承类中的定义,这 种情况下是不会产生二义性的。 25 【正确答案】 A 【试题解析】 C+中用成员函数重载 x*y为: x.operator * (y),用友元函数重载x*y为: operator *(x, y),用成员函数重载 x+y为: x
22、.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的意思是在空格的地方填上 setfill函数中的参数字符, setw的意思是设置整个输出字符串的字符个数,本题中用 *来代替空格。 28 【正确答案】 B 【试题解析】 this指针是 C+语言实现封装的一种机制,它将对象和该对象调用的成
23、员函数连接在一起,在外部看来,每一个对象都拥有自己的函数成员。 29 【正确答案】 D 【试题解析】 语句 r=func(func(x, y), z);中, fun(x, y)是一次调用函数,它的值作为 func另一次调用的实参。注意本题调用两次函数。 30 【正确答案】 A 【试题解析】 在 Myclass类中定义了两个同名函数 show,其中一个是常成员函数。在 main函数中定义了两个对象 myl, my2,其中对象 my2是常对象。这两个对象调用成员函数 show时,通过对象 myl调用的是没有用 const修饰的一般成员函数,而通过对象 my2调用的是 const修饰的常成员函数。
24、31 【正确答案】 D 【试题解析】 带有纯虚函数的类称为抽象类,抽象类中的纯虚函数 没有具体的定义,所以不能说明抽象类的对象。 32 【正确答案】 A 【试题解析】 C+的 I/O系统是通过一种称为流的机制来实现文件和控制台的I/O操作。简单地说,在 C+中,输入输出操作是通过流来完成的。而文件流以磁盘文件以及其他可按文件方式进行管理的外部设备为输入输出对象。每个文件流都应当与一个打开的文件相联系;关闭一个文件就是取消这种联系。 33 【正确答案】 B 【试题解析】 函数的参数不仅可以是整型、实型、字符型等数据,还可以是指针类型。它的作用是将一个变量的地址传送到另一个函 数中去。在本题解析中
25、,我们试图将这一问题解释清楚 ! 大家可以考虑一下利用下面这函数可不可以实现 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并未互换。也就是说由于 “单向传递 ”的 “值传递 ”方式,形参值的改变无法传递给实参。 为了使在函数中改变了的变量值能被 main()函数所用,不能采取上述办法,而应该用指针变量做函数参数。在函数执行过程中使指针
26、变量所指向的变量值发生变化,函数调用结束后,这些变量值的变化被保留下来,这样就实现了调用函数改变变量的值,在主调函数中使用这些改变了的值的目的。 swap(int *p1, int *p2) int p; p= *p1; *p1=*p2; *p2=p; 注意交换 *p1和 *p2的值是如何实现的,如果写成下面这样就有问题了 ! swap(int *p1, int *p2) int *p; *p=*p1; /*此语句有问题: */ *p1=*p2; *P2=*p; *p1就是 a,是整型变量。而 *p是指针变量 p所指向的变量,但 p中并无确切地址,用 *p可能会造成破坏系统的正常工作状态。应该
27、将 *p1的值赋给一个整型变量,用整型变量作为过渡变量实现 *p1和 *p2的交换。 34 【正确答案】 C 【试题解析】 for语句中的表达式可以部分或全部省略,但两个 “;”不能省略,若3个表达式均省略,会因为缺少 条件判断,导致循环无限执行,而形成死循环。本题中当 i的值为 5的时候,循环终止。 35 【正确答案】 D 【试题解析】 字符型数据在计算机内部是以 ASCII码存储的,英文大写字母和小写字母在 ASCII码表中都是连续的。大写字母 AZ是从 6590,小写字母 az是从 97122。所以只要变量 c大于等于 a并且等于小于 z就能保证其为小写字母。 36 【正确答案】 有穷性
28、 【试题解析】 算法是指解题方案的准确而完整的描述。它有 4个基本特征,分别是可行性、确定性、有穷性和拥有足够的情报。 37 【正确答案】 log2n 【试题解析】 对于长度为 n的有序线性表,在最坏情况下,二分查找只需要比较log2n次,而顺序查找需要比较 n次。 38 【正确答案】 对象 【试题解析】 将属性、操作相似的对象归为类,也就是说,类是具有共同属性、共同方法的对象的集合。 39 【正确答案】 软件生命周期 【试题解析】 软件产品从考虑其概念开始,到该软件产品不能使用为止的整个时期都属于软件生命周期。一般包括可行性研究与需求分析、设计、实现、测试、交付使用以及维护等活动。 40 【
29、正确答案】 关 系模型 【试题解析】 数据库管理系统是位于用户与操作系统之间的一层系统管理软件,是一种系统软件,是用户与数据库之间的一个标准接口。其总是基于某种数据模型,可以分为层次模型、网状模型和关系模型。 41 【正确答案】 i =100或者 i 101 【试题解析】 本题考核循环语句。在上述题中,我们看到 s=s+i,又有 i+,它的含义是当 i满足条件时, i自加 1,然后再与前面的 s相加,值赋给 s。所以 for语句中,缺少上限表达式。因为是求 1 100的和,所以 i满足的条件为 i =100或者 i 101。 42 【正确答案】 MyClass() 【试题解析】 本题考核析构函
30、数的定义。 C+中析构函数名是在类名前加上求反符号;析构函数不能指定返回类型,它隐含有返回值,由系统内部使用;析构函数没有参数,因此析构函数不能重载,一个类中只能定义一个析构函数。 43 【正确答案】 10 10 20 【试题解析】 本题考核函数的引用传递。 “引用 ”实际上是给一个已知变量起个别名,对引用的操作也就是对被它引用的变量的操作。函数 funA的功能是将第二个实参的值乘以 2再赋值给第一个实参 (通过引用传递实现 ),函 数 funB的功能是将全局变量 x加上 4再赋值给第二个实参,同时 x等于第一个实参与第二个实参相加的和。 44 【正确答案】 410 【试题解析】 本题主要考查
31、 C+类中静态数据成员的使用。题目程序首先定义了类 count,其内部含有 private 类型数据成员 static int n;同时含有 public 类型构造函数 count()和静态成员函数 static int test(),这两个函数的功能分别是为对象申请系统资源并将静态数据成员 n加 1和将静态数据成员 n加 4。主函数前,程序将静态数据成员 n初始化 为 0,该数据成员为所有类 count 的对象所共有的数据成员;主函数中程序首先执行静态成员函数 test() (由于 test 声明为 static,因此其调用时无需通过具体对象 ),其执行过程中,静态数据成员 n应该加 4变成
32、 n: 4,因此此处输出为 4;此后程序创建对象 c1和 c2,由于在每次创建过程中都要调用构造函数 count(),而每次调用 count()函数后,静态数据成员 n值都会加 1。因此,创建两个对象之后, n值变为 n=6:再次执行 test()函数后, n的值再次加 4,因此变为 n=6+4=10。故程序全部执行后,变量 n值变为 10,而中间程序输出为“410”。 45 【正确答案】 stringX stringY 【试题解析】 本题考核友元函数的应用。该程序中,类 X的成员函数 show ()在类 Y中说明为类 Y的友元函数,因此,在该友元成员 show () 中可以访问类 Y的私有成
33、员 stry。成员函数 show()的功能就是输出类 X的私有成员 strx和 Y对象 ob的私有成员 stry。主函数 main()中定义了 X类的一个对象 a和 Y类的一个对象b,并且都进行了初始化。然后调用对象 a的成员函数 show,输出对象 a中私有成员 strx中的内容和对象 b中私有成员 stry中的内容,即字符串 stringX和stringY。 46 【正确答案】 Derived(int i):Base(i) 【试题解析】 本题考核派生类的构造函数。程序中,类 Derived 是基类 Base 的公有派生。在类 Derived的构造函数应该包括调用基类构造函数使基类的数据成员
34、得以初始化。 47 【正确答案】 成员函数 【试题解析】 本题考核虚函数的概念。 C+中,只有类的成员函数才能说明为虚函数,这是因为虚函数仅适用于有继承关系的类对象,所 以普通函数不能说明为虚函数。 48 【正确答案】 类模板 【试题解析】 本题考核类模板的基本概念。类模板就是一系列相关类的模型或样板,这些类的成员组成相同,成员函数的源代码形式相同,所不同的只是所针对的类型 (成员的类型以及成员函数的参数和返回值的类型 )。对于类模板,数据类型本身成了它的参数,因而是一种参数化类型的类,是类的生成器。类模板中声明的类称为模板类。 49 【正确答案】 20 【试题解析】 本题考核虚基类。本题中,
35、虽然 Derivedl 和 Derived2 都是由共同的基类 x派 生而来的,但由于引入了虚基类,使得它们分别对应基类的不同副本。这时数据成员 x只存在一份拷贝,不论在类 Derived1中修改,还是在类 Derived2中修改,都是直接对这惟一拷贝进行操作。本题程序执行语句 “Derived obj; ”时,就会先调用虚基类 Base 的构造函数,使得 x=0,然后执行类 Derived1 的构造函数使得 x=10,再执行类 Derived2 的构造函数,使得 x=20。最后输出 x 的值为 20。 50 【正确答案】 friend complex& operator-(complex&) 【试题解析】 本题考核运算符重载的定义。程序要填入的是运算符函数 operator -在类 complex 中的声明,运算符 “-”是作为友元函数重载的。根据题目给出的条件,易得到答案。