1、国家二级( C+)机试模拟试卷 186及答案与解析 一、选择题 1 在关系代数运算中,有 5种基本运算,它们是 ( )。 ( A)并 ( )、差 (-)、交 ()、除 ()和笛卡儿积 () ( B)并 ( )、差 (-)、交 ()、投影 ( )和选择 () ( C)并 ( )、交 ()、投影 ( )、选择 ()和笛卡儿积 () ( D)并 ( )、差 (-)、投影 ( )、选择 ()和笛卡儿积 () 2 在数据库系统的组织结构中,下列 ( )映射把用户数据库与概念数据库联系了起来。 ( A)外模式模式 ( B) 内模式夕 、模式 ( C)模式内模式 ( D)内模式模式 3 下列关于线性链表的描
2、述中,正确的是 ( )。 I、只含有一个指针域来存放下一个元素地址 II、指针域中的指针用于指向该结点的前一个或后一个结点 (即前件或后件 ) III、结点由两部分组成:数据域和指针域。 ( A)仅 I、 II ( B)仅 I、 III ( C)仅 II、 III ( D)全部 4 下面关于数据库三级模式结构的叙述中,正确的是 ( )。 ( A)内模式可以有多个,外模式和模式只有一个 ( B)外模 式可以有多个,内模式和模式只有一个 ( C)内模式只有一个,模式和外模式可以有多个 ( D)模式只有一个,外模式和内模式可以有多个 5 设有关键码序列 (66, 13, 51, 76, 81, 26
3、, 57, 69, 23),要按关键码值递增的次序排序,若采用快速排序法,并以第一个元素为划分的基准,那么第一趟划分后的结果为 ( )。 ( A) 23, 13, 51, 57, 66, 26, 81, 69, 76 ( B) 13, 23, 26, 51, 57, 66, 81, 76, 69 ( C) 23, 13, 51, 57, 26, 66, 81, 69, 76 ( D) 23, 13, 51, 57, 81, 26, 66, 69, 76 6 下列哪一条不属于数据库设计的任务 ?( ) ( A)设计数据库应用结构 ( B)设计数据库概论结构 ( C)设计数据库逻辑结构 ( D)设
4、计数据库物理结构 7 数据库技术的根本目标是 ( )。 ( A)数据存储 ( B)数据共享 ( C)数据查询 ( D)数据管理 8 需求分析阶段的任务是 ( )。 ( A)软件开发方法 ( B)软件开发工具 ( C)软件开发费用 ( D)软件系统功能 9 关系数据库管理系统能实现的专 门关系运算包括 ( )。 ( A)排序、索引、统计 ( B)选择、投影、连接 ( C)关联、更新、排序 ( D)显示、打印、制表 10 数据管理技术发展的三个阶段中, ( )没有专门的软件对数据进行管理。 I人工管理阶段 II文件系统阶段 III数据库阶段 ( A)仅 I ( B)仅 III ( C) I和 II
5、 ( D) II和 III 11 阅读以下程序: #include void main() static int a2=5, 3, 1, 2; int ij, S1=0: for(i=0; i using namespace std; int main() char*p=“abcdefgh“, *r; r=p; cout using namespace std; void fun(int&x, int y)int t=x; x=y; y=t; int main() hat a2=1, 2; fun(a1, a0); std: cout intx=5; int fun(int a) int c;
6、 c=x*a: return c; void main() int x=3, a=4; x=x+fun(a); cout class TestClass public: static int m; TestClass () m+; TestClass(int n) m=n: static void test() m+; ; int TestClass: m=0; void main() TestClass A: TestClass B(3); A test(); TestClass: test(); cout using namespace std; class TestClass publi
7、c: TestClass()cout class TestClass1 public: void show1() coutb?”*a= dt“: “#b= d“, a, b); ( A)没有正确的输出格式控制 ( B)输出为: *a=2 ( C)输出为: #b=2 ( D)输出为: *a=2#b=2 23 若执行以下程序时从键盘上输入 9,则输出结果是 ( )。 main() int n; cinn; if(n+void main() int*p1; int*p2=&p1; int b=20; p1=&b; cout ( B) template ( C) template ( D) templ
8、ate 32 有如下程序: #include using namespace std; class AA intn: public: AA(int k): n(k) int get0return n; int getoconstreturn n+1; ; intmain() AA a(5); const AA b(6); cout class Sample intn: public: Sample(int i)n=i; ) operator+()n+; 前缀重载运算符 operator+(int)n+=2; 后缀重载运算符 void disp() cout”必须使用的原型为 ( )。 ( A)
9、 istream&operator(istream&, &); ( B) istream&operator(istream, ); ( C) istream operator(istream, &); ( D) operator(istream&, &); 36 辱算符函数调用格式的表达式 “y x+”与表达式 “y operator (operator+(x,0)”的含义相同,由 此可看出 ( )。 ( A) “ ”和 “+”都是作为成员函数重载的 ( B) “ ”和 “+”都是作为非成员函数重载的 ( C) “ ”是作为成员函数重载的, “+”是作为非成员函数重载的 ( D) “ ”是作为
10、非成员函数重载的, “+”都是作为成员函数重载的 37 派生类的构造函数的成员初始化列表中,不能包含 ( )。 ( A)基类的构造函数 ( B)派生类中子对象的初始化 ( C)基类中子对象的初始化 ( D)派生类中一般数据成员的初始化 38 在下面的类定义中,横线处应填入的内容是 ( )。 class Fred public: void print()cout *error* template void fun(Tt) std: cout void fun(bool t) std: cout #include #include using namespace std; void WriteFi
11、le(char*str) ofstream out1; outl open(“modi2 txt“, ios_base: binarylios_base: app); for(int i=0; stri!=0; i+) out1 put(stri); out1 close(); void fun(int x) void ClearFile() ofstream outl; out1 open(“modi2 txt“); out1 close(); int main() ClearFile0; fun(13); return 0: 四、综合应用题 43 使用 VC6打开考生文件夹下的源程序文件
12、modi3 cpp。通过继承完成输入到屏幕指定的信息: TestClassA TestClassB TestClassC 其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。 (1)完成类 B虚继承于 A,请在注释 *1*后添加适当的语句。 (2)完成类 C虚继承于 A,请在注释 *2*后添加适当的语句。 (3)完成类 D继承于 B, C,请在注释 *3*后添加适当的语句。 (4)函数 fun通过调用基类的 fun,完成 所输出的内容,请在注释*4*后添加适当的语句。 注意:增加代码,或者修改代码的位置已经用符号表示出来。请不要修改其他的程序代码。 #include class Te
13、stClassA public: void fun() cout函数声明。调用模板函数时,如果与模板实参中最后的若干个参数有关的信息可以从模板函数的实参中获得,则相关的模板实参可以省略。 32 【正确答案】 B 【试题解析】 语句 AA a(5)调用的是 AA(int k): n(k), a get()调用 int get()return n; ,结果会输出 5;而常对象 const AA b(6), b get()调用的是 int get()constreturn n+1; ,会输出结果 7。 33 【正确答案】 C 【试题解析】 所谓函数重载是指同一函数名可以对应多个函数实现。进行函数重载
14、时,要求同名函数在参数个数上不同,或者参数类型上不同。但函数的返回类型不能作为判断重载的依据。 34 【正确答案】 A 【试题解析】 此题考查的是 “+”运算符的重载。为了区分前缀和后缀运算符,规定:重载后缀运算符时必须多一 个虚拟参数: int。本题中, A(2)首先给 n赋值2,语句 A+,调用的是后缀运算符重载语句,使得 n加 2变为 4。 B(2)首先给 n赋值 2,然后语句 +B,调用前缀运算符重载函数,使得 n加 1。因此最终的输出结果是 n=4 n=3。 35 【正确答案】 A 【试题解析】 C+流的输入运算符 “”和输出运算符 “”须使用以下原型: istream &opera
15、tor(istream&,&1;。 36 【正确答案】 C 【试题解析】 运算符函数有两种调用形式,第一种是像一般函数那样用函数名调用,即 y opemtor*(z)或者 operator*(y, z);另一种是通过运算符构成表达式,即 y*z。因为 “+”运算符既可以作为前缀运算符,又可以作为后缀运算符,所以重载这个运算符时,重载后缀 “+”时必须多一个虚拟参数: int。 37 【正确答案】 C 【试题解析】 在定义派生类的构造函数时,除了对自己的数据成员进行初始化外,还必须负责调用基类的构造函数使基类的数据成员得以初始化。如果派生类中还有子对象,还应包含对子对象初始化的构 造函数。 38
16、 【正确答案】 C 【试题解析】 此题考查的是静态数据成员的定义。题目中 count数据成员要定义成静态的,其初始化的格式为:类型类名:静态数据成员 =常量。 39 【正确答案】 D 【试题解析】 此题考查的是 this指针的使用。类的每一个非静态成员函数都有一个隐含的常量指针,即 this指针。类的静态成员函数不能含有 this指针,因为 this指针是一个指向本对象的指针。 40 【正确答案】 B 【试题解析】 此题考查的是复制构造函数的概念。用一个已知的对象初始化一个正在创建的同类对象时,就会发生复制构造函数。因此,选项 A)、 C)、 D)均会调用复制构造函数,而只有选项 B)没有创建
17、的动作,不调用复制构造函数。 二、基本操作题 41 【正确答案】 (1)template (2)删除 “template” (3)bool flag=true; 【试题解析】 (1)C+中的模板类格式为 template,所以将题目中程序中的第 1个标识下语句 “template”修改为 “template”。 (2)在第 2个标识下的 “void fun(boolt)”函数中,其中 t变量为布尔型变量,是C+中的基础变量,并不是模板变量,并没有使用到模板类,所以删除第 2个标识下的模板类型定义语句。 (3)第 3个标识下的 “bool flag=TRUE; ”是声叫布尔型变量 nag,并将其
18、值赋为逻辑真。而 TRUE并不是合法值, C+中区分大小写,所以逻辑真值应为 true,即 “bool flag=true; ”。 三、简单应用题 42 【正确答案】 char str32; inti: for(i=30; i=0; i-) 计算二进制 if(x 2)stri=1; 求余,如果余不为零字符串 str第 i位为 1 else stri=0; 否则为 0 x=1: if(!x)1break; str31= 0; 串加尾符 cout&striendl; WriteFile(&stri); 【试题解析】 (1)定义存放二进制的字符串 str。 (2)然后利用 for循环对十进制数字 x
19、进行取余运算,直到余数为 0结束。 (3)如果取余结果为 0,则二进制字符串这个字符位的值为 0,否则为 1。 (4)最后调用 WriteFile将运算结果存入文件。 四、综合应用题 43 【正确答案】 (1)将 “class TestClassB: ”补充完整为: class TestClassB:vinualpublic TestClassA (2)将 “class TestClassC: ”补充完整为: class TestClassC: virtual public TestClassA (3)将 “class TestClassD: ”补充完整为: class TestClassD:
20、 public TestClassB,public TestClassC (4)添加语句: TestClassA: fun(); TestCklssB: fun(); TestClassC: fun(); 【试题解析】 (1)题目 1要求 “完成类 B虚继承于 A”。在 C+中,声明虚基类的一般形式为: class派生类名: virtual继承方式基类名,由题目知道 TestclassA为基类, TestClassB为派生类,所以第 1个标识下修改为 “class TestclassB: virtual Dublic TestclassA”。 (2)同 (1),题目 2和题目 3中要求的标识
21、2和 3下的语句修改为 “claSs TestClassC: virtual public TestClassA”和 “class TestClassD: public TestClassB,public TestClassC”。 (3)题目 4要求 “函数 fun通过调用基类的 fun,完成所输出 的内容 ”。在 C+中调用基类的成员函数,要使用作用域限定符 “: ”,类名 A:函数 fun,就是调用类 A的函数 fun,根据题目中的要求补全对类 TestClassA、 TestClassB以及TestClaSsC中的 fun函数,即 “TestClassA: fun(); TestClassB: fun();TestClassC: fun(); ”。