1、国家二级( C+)笔试模拟试卷 52及答案与解析 1 数据结构作为计算机的一门学科,主要研究数据的逻辑结构、对各种数据结构进行的运算,以及 ( A)数据的存储结构 ( B)计算方法 ( C)数据映象 ( D)逻辑存储 2 串的长度是 ( A)串中不同字符的个数 ( B)串中不同字母的个数 ( C)串中所含字符的个数且字符个数大于零 ( D)串中所含字符的个数 3 在计算机中,算法是指 ( A)加工方法 ( B)解题方案的准确而完整的描述 ( C)排序方法 ( D)查询方法 4 以下不属于对象的 基本特点的是 ( A)分类性 ( B)多态性 ( C)继承性 ( D)封装性 5 开发软件所需高成本
2、和产品的低质量之间有着尖锐的矛盾,这种现象称做 ( A)软件投机 ( B)软件危机 ( C)软件工程 ( D)软件产生 6 下面不属于软件设计原则的是 ( A)抽象 ( B)模块化 ( C)自底向上 ( D)信息隐蔽 7 开发大型软件时,产生困难的根本原因是 ( A)大系统的复杂性 ( B)入员知识不足 ( C)客观世界千变万化 ( D)时间紧、任务重 8 下列 SQL语句中,用于修改表结构的是 ( A) ALTER ( B) CREATE ( C) UPDATE ( D) INSERT 9 数据库、数据库系统和数据库管理系统之间的关系是 ( A)数据库包括数据库系统和数据库管理系统 ( B)
3、数据库系统包括数据库和数据库管理系统 ( C)数据库管理系统包括数据库和数据库系统 ( D) 3者没有明显的包含关系 10 关系模型允许定义 3类数据约束,下列不属于数据约束的是 ( A)实体完整性约束 ( B)参照完整性约束 ( C)域完整性约束 ( D)用户自定义的完整性约束 11 下列关于 C+语言类的 描述中错误的是 ( A)类用于描述事物的属性和对事物的操作 ( B)类与类之间通过封装而具有明确的独立性 ( C)类与类之间必须是平等的关系,而不能组成层次结构 ( D)类与类之间可以通过一些方法进行通信和联络 12 C+语言中,表示一条语句结束的标号是 ( A) # ( B); ( C
4、) / ( D) 13 以下叙述中正确的是 ( A)构成 C+语言程序的基本单位是类 ( B)可以在一个函数中定义另一个函数 ( C) main( )函数必须放在其他函数之前 ( D)所有被调用的函数一定要在调用之前 进行定义 14 已知有定义 const int D=5; int i=1; double f=0 32; char c=15; 则下列选项错误的是 ( A) +i; ( B) D-; ( C) c+; ( D) -f 15 以下程序的输出结果是 #include iostream.h void reverse(int a ,int n) int i,t; for(i=0;i n
5、2;i+) t=ai; ai=an-1-i; an-1-i=t; void main( ) int b10=1, 2, 3, 4, 5, 6, 7, 8, 9,10; int i, s=0; reverse(b, 8); for(i=6; i 10;i+)s+=bi; cout S; ( A) 22 ( B) 10 ( C) 34 ( D) 30 16 下面程序的功能是把 316表示为两个加数的和,使两个加数分别能被 13和 11整除,在划线处应填入的选项是 #include iostream.h void main( ) int i=0, j, k; doi+; k=316 13*i; wh
6、ile(_); j=k/11; cout “316=13*“ i “+11*“ j; ( A) k/11 ( B) k%11 ( C) k/11=0 ( D) k%11=0 17 设有数组定义: char array =“China“;,则数组 array所占的空间为 ( A) 4个字节 ( B) 5个字节 ( C) 6个字节 ( D) 7个字节 18 若已定义: int a =0, 1, 2, 3, 4, 5, 6, 7, 8, 9, *p=a, i; 其中0i9,则对 a数组元素不正确的引用是 ( A) ap a ( B) *( 3;i+) cout a2-ii “ “; ( A) 1 5
7、 9 ( B) 7 5 3 ( C) 3 5 7 ( D) 5 9 1 22 下面程序的结果为 #include iostream.h int c; class A private: int a; static int b; public: A( ) a=0;c=0; void seta( )a+; void setb( )b+; void setc( )c+; void display( ) cout a “ “ b “ “ C; ; int A: :b=0; void main( ) A a1, a2; a1 seta( ); a1 setb( ); a1 setc( ); a2 seta
8、( ); a2 setb( ); a2 setc( ); a2 display( ); ( A) 1 2 1 ( B) 1 2 2 ( C) 1 1 2 ( D) 2 2 2 23 下列描述中哪个是正确的 ? ( A)私有派生的子类无法访问父类的成员 ( B)类 A的私有派生子类的派生类 C无法初始化其祖先类 A对象的属性,因为类 A的成员对类 C是不可访问的 ( C)私有派生类不能作为基类派生子类 ( D)私有派生类的 所有子孙类将无法继续继承该类的成员 24 下列关于构造函数说法不正确的是 ( A)构造函数必须与类同名 ( B)构造函数可以省略不写 ( C)构造函数必须有返回值 ( D)在
9、构造函数中可以对类中的成员进行初始化 25 如果友元函数重载一个运算符时,其参数表中没有任何参数则说明该运算符是 ( A)一元运算符 ( B)二元运算符 ( C)选项 ) 和选项 ) 都可能 ( D)重载错误 26 在重载一个运算符时,如果其参数表中有一个参数,则说明该运算符是 ( A)一元成员运算符 ( B)二元成员运算符 ( C)一元友元运算符 ( D)选项 ) 和选项 ) 都可能 27 下列关于模板的说法正确的是 ( A)模板的实参在任何时候都可以省略 ( B)类模板与模板类所指的是同一概念 ( C)类模板的参数必须是虚拟类型的 ( D)类模板中的成员函数全部都是模板函数 28 表示在输
10、出时显示小数位,和在文件输入时判断文件尾的函数分别是 ( A) showbase( )和 eof( ) ( B) showpoint( )和 eof( ) ( C) showpoint( )和 bad( ) ( D) showpoint( )和 good( ) 29 下面程序段的运行结果是 void main( ) int t, a, b, c; a=1; b=2; C=2; while(a b c) t=a; a=b; b=t; c-; cout a “, “ b “, “ c; ( A) 1, 2, 0 ( B) 2, 1, 0 ( C) 1, 2, 1 ( D) 2, 1, 1 30 下
11、列程序中画线处应填入的语句是 class Base public: void fun( )cout “Base of fun“ end1; ; class Derived: public Base void fun( ) _/显示基类的成员函数 fun cout“Derived of fun“ end1; ; ( A) fun( ); ( B) Base fun( ); ( C) Base: :fun( ); ( D) Base fun( ); 31 若定义 int k=7, x=12;,则能使值为 3的表达式是 ( A) x%=(k%=5) ( B) x%=(k k%5) ( C) x%=k
12、 k%5 ( D) (x%=k) (k%=5) 32 在位运算中,操作数每右移一位,其结果相当于 ( A)操作数乘以 2 ( B)操作数除以 2 ( C)操作数乘以 4 ( D)操作数除以 4 33 有以下结构体说明和变量的定义,且指针 p指向变量 a,指针 q指向变量 b。则不能把结点 b连接到结点 a之后的语句是 struct node char data; struct node*next; a, b, *p= class Base int x; public: Base(int i) x=i; Base() ; class Derived: public Base public: _
13、完成类 Derive构造函数的定义 ; int main() Derived Obj; return 0; 在横线处应填入的语句是【 】。 45 下列程序的输出结果是【 】。 #include iostream using namespace std; int main() int data=1; int data+=5; r+=5; cout data end 1; return 0; 46 有以下程序 #include iostream using namespace std; class MyClass public: MyClass(); MyClass(); static int s
14、; void SetValue(int val); ; int MyClass:s=0; MyClass:MyClass() s+; void MyClass:SetValue(int val) ( s=val; int main() MyClass my3,*p; p=my; for(int k=0;k 3;k+) p- SetValue(k+l); p+; cout MyClass:s end1; return 0; 运行后的输出结果是【 】。 47 有以下程序: #include iostream using namespace std; long fib( int n ) if(n 2
15、) return ( fib( n-1 )+fib( n-2 ) ); else return 2; int main() cout fib(3) end1; return 0; 则该程序的输出结果应该是【 】。 48 已知 int DBL(int n)return n+n;和 long DBL(long n)return n+n)是一个函数模板的两个实例,则该函数模板的定义是【 】。 49 有以下程序 #include iostream using namespace std; class Base int a; public: Base(int x) a=x; void show()cou
16、t a; ; class Derived: public Base int b; public: Derived(int i):Base(i+1),b(i) void show() cout b; ; int main() Base b(5),*pb; Derived d(1); pb= pb- show(); return 0; 运行后的打印结果是【 】。 50 有如下程序: #include iostream using namespace std; class AA public: virtual void f() cout “AA“; ; class BB: public AA pub
17、lic: BB() cout “BB“; ; class CC: public BB public: virtual void f() BB:f(); cout “CC“; ; int main() AA aa,*p; BB bb; CC cc; p= P- f(); return 0; 运行后的输出结果【 】。 51 在 C+语言中,访问一个对象的成员所用的运算符是【 】,访问一个指针所指向的对象的成员所用的运算符是【 】。 国家二级( C+)笔试模拟试卷 52答案与解析 1 【正确答案】 A 【试题解析】 数据结构是研究数据元素及其之间的相互关系和数据运算的一门学科,它包含 3个方面的内容
18、,即数据的逻辑结构、存储结构和数据的运算。 2 【正确答案】 D 【试题解析】 串的长度指的是串中的字符的个数,且其字符个数可以为零。 3 【正确答案】 B 【试题解析】 计算机算法是指解题方案的准确而完整的描述,它有以下几个基本特征:可行性、确定性、有穷性和拥有足够的情报。 4 【正确答案】 C 【试题解析】 对象有如下一些基本特点,即标识惟一性、分类性、多态性、封装性和模块独立性。 5 【正确答案】 B 【试题解析】 软件工程概念的出现源自软件危机。所谓软件危机是泛指在计算机软件的开发和维护过程中所遇到的一系列严重问题。总之,可以将软件危机归结为成本、质量、生产率等问题。 6 【正确答案】
19、 C 【试题解析】 软件设计遵循软件工程的基本目标和原则,建立了适用于在软件设计中应该遵循的基本原理和与软件设计有关的概念,它们是抽象、模块化、信息隐蔽和数据独立性。自底向上是集成测试中增 量测试的一种。 7 【正确答案】 A 【试题解析】 软件的显著特点是规模庞大,复杂度超线性增长,在开发大型软件时,要保证高质量,极端复杂困难,不仅涉及技术问题,更重要的是必须要有严格而科学的管理。 8 【正确答案】 A 【试题解析】 SQL语句中凡创建都用 CRE ATE,删除都用 DROP,改变用ALTER,再跟类型和名字,附加子句。 9 【正确答案】 B 【试题解析】 数据库系统 (Database S
20、ystem,简称 DBS)包括数据库 (Database,简称 DB、数据库管理系统 (Database Management System,简称 DBMS)、数据库管理员、硬件和软件。 10 【正确答案】 C 【试题解析】 关系模型允许定义 3类数据约束,它们是实体完整性约束、参照完整性约束及用户自定义的完整性约束。其中前两种完整性约束由关系数据库系统支持,对于用户自定义的完整性约束,则由关系数据库系统提供完整性约束语言,用户利用该语言给出约束条件,运行时由系统自动检查。 11 【正确答案】 C 【试题解析】 C+语言中的类是可以组成层次结构的,类是用于描述事物的属性和对 事物的操作,类与类
21、之间有相对的独立性,但其可以通过一些方法进行信息的通信。 12 【正确答案】 B 【试题解析】 C+语言中语句的结束符是分号。 13 【正确答案】 A 【试题解析】 关于 C+语言,我们应该了解以下必须要掌握的基础知识: C+程序是由类构成的。 一个函数由两部分组成:函数的首部和函数体。 一个类由两部分组成:类成员变量和类成员函数。 一个 C+程序总是从 main函数开始执行的,而不论 main函数在整个程序中的位置如何 (main函数可以放在程序最前头,也可以放在 程序最后,或写在一些函数之前,在另一些函数之后 )。 C+程序在书写上,表现形式比较自由,一行内可以写几个语句,一个语句可以分写
22、在几行上。每个语句和数据定义的最后必须有一个分号。 可以用 /*/ 和/对 C+语言的程序的任何部分作注释。 14 【正确答案】 B 【试题解析】 “+”, “-”运算符不能用于常量。 15 【正确答案】 A 【试题解析】 在 main函数中,调用 reverse函数将 b数组中的前 8个成员进行互置,执行完毕后, b数组中的成员为 8, 7, 6, 5, 4, 3, 2, 1, 9, 10,在执行 for循环结构后,将 b6, b7b9 的值相加,结果为 1+2+9+10=22。注意:在计算累加和时,应将累加变量赋值为零。 16 【正确答案】 B 【试题解析】 do-while语句的一般形式
23、是 do 语句 while(表达式 ); 特点是: “直到型 ”循环结构。先执行一次 “语句 ”,判 “表达式 ”,当 “表达式 ”为非0,再执行 “语句 ”,直到 “表达式 ”的值为 0时停止执行语句。在一般情况下,用while和 do-while语句解决同一问题时, 若二者的循环体部分是一样的,它们的结果也一样。但当 while后面的 “表达式 ”一开始就为 “假 ”时,两种循环的结果不同。这是因为此时 while循环的循环不被执行,而 do-while循环的循环体被执行一次。本题的关键是两个加数分别能被 13和 11整除,在 i=0时,直接将 316赋值给 k,当 k%11的值为 0时,
24、则不必执行循环,将执行 j=k/11语句,输出结果,所以该表达式合理的条件是 k%11。 17 【正确答案】 C 【试题解析】 在给数组赋值时,可以用一个字符串作为初值,这种方法直观,方便而且符合人们的 习惯。数组 array的长度不是 5,而是 6,这点必须要注意。因为字符串常量的最后由系统加上一个 0,因此,上面的初始化与下面的等价:char array =C, h, i, n, a, 0; 18 【正确答案】 D 【试题解析】 通常,引用一个数组元素可以用下标法,如 ap-a形式,或指针法,如 *(p- f();”,输出 AA和 CC。 51 【正确答案】 成员选择运算符 (或 “.”) 成员访问运算符 (或 “- ”) 【试题解析】 本题考查的是使用对象和对象指针访问成员所使用的符号的不同,考生请注意它们的区别。