1、国家二级 C+机试(选择题)模拟试卷 122及答案与解析 一、选择题 1 下列关于栈和队列的描述中,正确的是 ( )。 ( A)栈是先进先出 ( B)队列是先进后出 ( C)队列允许在队头删除元素 ( D)栈在栈顶删除元素 2 已知二叉树后序遍历序列是 CDABE,中序遍历序列是 CADEB,它的前序遍历序列是 ( )。 ( A) ABCDE ( B) ECABD ( C) EACDB ( D) CDEAB 3 在数据流图中,带有箭头的线段表示的是 ( )。 ( A)控制流 ( B)数据流 ( C)模块调用 ( D)事件驱动 4 结构化程序设计的 3种结构是 ( )。 ( A)顺序结构,分支结
2、构,跳转结构 ( B)顺序结构,选择结构,循环结构 ( C)分支结构,选择结构,循环结构 ( D)分支结构,跳转结构,循环结构 5 下列方法中,不属于软件调试方法的是 ( )。 ( A)回溯法 ( B)强行排错法 ( C)集成测试法 ( D)原因排除法 6 下列选项中,不属于模块间耦合的是 ( )。 ( A)内容耦合 ( B)异构耦合 ( C)控制耦合 ( D)数据耦合 7 下列特征 中不是面向对象方法的主要特征的是 ( )。 ( A)多态性 ( B)标识惟一性 ( C)封装性 ( D)耦合性 8 在数据库设计中,将 E-R图转换成关系数据模型的过程属于 ( )。 ( A)需求分析阶段 ( B
3、)概念设计阶段 ( C)逻辑设计阶段 ( D)物理设计阶段 9 在一棵二叉树上,第 5层的结点数最多是 ( )。 ( A) 8 ( B) 9 ( C) 15 ( D) 16 10 下列有关数据库的描述,正确的是 ( )。 ( A)数据库设计是指设计数据库管理系统 ( B)数据库技术的 根本目标是要解决数据共享的问题 ( C)数据库是一个独立的系统,不需要操作系统的支持 ( D)数据库系统中,数据的物理结构必须与逻辑结构一致 11 以下程序的输出结果是 ( )。 #include iostream-h main() int b33=0, 1, 2,0, 1, 2,0, 1, 2), i, j,
4、t=1; for(i=0; i 3; i+) for(j=i; j =i; j+) t=t+bibjj; cout t; ( A) 2 ( B) 3 ( C) 4 ( D) 5 12 当循环队列非空且队尾指针等于队头指针时,说明循环队列己满,不能进行入队运算。这种隋况称为 ( )。 ( A)下溢 ( B)上溢 ( C)异常 ( D)溢出 13 以下程序的输出的结果是 ( )。 #include lostream h void main() int i, k, a10, p3; k=5; for(i=0; i 9; i+)ai=i; for(i=0; i 3; i+)pi=ai*(i+1); f
5、or(i=0; i 3; i+)k+=pi*2; cout k; ( A) 20 ( B) 21 ( C) 22 ( D) 23 14 以下程序的执行结果是 ( )。 #include iostream h int fun(int b, int n) int i, r=1; for(i=0; i n; i+) r=r*bi; return r: void main() int x, a=1, 2, 3, 4, 5, 6, 7, 8; x=fun(a, 3); cout x endl; ( A) 5 ( B) 6 ( C) 7 ( D) 8 15 有如 下程序: #include iostrea
6、m using namespace std; int main() int*p; *p=9; cout “The value at p: “ *p; return0: 编译运行程序将出现的情况是 ( )。 ( A)编译时出现语法错误,不能生成可执行文件 ( B)运行时一定输出: The value at p: 9 ( C)运行时一定输出: The value at p: *9 ( D)运行时有可能出错 16 下列有关指针的用法中,错误的是 ( )。 ( A) int i; int*p=&i; ( B) int i; int*p; i=*p; ( C) int*p; p=0; ( D) inti
7、=5; int*p; p=&i; 17 如果有以下定义及初始化: int a=3, *p=&a; 则由此可以推断, *p的值是 ( )。 ( A)变量 a的值,即 3 ( B)变量 a的地址值 ( C)变量 p的地址值 ( D)无意义 18 执行语句序列 int x=1, &y=x; cout x - y endl; 输出结果为 ( )。 ( A) x-x ( B) 1-1 ( C) 1-0 ( D)异常 19 下列程序输出的结果是 ( )。 #include stdio_h fun1(char a, char b)char c; c=a; a=b; b=c; fun2(char*a, cha
8、r b)char c; c=*a; *a=b; b=c; fun3(char*a, char*b)char c; c=*a; *a=*b; *b=c; void main() char a, b; a=A; b=B; fun1(a, b); putchar(a); putchar(b); a=A; b=B; fun2(&a, b); putchar(a); putchar(b); a=A; b=B; fun3(&a, &b); putchar(a); putchar(b); putchar( n); ( A) BABBAB ( B) ABBBBA ( C) ABBABA ( D) ABABBA
9、 20 下列程序将 x、 y和 z按从小到大的顺序排列,横线处应添加语句 ( )。 template class T void fun() T a: if(x y) a=x; x=y; y=a; if(y z) a=y; y=z; z=a; if(x y) a=x; x=y; y=a; ( A) T x, T y, T z ( B) T x; y; z ( C) T&x, T&y, T&z ( D) T&x, &y, &z 21 下面 c+标识符中正确的是 ( )。 ( A) _abc ( B) 3ab ( C) int ( D) +ab 22 下列哪项不是面向对象程序设计的主要特征 ( )。
10、 ( A)封装 ( B)继承 ( C)多态 ( D)结构 23 已知 i=5, j=0,下列各式中运算结果为 j=6的表达式是 ( )。 ( A) j=i+(+j) ( B) j=j+i+ ( C) j=+i+j ( D) j=j+i 24 若整型变量 a、 b、 C、 d中的值依次为: 1、 4、 3、 2。则条件表达式 a b?a: c d?c: d的值是 ( )。 ( A) 1 ( B) 2 ( C) 3 ( D) 4 25 以下程序的输出的结果是 ( )。 #include iostream.h void main() int a,b, c, d(5); c=2, c+=10; a=b
11、=10; a*=2: b =2: c =2: cout a “, “ b “, “ c endl; ( A) 20, 5, 0 ( B) 20, 7, 0 ( C) 20, 5, 1 ( D) 5, 20, 0 26 以下程序的执行结果是 ( )。 #include iostream h class TestClass2 public: TestClass2(); TestClass2(int i, int j); void printb(); private: int a, b; ; class TestClass1 public: TestClass1() TestClass1(int i
12、, int j); void printa(); private: TestClass2c; ; TestClass1: TestClass1(int i, intj): c(i, j) void TestClass1: printa() c printb(); TestClass2: TestClass2(int i, int j) a=i: b=j; void TestClass2: prntb() cout “a=“ a “, “ “b=“ b endl; ) void main() TestClass1m(7, 9); m printa(); ( A) a=7, b=8 ( B) a=
13、8, b=7 ( C) a=7, b=9 ( D) a=8, b=9 27 以下程序的输出的结果是 ( )。 #include iostream.h int x=3: void main() void fun(); int i; for(i=1; i x; i+) fun(); void fun() static int x=1; x*=x+1; cout x “ “; ( A) 3, 3 ( B) 2, 2 ( C) 2, 6 ( D) 2, 5 28 若有以下程序: #include iostream using namespace std; int fun() static int i=
14、0: int s=1; s+=i; i+; return s; int main() int i, a=0; for(i=0; i 5; i+) a+=fun(); cout a endl; return0; 程序运 行后,输出的结果是 ( )。 ( A) 20 ( B) 24 ( C) 25 ( D) 15 29 阅读下面程序: #include iostream h fun(int a, intb) int c; c=a+b: return C; ) void main() int x=6, y=7, z=8, r; r=fun(x-, y+, x+y), z-); cout r endl
15、; ) 则该程序的输出结果是 ( )。 ( A) 11 ( B) 20 ( C) 21 ( D) 31 30 对虚函数的调 用 ( )。 ( A)一定使用动态联编 ( B)必须使用动态联编 ( C)一定使用静态联编 ( D)不一定使用动态联编 31 下列函数的运行结果是 ( )。 #include iostream h int add(int a, int b); void main() extern int x, y; cout add(x, y) endl; int x(20), y(5); int add(int a, int b) int s=a+b: return s; ( A) 2
16、5 ( B) 30 ( C) 20 ( D) 15 32 下面程序的输出结果为 ( )。 #include iostream.h class TestClass public: TestClass()val+; static int val; ; int TestClass: val=0: void main() TestClass cs1; cout cs1 val “ “; TestClass cs2; TestClass cs3, cs4; cout cs2 val endl; ( A) 03 ( B) 13 ( C) 14 ( D) 24 33 下面程序的运行结果是 ( )。 #inc
17、lude iostream using namespace std; class TestClass static intn: public: TestClass() n+: static int test() for(int i=0; i 4; i+) n+; return n; ; int TestClass: n=0; int main() cout TestClass: test() “ “; TestClass c1, c2; cout TestClass: test() endl; return0: ( A) 4, 10 ( B) 4, 6 ( C) 0, 6 ( D) 0, 4
18、34 当需要将一个函数 bool isnumber(char c)声明为内联函数时,则此内联函数的函数原型为 ( )。 ( A) enum bool isnumber(char c); ( B) define bool isnumber(char c); ( C) inline bool isnumber(char c); ( D) extem bool isnumber(char c); 35 下列关于类和对象的叙述中,错误的是 ( )。 ( A)一个类只能有一个对象 ( B)对象是类的具体实例 ( C)类是对某一类对象的抽象 ( D)类和对象的关系是一种数据类型与变量的关系 36 下列关于
19、成员函数特征的描述中,错误的是 ( )。 ( A)成员函数一定是内联函数 ( B)成员函数可以重载 ( C)成员函数可以设置参数的默认值 ( D)成员函数可以是静态的 37 下列关于 C+函 数的叙述中,正确的是 ( )。 ( A)每个函数至少要具有一个参数 ( B)每个函数都必须返回一个值 ( C)函数在被调用之前必须先声明 ( D)函数不能自己调用自己 38 下列关于虚函数的说明中,正确的是 ( )。 ( A)从虚基类继承的函数都是虚函数 ( B)虚函数不得是静态成员函数 ( C)只能通过指针或引用调用虚函数 ( D)抽象类中的成员函数都是虚函数 39 下列运算符不能重载为友元函数的是 (
20、 )。 ( A) = () - ( B) + - + - ( C) = = ( D) += -= *= = 40 有如下函数模板: template class T Tsquare(T x)return x, x; 其中 T是 ( )。 ( A)函数形参 ( B)函数实参 ( C)模板形参 ( D)模板实参 国家二级 C+机试(选择题)模拟试卷 122答案与解析 一、选择题 1 【正确答案】 D 【试题解析】 栈实际也是线性表,只不过是一种特殊的线性表。栈是只能在表的一端进行插入和删除运算的线性表,通常称插入、删除的这一端为栈顶,另一端为栈底。队列是只允许在一端删除,在另一端插入的顺序表,允许
21、删除的一端叫做队头,允许插入的一端叫做队尾。 2 【正确答案】 C 【试题解析】 由于后序遍历的最后一个元素为 E,所以 E为根结点,所以它的前序遍历的首个元素为 E,故排除 A)和 D)选项。由于中序遍历中,元素 B在元素根结点 E的后面,所以 B为二叉树的右子树,并且该二叉树右子树只有一个元素,所以前序遍历的最后一个元素应为 B,故选项 C)为正确选项,即该二叉树的前序遍历序列是 EACDB。 3 【正确答案】 B 【试题解析】 数据流图中带箭头的 线段表示数据流,沿箭头方向传递数据的通道,一般在旁边标注数据流名。 4 【正确答案】 B 【试题解析】 程序设计语言仅仅使用顺序、选择和重复
22、(循环 )三种基本控制结构就足以表达出各种其他形式结构的程序设计方法。遵循程序结构化的设计原则,按结构化程序设计方法设计出的程序易于理解、使用和维护;可以提高编程工作的效率,降低软件的开发成本。 5 【正确答案】 C 【试题解析】 软件调试主要采用以下三种方法: 强行排错法:作为传统的调试方法,其过程可概括为设置断点、程序暂停、观察程序状态、继续运行程 序。 回溯法:该方法适合于小规模程序的排错、即一旦发现了错误,先分析错误征兆,确定最先发现 “症状 ”的位置。 原因排除法:原因排除法是通过演绎和归纳,以及二分法来实现。 6 【正确答案】 B 【试题解析】 耦合可以分为下列几种,它们之间的耦合
23、度由高到低排列: 内容耦合一一若一个模块直接访问另一模块的内容,则这两个模块称为内容耦合。 公共耦合一一若一组模块都访问同一全局数据结构,则称为公共耦合。 外部耦合一一若一组模块都访问同一全局数据项,则称为外部耦合。 控制耦合一一若一模块明显地把开关量、名字等信 息送入另一模块,控制另一模块的功能,则称为控制耦合。 标记耦合一一若两个以上的模块都需要其余某一数据结构的子结构时,不使用其余全局变量的方式而全使用记录传递的方式,这样的耦合称为标记耦合。 数据耦合一一若一个模块访问另一个模块,被访问模块的输入和输出都是数据项参数,则这两个模块为数据耦合。 非直接耦合一一若两个模块没有直接关系,它们之
24、间的联系完全是通过程序的控制和调用来实现的,则称这两个模块为非直接耦合,这样的耦合独立性最强。 7 【正确答案】 D 【试题解析】 面向对象设计方法与面向过程设计方法 有本质的不同,其基本原理是:使用现实世界的概念抽象地思考问题从而自然地解决问题。其特点包括:标识惟一性、多态性、封装性、模块独立性、继承和多态性好。 8 【正确答案】 C 【试题解析】 逻辑结构设计的任务:概念结构是各种数据模型的共同基础,为了能够用某一 DBMS实现用户需求,还必须将概念结构进一步转化为相应的数据模型,这正是数据库逻辑结构设计所要完成的任务。它包括从 E-R图向关系模式转换和逻辑模式规范化及调整、实现。 9 【
25、正确答案】 D 【试题解析】 根据二叉树的性质:二叉树第 i(i 1)层上至多有 2i-1个结点。得到第5层的结点数最多是 16个。 10 【正确答案】 B 【试题解析】 数据库设计的目的实质上是设计出满足实际应用需求的实际关系模型。数据库技术的主要目的是有效地管理和存取大量的数据资源,包括:提高数据的共享性,使多个用户能够同时访问数据库中的数据;减小数据的冗余,以提高数据的一致性和完整性;提供数据与应用程序的独立性,从而减少应用程序的开发和维护代价。 11 【正确答案】 C 【试题解析】 程序中通过 for二重循环依次取二维数组中的数值进行与 t的累加。取数组中 的元素为 i行和符合循环条件
26、的 bjj列的数据。循环为 0, 1, 2行,对应 0, 1, 2歹 0。即 0, 1, 2。所以 1+0+1+2=4。 12 【正确答案】 B 【试题解析】 由于头尾指针不断前移,超出向量空间。这时整个向量空间及队列是满的却产生了 “上溢 ”现象。 13 【正确答案】 B 【试题解析】 程序中首先在第一个 for循环中将数组 a每一个元素赋值为 0, 1,2, 。然后在第二个循环中数组 p的第 i元素为 a中的第 i*(i+1),即 0, 2,6,第三个循环中数组 p中的每个元素值乘以 2,然后加上 5,累加。 14 【正确答案】 B 【试题解析】 由程序的 main函数入手,调用 fun函
27、数,其中参数为数组 a和3。 fun函数的功能是 for循环中由第一个数组元素开始到第三个元素进行累积。 15 【正确答案】 D 【试题解析】 题目程序中 “int, *p; ”是定义了一个指针变量 p, “*p=9; ”是将 p当前指向的指针赋为 9。指针 p在执行这个赋值操作前并没有初始化这个变量 p,所以会有 p未初始化的警告错误。 16 【正确答案】 B 【试题解析】 “int i”语句为定义了一个整型变量 i。 “int*p”为定义一个整型指针p。选项 A)中的 “int*p=&i; ”是定义整型指针变量 p,并指向整型 i的地址。选项B)中 “i=*p”语句是将 p指向的变量赋值给
28、 i,而指针 p没有初始化,所以选项 B)错误。选项 C)中 “p=0; ”表示 p指向 0的地址。选项 D)中 “&i”为取 i的地址,并赋值给 p。 17 【正确答案】 A 【试题解析】 题目中的定义初始化是定义一个整型变量 a,初始化为 3。而“int*p=&a; ”是定义一个整型指针变量 p,将变量 a的地址作为指针变量 p的初值。 *p是指针变量 p指向的存储单元的内容, 即变量值。所以 *p指向 a的值 3。 18 【正确答案】 B 【试题解析】 程序中的 “int x=1”定义 x为 int型变量,并赋值为 1。语句 “&y=x”中 “&”为引用运算符, y=x语句可以理解为 y
29、具有 x的地址,所以 y的值也是1,即输出为: 1-1。 19 【正确答案】 B 【试题解析】 由程序中的主函数 main入手,分别调用 fun1, fun2, fun3函数,得到输出结果。其中,三个函数都是实现两个形参的交换功能,只是参数传递的方式不同,有的是地址,有的是传值。第一个函数中参数采用的是值传递的 方式,形参的变化不影响实参。所以调用 fun1后,实参 a和 b并没有交换,仍然是AB。第二个调用中,实参 a采用的是地址,即传递的是地址,所以形参 a的改变会影响实参 a的值,即 BB。同理,调用 fun3后为 BA。 20 【正确答案】 C 【试题解析】 函数。 fun的类型为 v
30、oid没有任何返回值,函数中变量的改变,即参数的改变应该影响实参。应该是地址传递方式,即把引用型作为函数形参。类T是类的抽象,可以利用模板建立各种数据类型的类。所以补全函数的定义为“T&x, T&v, T&z”。 21 【正确答案】 A 【试题解析】 C+标识符命名的规则:只能由 a-z、 A-Z、 0-9、 _等字符组成,且数字不能开头,不能与系统保留字冲突。 22 【正确答案】 D 【试题解析】 面向对象程序设计的特点:标识惟一性,分类性,多态性,封装性,模块独立性好。 23 【正确答案】 C 【试题解析】 +在变量前面先执行自身加 1的运算,然后再进行其他运算。 +在变量后面先做其他运算
31、,再自身加 1。选项 D)的运算式是 (j+)+i,因为 +的优先级比 +高。 24 【正确答案】 A 【试题解析】 首先把 c d?c: d算出。结果为 2,表达式 a b?a: c d?c: d变为: a b?a: 2,结果为 1。 25 【正确答案】 A 【试题解析】 c+=10使得 c=12; a=b=10, a*=2使得 a=20; b =2, b=10 2,使得 b=5; c=12 2=0,所以输出值 20, 5, 0。 26 【正确答案】 C 【试题解析】 由主函数 main入手,定义了 TestClass1的对象 m,其中参数为 7和 9。 “m printa(); ”中 Te
32、stClass1中 printa为 “c printb(); ”,其中 c为TestClass2的对象,所以 printb为 TestClass2中的 “voidTestClass2: printb()”,即输出为 “a=7, b=9”。 27 【正确答案】 C 【试题解析】 由主函数入手,在 for循环中调用 fun函数,其中调用次数为 2次。 fun中 x为静态变量,有效到文件结束,所以第一次调用为x=x*(x+1)=1*(1+1)=2,第二次调用 2*(2+1)=6。 28 【正确答案】 D 【试题解析】 由主函数入手,在 for循环中调用 fun函数,其中调 用次数为 5。fun中 i
33、为静态变量,有效到文件结束。第一次调用 fun后为 s=1, a=1;第二次调用后 s=2, a=3第三次 s=3, a=6;第四次 s=4, a=10;第五次 s=5, a=15。 29 【正确答案】 C 【试题解析】 由主函数入手,定义变量 x、 y、 z,然后调用函数 fun,其中的参数为 (x-, y+, x+y)的计算结果和 z一的计算结果,所以调用 fun(13,8)计算结果为 21。 30 【正确答案】 D 【试题解析】 虚函数在运行阶段和类的对象绑定在一起,这样成为动态联编。虚函数声明只 能出现在类声明中虚函数原型中,而不能在成员的函数体实现的时候。必须由成员函数来调用或者通过
34、指针、引用来访问虚函数。如果通过对象名来访问虚函数,则联编在编译过程中认为是静态联编。 31 【正确答案】 A 【试题解析】 由主函数 main入手,定义外部变量 x和 y,调用函数 add。因为x, y为外部变量,所以 “intx(20), y(5); ”的赋值在 add也是有效的,即 add函数的运算结果为 25。 32 【正确答案】 C 【试题解析】 由主函数 main入手,定义 TestClass类的对象 cs1,执行cs1 val,其中 val为静态变量,根据 “intTestClass: val=0; ”初始化,TestClass中的 TestClass()val+; 构造函数执行
35、后, val值为 1。主函数中接着定义对象 cs2, cs3, cs4。执行 “cout cs2 val endl: ”中的 val值为 4。 33 【正确答案】 A 【试题解析】 在主函数中首先调用 TestClass中的 test函数输出,类中的 n为静态数据成员,可以为所有的对象共享这些数据,这里调用后 n等于 4。定义对象c1, c2调用构造函数后 n=6,所以主函数再次执行 “cout TestClass: test() endl: ”后, n等于 10。 34 【正确答案】 C 【试题解析】 此题考查的是内联函数的相关知识点。函数原型应指出函数名、返回值类型以及在调用函数时必须提供
36、的参数的个数和类型,因为要声明为内联函数,故应加 inline关键字。 35 【正确答案】 A 【试题解析】 此题考查的是类和对象的相关概念。类是将不同的数据和与这些数据相关的操作封装起来装在一起的集合体。对象是类的具体实例,也即类是对某一类对象的抽象,类和对象 之间可以说是数据类型与变量的关系。一个类可以有无数个对象。 36 【正确答案】 A 【试题解析】 因为成员函数可以在类体内定义,也可以在类体外定义,所以成员函数不一定都是内联函数;成员函数可以重载,可以设置参数的默认值,成员函数可以是静态的。 37 【正确答案】 C 【试题解析】 此题考查的是函数的性质。当调用无参函数时主函数并不将数
37、据传送给被调函数,且可以带回或不带回函数值。函数的递归调用就是直接或间接的调用自己。 38 【正确答案】 B 【试题解析】 此题考查的是虚函数的概 念。在成员函数的声明前面加上 virtual关键字,即可把函数声明为虚函数。虚函数可以是另一个函数的友元函数而不能是静态成员函数。 39 【正确答案】 A 【试题解析】 此题考查的是运算符重载的概念。 C+语言规定, =、 、 ()、 -以及所有的类型转换运算符只能作为成员函数重载,如果要重载为友元函数就必须重载为非成员函数。 40 【正确答案】 C 【试题解析】 此题考查的是函数模板。声明一个函数模板的格式是: template模板形参表声明函数声明, 函数体 其中的模板形参表声明 是由一个或多个 “模板形参 ”组成的,每个 “模板形参 ”可具有以下几种形式: typename参数名; class参数名;类型修饰参数名。