1、国家二级( C+)笔试模拟试卷 249及答案与解析 1 下列叙述中正确的是 ( A)程序设计过程中的主要工作是编制程序 ( B)程序设计的主要目标是编制出运行结果正确的程序 ( C)不良的程序设计风格会增加程序的复杂性 ( D)上述三种说法都不对 2 数据库设计包括两个方面的设计内容,它们是 ( A)概念设计和逻辑设计 ( B)模式设计和内模式设计 ( C)内模式设计和物理设计 ( D)结构特性设计和行为特性设计 3 下列关于队列的叙述中正确的是 ( A)在队列中只能插入数据 ( B)在队列中只能 删除数据 ( C)队列是先进先出的线性表 ( D)队列是先进后出的线性表 4 下列关于结构化程序
2、设计原则和方法的描述中,错误的是 ( )。 ( A)选用的结构只准许有一个入口和一个出口 ( B)复杂结构应该用嵌套的基本控制结构进行组合嵌套来实现 ( C)不允许使用 GOTO语句 ( D)语言中所没有的控制结构,应该采用前后一致的方法来模拟 5 栈通常采用的两种存储结构是 ( A)线性存储结构和链表存储结构 ( B)散列方式和索引方式 ( C)链表存储结构和数组 ( D) 线性存储结构和非线性存储结构 6 7 下面关于函数模板的表述中不正确的是 ( ) ( A)类模板的成员函数都是模板函数 ( B)类模板本身在编译过程中不会产生任何代码 ( C)类模板只能有虚拟类型的参数 ( D)用类模板
3、定义一个对象时,实参不能省略 8 数据字典是数据库设计需求分析阶段的重要工具之一,其最基本的方法是 ( ) ( A) 数据库定义 ( B)数据通信 ( C)数据定义 ( D)数据维护 9 下列数据结构中,按先进后出原则组织数据的是 ( A)线性链表 ( B)栈 ( C)循环链表 ( D)顺序表 10 关系表中的每一横行称为一个 ( A)元组 ( B)字段 ( C)属性 ( D)码 11 一个类的友元函数或友元类能够通过成员操作符访问该类的 ( )。 ( A)私有成员 ( B)保护成员 ( C)公有成员 ( D)公用成员、保护成员和私有成员 12 在公有派生的情况下,派生类中定义的成员函数只能访
4、问原基类的 ( A)公有成员和私有成员 ( B)私有成员和保护成员 ( C)公有成员和保护成员 ( D)私有成员、保护成员和公有成员 13 下 列字符串中,正确的 C+标识符是 ( A) foo-1 ( B) 2b ( C) new ( D) _256 14 有如下程序: #include iostream using namespace std; long fun(int n) if(n 2) return(fun(n-1)+fun (n-2); else return 2; int main() cout fun(3) end1; return 0; 则该程序的输出结果应该是 ( )。 (
5、 A) 2 ( B) 3 ( C) 4 ( D) 5 15 若执行下面的程序时,从键盘上输入 3和 4,则输出结果是 main( ) int a,b,s; cin a b; s=a; if(a B)s=b; s=s*s; cout s endl; ( A) 14 ( B) 16 ( C) 18 ( D) 20 16 以下选项中合法的实型常数是 ( )。 ( A) 5E2.0 ( B) E-3 ( C) 2E0 ( D) 1.3E 17 下面程序的运行结果是 ( )。 #include iostream.h class base protected: int a; public: base()c
6、out “0”; ; Class basel: Virtual base public: basel()cout “1”; ; Class base2: virtual base public: base2()cout “2”; ) ( A) 0123 ( B) 3120 ( C) 0312 ( D) 3012 18 设有定义 int a 1;float f 1.2;char c a;,则下列表示错误的是 ( A) a; ( B) f-; ( C) c ; ( D) 8 ; 19 下列关于 getline()函数的描述中,错误的是 ( )。 ( A)该函数可以用宋从键盘上读取字符串 ( B)该
7、函数读取的字符串 长度是受限制的 ( C)该函数读取字符串时,遇到终止符时便停止 ( D)该函数中所使用的终止符只能是换行符 20 下面程序的输出结果是 #include iostream.h class A public: A( ) cout “construtA“ endl; VirtualA( ) cout “destructA“ endl; class B: public A ; class C:public A ; class D:public B,public C ; void main( ) D d; ( A) constructA ( B) constructA ( C) co
8、nstructA ( D) constructA destructA constructA constructA constructA destructA constructA constrnctA destructA destructA constructA destructA destructA destructA destrctA destructA destructA 21 有如下程序: #include iostream #include iomanip using namespace std;int main()cout.fill(*);cout left setw(4) 123
9、“OK“ end1;return 0;执行这个程序的输出结果是 ( )。 ( A) 123*OK ( B) 123*OK* ( C) *123OK ( D) *123*OK 22 考虑下 面的函数原型; void f (int a,int b=7,char c=); 下面的函数调用中,不合法的是 ( )。 ( A) f(5) ( B) f(5,8) ( C) f(6, x=1; y=2; try(x,y,z,r); cout r end1; return 0; void try(int x,int y, int z,int r) z = x+y; x = x*x; y = y*y; r = z
10、+x+y; ( A) 18 ( B) 9 ( C) 10 ( D)不确定 25 有如下程序: #include iostream using namespace std; class Base private: char c; piblic: Base(char n): c(n) Base() cout C; ; class DeriVed: public Base private: char c; public: Derived(char n): Base(n+1), c(n) Derived() cout c; ; int main() Derived obj(x); return 0;
11、执行上面的程序将输出 ( A) xy ( B) yx ( C) x ( D) y 26 按照标识符的要求,下列选项中, ( )符号不能组成标识符。 ( A)连接符 ( B)下划线 ( C)大小写字母 ( D)数字字符 27 对下列程序的描述中,正确的是 ( )。 #include iostream using namespace std; int Fun(int, int); int main() cout Fun(5, 50) end1; return 0; int Fun(int x, int y) return x*x+y*y; ( A)该函数定义正确,但函数调用方式错误 ( B)该函数
12、调用方式正确,但函数定义错误 ( C)该函数的定义和调用方式都是正确的 ( D)该函数的定义和调用方式都是错误的 28 有如下程序: #include iostream using namespace std; class shapes protected: int x, y; public: void setvalue(int d, int w=O) x=d; y=w; virtual void disp()=O; ; class square : public shapes public: void disp () cout x*y end1; ; int main ( ) shapes
13、*ptr; square s1; ptr= ptr- setvalue (10, 5) ;ptr- disp(); return 0; 执行上面的程序将输出 ( )。 ( A) 50 ( B) 5 ( C) 10 ( D) 15 29 下述关于 break语句的描述中, ( )是不正确的。 ( A) break语句可用于循环体内,它将退出该重循环 ( B) break语句可用于 switch语句中,它将退出 switch语句 ( C) break语句可用于对体内,它将退出 if语句 ( D) break语句在一个循环体内可以出现多次 30 有以下程序 #include iostream.h f
14、loat fun(int x,int y) return(x+y); void main( ) int a=2, b=5, c=8; coutfun(int)fun(a+c,b) ,a-c) ; 程序运行后的输出结果是 ( A)编译出错 ( B) 9 ( C) 21 ( D) 9 31 下面这个程序的结果是 #include iostream.h class A private: int a; public: void seta( ); int geta( ); ; void A:seta( ) a = 1; int A:geta( ) return a; class ( A) 1 ( B)
15、2 ( C)随机输出 1或 2 ( D)程序有错 32 下列对重载函数的描述中,错误的是 ( )。 ( A)重载函数中不允许使用默认参数 ( B)重载函数中编译是根据参数表进行选择的 ( C)不要使用重载函数来描述毫不相干的函数 ( D)构造函数重载将会给初始化带来多种方式 33 下列程序的输出结果为 ( )。 int fun(int n) if(n=0)return 1; else return n*fun(n-1): return 0; void main() eout func(4) endl; ( A) 1 ( B) 10 ( C) 24 ( D) 11 34 下面对静态数据成员的描述
16、中,正确的是 ( )。 ( A)静态数据成员是类的所有对象共享的数据 ( B)类的每个对象都有自己的静态数据成员 ( C)类的不同对象有不同的静态数据成员值 ( D)静 态数据成员不能通过类的对象调用 35 下列有关函数重载的叙述中,错误的是 ( A)函数重载就是用相同的函数名定义多个函数 ( B)重载函数的参数列表必须不同 ( C)重载函数的返回值类型必须不同 ( D)重载函数的参数可以带有默认值 36 数据流图中父图和子图的平衡是指【 】。 37 下列函数的功能是判断字符串 str是否对称,对称则返回 true,否则返回 false。请在画线处填上适当内容,实现该函数。 bool fun(
17、char*str) int i: 0, j=0; while(strj) (6) ; for(J-; i jstri=strJ; i+, J-); return i (7) J; 38 软件设计模块化的目的是【 】。 39 关系操作的特点是【 】操作。 40 【 】是一种信息隐蔽技术,目的在于将对象的使用者和对象的设计者分开。 41 设在主函数中有以下定义和函数调用语句,且 fun()函数为 void类型,请写出fun()函数的首部 _。 int main() double s1022; int n: . fun (s): . return 0; 42 以下程序的输出结果是【 】。 #incl
18、ude iostream using namespace std; int main() int sum, i; for(sum=0, i=1; i 5; i+)sum+=i; cout sum endl; return 0; 43 阅读下面程序: #include iostream.h template class T class TAdd private: T x, y; public: TAdd(T a, T b) x=a; y=b; T add() return x +y; ; void main( ) TAdd int a(5,6); TAdd double b(2.4,5.8);
19、cout “s1 =“ A. add() “,“; cout “s2=“ B, add() end1; 写出该程序的运行结果:【 】。 44 用以下语句调用库函数 malloc,使字符指针 st指向具有 11个字节的动态存储空间,请填空。 st=(char*)【 】; 45 以下程序的输出结果是【 】。 #include iostream h unsigned frn(ullsigned num) unsi9ned k=1; dok*=num%10; num/=10; while(num); return k; void main() unsigned n=26; cout fun(n) en
20、dl; 46 一个 C+语言程序的开发步骤通常包括编辑、【 】、链接、运行和调试。 47 友元类的所有成员函数都是另一个类的【 】。 48 有以下程序: #include iostream.h classA int x; public: A(int A) x=a; friend class B; ; class B public: void print(AA) a.x-; cout a.x end1; ; void main() Aa(10); Bb; b.print(A) ; 程序执行后的输出结果是【 】。 49 流操作子 _可跳过输入流中的前导空白字符。 50 下列程序在构造函数和析构函数
21、中申请和释放类 的私有成员,请完成该程序。 class Myclas int *x; public: MyClas(int n); MyClas(); ; MyClas: MyClas(intn) 【 】; MyClas: MyClas() 【 】; 国家二级( C+)笔试模拟试卷 249答案与解析 1 【正确答案】 C 【试题解析】 程序设计过程中包括很多步骤,编制 程序只是其中的一步。所以,选项 A错误。程序设计的最终产品是程序,但仅设计和编制出一个运行结果正确的程序是不够的,还应养成良好的程序设计风格。所以,选项 B错误。程序设计的根本目标是要降低程序的复杂性和提高程序的可读性。而程序的
22、复杂性主要来自以下两个方面:问题固有的复杂性;不良的设计风格人为增加了程序的复杂性。所以,良好的设计风格对于降低程序的复杂性是很重要的,并且,好的设计风格是好的程序风格的基本保证。选项 C正确。 2 【正确答案】 A 【试题解析】 数据库设计包括两个方面的设计内容:概念设计和逻辑 设计。选项A正确 3 【正确答案】 C 【试题解析】 队列是指允许在一端进行插入、而在另一端进行删除的线性表,选项 A和选项 B 错误。允许插入的一端称为队尾,允许删除的一端称为队头。在队列中,最先插入的元素将最先能够被删除,反之,最后插入的元素将最后才能被删除。所以,队列又称为 “先进先出 ”或 “后进后出 ”的线
23、性表,它体现了 “先来先服务 ”的原则,选项 C正确,选项 D错误。 4 【正确答案】 C 【试题解析】 限制使用 GOTO 语句是结构化程序设计的原则和方法之一,但不是绝对不允许使用 GOTO 语句。 选项 A)、 B)、 D)为结构化程序设计的原则。 5 【正确答案】 A 6 【正确答案】 A 7 【正确答案】 C 8 【正确答案】 C 9 【正确答案】 B 【试题解析】 栈是限定在一端进行插入与删除的线性表。在栈中,允许插入与删除的一端称为栈顶,而不允许插入与删除的另一端称为栈底。栈顶元素总是最后被插入的元素,从而也是最先能被删除的元素;栈底元素总是最先被插入的元素,从而也是最后才能被删
24、除的元素,即栈是按照 “先进后出 ”或 “后进先出 ”的原则组织数据的。注意:队列组织数据的原则是 “先进 先出 ”或 “后进后出 ”。注意:数据结构中,栈和队列组织数据的原则。 10 【正确答案】 A 【试题解析】 关系表中,每一行称为一个元组,对应表中的一条记录;每一列称为表中的一个属性,对应表中的一个字段;在二维表中凡能惟一标识元组的最小属性集称为该表的键或码。 11 【正确答案】 D 12 【正确答案】 C 【试题解析】 本题考核派生类的定义和访问权限。当类的继承方式为公有继承时,基类的公有成员和保护成员的访问属性在派生类中不变,而基类私有成员不可访问。即基类的公有成员和保护成员分别作
25、为 派生类的公有成员和保护成员,派生类的其他成员可以直接访问它们。 13 【正确答案】 D 【试题解析】 本题考核 C+语言词汇中的标识符的定义。标识符不是一个随意的字符序列,定义标识符时一般应注意如下几点:第一个字符必须是字母或下划线,中间不能有空格;在第一个字母后,可以是任意字母、下划线和数字组成的字符序列;标识符的长度是任意的,但特定的编译系统能够识别的标识符长度是有限的。一般不要超过 31个字符;标识符中大小写字母是有区别的;用户定义标识符时,不要采用系统的保留字。 14 【正确答案】 C 【试题解析】 主函数中调用 fun(3),在 fun内部当 n 2时,递归调用 fun(n-1)
26、+fun(n-2),否则返回 2。所以当 n=3时,调用 fun(2)+fun(1),即返回 2+2,等于4。 15 【正确答案】 B 16 【正确答案】 C 【试题解析】 本题考查实型常数的指数表示法,可以肯定的是指数不能为小数即必须为整数。 由于符号 E前面必须有数字。 D在指数符号后面没有数字,是错误的。 17 【正确答案】 A 【试题解析】 本题考查的是含有虚基类的继承中构造函数的调用顺 序,应该先调用基类的构造函数,接着是按照派生类继承列表的顺序依次调用虚基类的构造函数,最后调用派生类自己的构造函数。 18 【正确答案】 D 【试题解析】 、运算符不能用于常量表达式。 19 【正确答
27、案】 D 【试题解析】 此题考查的是无格式输入输出流对象中的 getline()函数。该函数的功能是允许从输入流中读取多个字符,并且允许指定输入终止字符 (默认是换行符 ),在读取完成后,从读取的内容中删除该终止字符。 20 【正确答案】 B 【试题解析】 类 D继承了类 C和类 B,所以在构造的时候分别构造类 B 和类C。 21 【正确答案】 A 22 【正确答案】 C 23 【正确答案】 A 【试题解析】 continue是跳出了本次循环中尚未执行的语句,重新执行循环,但没有终止循环。注意:注意 break, continue和 goto语句的用法和区别。 24 【正确答案】 D 【试题解
28、析】 本题考核函数调用 (参数的传递 )。本题常见的错误解答是:把x=1, y=2代入到函数 try中,逐步计算出 r=8。最后得到 r的输出值是 8。以下是正确解答,根据程序逐步分析:程序 中定义了一个名为 try的 void型函数,即函数 try没有任何返回值。而 try函数在 main 函数中是以一条独立语句的方式被调用的,且 main 函数最后输出变量 r的值。但在 main 函数中,并没有对变量 r赋值。在 C+语言中,数据只能从实参单向传递给形参,称为按值传递。也就是说,当简单变量作为实参时,用户不能在函数中改变对应实参的值。所以虽然在函数 try中, r的值为 8,但它并不能传递
29、给实参,当然最终的输出肯定是不确定的随机数了。 25 【正确答案】 A 【试题解析】 在 C+中,由于析构函数不能被继承,因 此在执行派生类的析构函数时,基类的析构函数也将被调用。执行顺序是先执行派生类的析构函数,再执行基类的析构函数,其顺序与执行构造函数的顺序正好相反。在此题的程序中,在主函数 main 结束时,派生类 Derived 对象。 obj将被删除,所以就会调用对象的析构函数。先调用派生类的析构函数,输出 x,然后调用基类的析构函数,输出y。 26 【正确答案】 A 【试题解析】 C+规定标识符由大小写字母、数字字符 (0-9)和下划线组成,并且以字母或下划线开始,后跟 0个或多个
30、字母、数字字符或下划线。由此可知,选项 A中 的连接符不能用于组成标识符。 27 【正确答案】 C 【试题解析】 函数定义时要给出函数类型、函数名、函数参数表和函数体。本程序的 Fun()都做到了,所以此函数的定义也是正确的。该函数的定义和调用方式都是正确的。 28 【正确答案】 A 【试题解析】 本题中基类 shapes 是一个抽象类 (拥有纯虚函数 disp()。在主函数中定义了抽象类的对象指针 ptr,并给它赋值派生类 square的对象 s1,然后进行赋值和输出的操作。 29 【正确答案】 C 30 【正确答案】 B 【试题 解析】 本题的运算过程是 fun(int)fun (a+c,
31、 B, a-C, fun(int)fun(10,5), 2-8), fun (int)15.000000, -6), fun(15, -6)=9。 31 【正确答案】 D 【试题解析】 在类 A中有 geta()函数,在类 B 中也有 geta()函数,类 C继承了类A和类 B,这样就产生了二义性,所以程序会出错。 32 【正确答案】 A 【试题解析】 选项 A)中,重载函数中是允许使用默认参数的;为了使重载函数有意义,不要使用重载函数来描述毫不相干的函数 ;重载函数中编译是根据参数表进行选择的,包括参数的个数和类型。 33 【正确答案】 C 【试题解析】 递归函数求阶乘, 4!=24。 34
32、 【正确答案】 A 【试题解析】 静态数据成员是类的所有对象共享的数据。 35 【正确答案】 C 【试题解析】 函数重载的函数名是相同的,而参数列表不同。可行函数的参数个数与调用的函数参数个数相同,或者可行函数的参数可以多一些,但是多出来的函数参数都要有相关的缺省值,即参数的默认值。 36 【正确答案】 子图的输入、输出数据流同父图中的输入 输出完全一致 【试题解析】 数据流图中父图和子图应平衡,即子图的输入、输出数据流同父图中的输入输出完全一致。 37 【正确答案】 j-, = 【试题解析】 首先利用 while循环得到数组的最大下标 j, i为数组的最小下标,然后在 for循环中判断将 j
33、和 i逐次移动并判断对应位置上的元素是否相等。当 i=j时,则表示数组元素为完全对称,返回为 true;否则为不对称,返回为 false。 38 【正确答案】 降低复杂性 【试题解析】 模块化是指解决一个复杂问题时自顶向下逐层把软件系统划分成 若干模块的过程,由此分解来降低复杂性。 39 【正确答案】 集合 【试题解析】 在关系操作中,所有操作对象与操作结果都是关系。而关系定义为元数相同的元组的集合。因此,关系操作的特点是集合操作。 40 【正确答案】 封装 【试题解析】 面向对象技术中包括以下几个基本概念,即对象、类、方法、消息、继承和封装,其中封装是一种信息隐蔽技术,目的在于将对象的使用者
34、对象的和设计者分开。 41 【正确答案】 void fun(b22) 【试题解析】 此题考核的知识点是函数的定义形式与 数组名作为函数的参数。函数头的定义形式是 “存储类型说明符数据类型说明符函数名 (形参列表 )”,此题没有涉及到函数的存储类别。如果函数的参数是数组,其第 1维的长度可以省略,因此本题的函数首部可以写成: void fun(b 22)。 42 【正确答案】 10 【试题解析】 本题程序实现的是计算 1+2+3+4的和,因此最后输出为 10。 43 【正确答案】 s1=11, s2=8.2 44 【正确答案】 malloc(11)或 malloc(sizeof(char)*11
35、) 【试题解析】 malloc,函数的参数可以是一个具体的常数,也可以是一个表达式。在本题中,可以是 malloe(11),也可以借助于 sizeof 运算符来表示。 45 【正确答案】 12 【试题解析】 函数有一个形参 num,循环前变量 k置 1,循环中,表达式nora%10是取 num的个位,将 num的个位值累乘于 k中,然后 num除以 10。循环直至 num为 0结束,这是逐一求出 num十进制表示的各位数字,并累乘于变量k 的循环。函数最后返回 k。函数 fun 的功能是求整数的各位十进数字积。 46 【正确答案】 编译 【 试题解析】 C+语言程序开发的基本步骤是编辑、编译、
36、链接、运行和调试。 47 【正确答案】 友元函数 【试题解析】 C+语言中友元类中的函数都是另一个类的友元函数。 48 【正确答案】 9 【试题解析】 本题考核友元类的应用。在程序中,类 B是类 A的友元类,因此,在类 B的所有成员函数中均可访问类 A的任何成员。在 main()中,先定义类A的一个对象 a(10)和类 B 的一个对象 b。然后通过对象 b调用其成员函数 print输出对象 a的私有成员 x的值减 1即 9。 49 【正确答案】 ws 50 【正确答案】 x=new int(n), delete x 【试题解析】 在类的构造函数中,是申请内存空间,并使指针 x指向构造函数的形参 n,所以构造函数的函数体应为: x=newint(n);。在析构函数中,是释放类的私有成员,即指针变量 x,所以析构函数的函数体应该为 deletex;。