1、国家二级 C+机试(选择题)模拟试卷 2及答案与解析 一、选择题 1 数据结构主要研究的是数据的逻辑结构、数据的运算和 ( )。 ( A)数据的方法 ( B)数据的存储结构 ( C)数据的对象 ( D)数据的逻辑存储 2 一棵二叉树的前序遍历结果是 ABCEDF,中序遍历结果是 CBAEDF,则其后序遍历的结果是 ( )。 ( A) DBACEF ( B) CBEFDA ( C) FDAEBC ( D) DFABEC 3 在数据处理中,其处理的最小单位是 ( )。 ( A)数据 ( B)数据项 ( C)数据结构 ( D)数据元素 4 在数据库系统的内部结构体系中,索引属于 ( )。 ( A)模
2、式 ( B)内模式 ( C)外模式 ( D)概念模式 5 以下 ( )不属于对象的基本特征。 ( A)继承性 ( B)封装性 ( C)分类性 ( D)多态性 6 数据库系统的核心是 ( )。 ( A)数据模型 ( B)软件开发 ( C)数据库设计 ( D)数据库管理系统 7 开发软件所需高成本和产品的低质量之间有着尖锐的矛盾,这种现象称做 ( )。 ( A)软件矛盾 ( B)软件危机 ( C)软件藕合 ( D)软件产生 8 关系模型允许定义 3类数据约束,下列不属于数据约束的是 ( )。 ( A)实体完整性约束 ( B)参照完整性约束 ( C)属性完整性约束 ( D)用户自定义的完整性约束 9
3、 关系表中的每一行记录称为一个 ( )。 ( A)字段 ( B)元组 ( C)属性 ( D)关键码 10 在数据库管理技术的发展中,数据独立性最高的是 ( )。 ( A)人工管理 ( B)文件系统 ( C)数据库系统 ( D)数据模型 11 下列语句中,错误的 是 ( )。 ( A) const int buffer=-256; ( B) const int temp; ( C) const double*point; ( D) const double*rt=-new double(5 5); 12 下列变量名中,合法的 ( )。 ( A) CHINA ( B) byte-size ( C)
4、 double ( D) A+a 13 在进行任何 C+流的操作后,都可以用 C+流的有关成员函数检测流的状态;其中只能用于检测输入流状态的操作函数名称是 ( )。 ( A) fail ( B) eof ( C) bad ( D) good 14 对于语句 cout main() intm=5; if(m+5) cout void main() intx; cinx; if(x+5) cout using namespace std; int i=1; class Fun public: static int i; int value()return i一 1; int value()cons
5、treturn i+l; ) ); int Fun: i=2; int main() int i=3: Fun funl; const Fun fun2; return 0: ) 若程序的输出结果是: 123 则程序中横线处的语句是 ( )。 ( A) cout void main() int i(0); while(+i) if(i=10)break; if(i 3!=1)continue; cout using namespace std; class A public: A()cout #include”string h” void main() char a=“Hello Test“,
6、b=“Test“; strcpy(a, b); cout void main() char str25=“1234“, “5678“), *p2; inti,j, s=0; for(i=0; i 0 j+=2) s=10*s+piU-0; cout using namespace std; void fun(char*q) +q; cout int fun(int); void main() int a=2, i; for(i=0; i using namespace std; int a; int fun(); int main() extern int a; intb: a=10; b=f
7、un0; cout using namespace std; class TestClass l public: TestClass1 ()cout5成立 (此时 m的值变为 6),所以执行语 句cout5不成立,因为 “+”后缀,之后 x的值变为 5,执行语句 cout5成立,所以执行语句 coutxendl;输出7。 17 【正确答案】 D 【试题解析】 this指针不能在程序中修改,不能被幅值;静态成员没有 this指针,因为类中只有一个静态成员函数实例,使用 this指针无意义。 18 【正确答案】 A 【试题解析】 函数模板是一系列相关函数的模型或样板,这些函数的源代码形式相同,只是
8、所针对的数据类型不同。因此,函数模板使一个函数可以定义成对许多不同数据类型完成同一个任务。 19 【正确答案】 A 【试题解析】 此题因为定义的变量 i是 static类型的 (main()函数内部的 i只是一个局部变量 ),所以,选项 A)中 funl value()的返回值是 l, Fun: i引用的是外部变量会输出 2; fun2 value();会调用常成员函数 intvalue()constrerun i+1; 使得外部静态变量 i的值增加为 3,故输出 3。 20 【正确答案】 A 【试题解析】 选项 A)中,重载函数中是允许使用默认参数的;为了使重载函数有意义,不要使用重载函数来
9、描述毫无相干的函数;重载函数中编译是根据参数表进行选择,包括参数的个数和类型。 21 【正确答案】 D 【试题解析】 对象之间的信息传递是通过消息进行的。对象 =方法 (函数 )+属性(数据 ),而 C语言的结构体其实就是不同类型数据的组合。并没有处理数据的方法。 22 【正确答案】 A 【试题解析】 在 C+中 ,科学计数法表示小数的方法: E(e)左右必须有数,且E(e)的右侧只能为整数。 23 【正确答案】 C 【试题解析】 在 C+中定义二维数组时并赋值,则数组的行数可以省略不写。选项 A)、 B)、 D)均是字符字符串初始化。 24 【正确答案】 A 【试题解析】 语句 “int木
10、p5”表示一个数组 p,它的大小是 5,里面存放的数据类型是 int*,也就是整型指针。称之为指针数组 (从右向左解析这个表示 )。 25 【正确答案】 A 【试题解析】 从 if(i=10)break;语句了解本循 环只到 10,输出 i的条件是只要1-10之间的数对 3取余为 1的输出,所以输出的 1 4 7。 26 【正确答案】 D 【试题解析】 此题中,语句 C obi对象初始化首先调用基类的构造函数 A(),输出 “A”,其次是 C类中对象的构造函数的调用,即调用 B(),输出 “B”;最后是调用自身的构造函数 C(),输出 “C”。 27 【正确答案】 B 【试题解析】 程序中首先
11、定义字符数组 a和 b,其值分别为 “Hello Test”和“Test”。然后利用 strcpy复制函数,将 b的值复制给 a,所以输出 a的结果为Test。 28 【正确答案】 A 【试题解析】 程序中的 “for(i=0; i20+)pi=stri; ”语句将 str中的值赋值给指针数组 p。在接下来的二重 for循环中,跳取 “j+=2”, p指针指向的值即 “1”,“3”, “5”, “7”。在分别对字符到整型的转换,即减去字符 0,然后依次转换为千位,百位,十位,个位 “10*s”操作输出整型 s,即 “1357”。 29 【正确答案】 C 【试题解析】 由程序 main主函数入手
12、,调用 fun函数,在 fun函数中执行“cout*qendl: ”语句实现程序输出。主函数中变量 char*s为指针数组,char*p表示 p指向的字符指针数据。 *p就代表 p指向的字符指针。语句 “p=s; ”表明 p指向字符指针 s,而 *p则是 s中的第一个字符串 “HI”。主函数将变量 p传值给函数 fun(char*q)中的 q,在函数体内部首先执行 “+q”语句,就是将 q的指针指向 s中的下一个字符串,即 “HELLO”,所以输出语句 “cout*q:endl: ”输出该字符串值。 30 【正确答案】 A 【试题解析】 由程序中的主函数 main入手,调 用 fun函数。其中
13、第一个实参为数组 a的名字,数组名作为实参,传递的是数组的起始地址。所以在 fun函数中指针 p指向了数组的第一个元素 a0。另外实参整型 j传递的是引用,也就是 i的地址。在 fun函数中在 for循环中,依次将当前元素 pi与 j指针值为标识的 p进行比较,取较大的。最后循环后的结果就是 p*j存放数组中的最大值,并且指针 i为该值的标识位。可以看出数组的最大值是 9标识位为 2。 31 【正确答案】 C 【试题解析】 主函数中在 for循环中依次调用 fun函数。其中 c为静态变量,到程序结束有效 。第一次循环中 2+1+4=7,第二次循环 20+1+5=8,第三次循环2+1+6=9。即
14、答案为 7 8 9。 32 【正确答案】 C 【试题解析】 由主函数 main入手,首先定义外部变量 a,它的作用域为从变量的定义处开始,到本程序文件的末尾,赋值为 10。然后调用 fun函数,在 fun函数中计算 10*a,其中 a的作用域为到文件结尾,所以这里的 a为 10,即 10*10。 33 【正确答案】 B 【试题解析】 静态数据成员不能在参数初始化表对静态数据成员初始化,只能在类体外进行初始化。 34 【正 确答案】 B 【试题解析】 派生类中构造函数的执行顺序是:先调用基类构造函数,对基类数据成员初始化,然后调用予对象构造函数,对子对象数据成员初始化;最后执行派生类构造函数本身
15、,对派生类数据成员初始化。由主函数 main入手,首先定义了一个 TestClass2对象 obj。其中 TestClass2公共继承 TestClassl,对象 obj可以访问 TestClassl中的公有成员函数。 TestClass2中定义了一个 TestClassl的指针p,给 p分配新空间,即指向类 TestClassl,输出 “rest(21assl”。在 TestClass2的构造函数中首先输出 “TestClass2”,并在 TestClass1构造函数中输出“TestClassl”。 TestClass2析构函数中输出 “ TestClass2”,删除指针 p,输出 “Tes
16、tClassl”。析构 TestClassl输出 “ TestClassl”。 35 【正确答案】 B 【试题解析】 题目中程序 TestClass为基类, TestClassl为派生类,派生类构造函数的一般形式为:派生类构造函数名 (总参数类表 ):基类构造函数名 (参数列表 )派生类中新增数据成员初始化语句 。派生类 TestClassl的基类函数名为TestClass,总参数为 int a, inIb,所以选择 B)。 36 【正确答案】 B 【试题解析】 程序中的 TestClassI为 TestClass的派生类,如果不写继承方式,则默认为 private,所以 TestClassl
17、私有继承 TestClass,对于基类中的保护成员,继承类的访问权限为 private。所以选择 B)。 37 【正确答案】 D 【试题解析】 基类的公有成员和保护成员在保护派生类中都成了保护成员 ,其私有成员仍为基类私有。 38 【正确答案】 B 【试题解析】 此题考查的是 C+语言中对象概念的理解。所谓封装性是指将数据和算法捆绑成一个整体,这个整体就是对象。 C+语言通过建立用户定义类型 “类 ”来支持封装性和信息隐藏。 39 【正确答案】 A 【试题解析】 此题考查的是类和对象的概念。类是用户定义的一种数据类型,可以使用这个类型来说明一个或多个变量,即对象。 40 【正确答案】 C 【试题解析】 此题考查的是有关函数的概念。内联函数是在函数定义之前加关键字 inline来 声明的函数,而不是定义在另一个函数体内部的函数,故选项 A)错误;无返回值的函数在执行完最后一条语句后,会自动返回而不必加入 retum语句,故选项 B)错误;如果函数只是返回值类型不同,而其他完全相同,则不能作为函数重载来使用。