1、国家二级(C+)机试模拟试卷 159 及答案解析(总分:86.00,做题时间:90 分钟)一、选择题(总题数:40,分数:80.00)1.程序流程图中带有箭头的线段表示的是( )。(分数:2.00)A.图元关系B.数据流C.控制流D.调用关系2.结构化程序设计的基本原则不包括( )。(分数:2.00)A.多态性B.自顶向下C.模块化D.逐步求精3.软件设计中模块划分应遵循的准则是( )。(分数:2.00)A.低内聚低耦合B.高内聚低耦合C.低内聚高耦合D.高内聚高耦合4.在软件开发中,需求分析阶段产生的主要文档是( )。(分数:2.00)A.可行性分析报告B.软件需求规格说明书C.概要设计说明
2、书D.集成测试计划5.算法的有穷性是指( )。(分数:2.00)A.算法程序的运行时间是有限的B.算法程序所处理的数据量是有限的C.算法程序的长度是有限的D.算法只能被有限的用户使用6.对长度为 n 的线性表排序,在最坏情况下,比较次数不是 n(n-1)2 的排序方法是( )。(分数:2.00)A.快速排序B.冒泡排序C.直接插入排序D.堆排序7.下列关于栈的叙述正确的是( )。(分数:2.00)A.栈按“先进先出”组织数据B.栈按“先进后出”组织数据C.只能在栈底插入数据D.不能删除数据8.在数据库设计中,将 ER 图转换成关系数据模型的过程属于( )。(分数:2.00)A.需求分析阶段B.
3、概念设计阶段C.逻辑设计阶段D.物理设计阶段9.有三个关系 R、S 和 T 如下: (分数:2.00)A.并B.自然连接C.笛卡尔积D.交10.设有表示学生选课的三张表,学生 S(学号,姓名,性别,年龄,身份证号),课程 C(课号,课名),选课 SC(学号,课号,成绩),则表 SC 的关键字(键或码)为( )。(分数:2.00)A.课号,成绩B.学号,成绩C.学号,课号D.学号,姓名,成绩11.下列语句中,错误的是( )。(分数:2.00)A.const int buffer=256;B.const int temp;C.const double*point;D.const double*rt
4、=new double(55);12.有如下程序: int x=3; d0 x 一=2; coutx; while(!(一一 x); 执行这个程序的输出结果是( )。(分数:2.00)A.1B.3 0C.1 2D.死循环13.有如下程序: #includeiostream using namespace std; int main() intp; *p=9; cout”The value at p:”*p;return 0; 编译运行程序将出现的情况是( )。(分数:2.00)A.编译时出现语法错误,不能生成可执行文件B.运行时一定输出:The value at p:9C.运行时一定输出:Th
5、e value at p:*9D.运行时有可能出错14.if 语句的语法格式可描述为: 格式 1:if(条件)语句 或 格式 2:if(条件)语句 1 else语句 2 关于上面的语法格式,下列表述中错误的是( )。(分数:2.00)A.条件部分可以是一个 if 语句,例如 if(if(a=0)B.语句部分可以是一个 if 语句,例如 if()if()C.如果在条件前加上逻辑非运算符!并交换语句 1和语句 2的位置,语句功能不变D.语句部分可以是一个循环语句,例如 if()while()15.下列符号中,正确的 C+标识符是( )。(分数:2.00)A.enumB.2bC.foo 一 9D._
6、3216.下列关于 C+函数的说明中,正确的是( )。(分数:2.00)A.内联函数就是定义在另一个函数体内部的函数B.函数体的最后一条语句必须是 return 语句C.标准 C+要求在调用一个函数之前,必须先声明其原型D.编译器会根据函数的返回值类型和参数表来区分函数的不同重载形式17.运算符重载是对已有的运算符赋予多重含义,因此( )。(分数:2.00)A.可以对基本类型(如 int 类型)的数据,重新定义“+”运算符的含义B.可以改变一个已有运算符的优先级和操作数个数C.只能重载 C+中已经有的运算符,不能定义新运算符D.C+中已经有的所有运算符都可以重载18.下列有关内联函数的叙述中,
7、正确的是( )。(分数:2.00)A.内联函数在调用时发生控制转移B.内联函数必须通过关键字 inline 来定义C.内联函数是通过编译器来实现的D.内联函数函数体的最后一条语句必须是 return 语句19.下列运算符不能重载为友元函数的是( )。(分数:2.00)A.=()( )一B.+ 一 + 一一C. = =D.+= 一= *=20.有如下程序: #includeiostream using namespace std; int main() void function(double val); double val: function(val); coutval: return 0:
8、 void function(double val) val=3: 编译运行这个程序将出现的情况是( )。(分数:2.00)A.编译出错,无法运行B.输出:3C.输出:30D.输出一个不确定的数。21.下面是重载为非成员函数的运算符的函数原型,其中错误的是( )。(分数:2.00)A.Fraction operator+(Fraction,Fraction);B.Fraction operator 一(Fraction);C.Fraction ;下列关于 getValue 成员函数的定义中,正确的是( )。(分数:2.00)A.SAMPLE:setvalue(int n0)n=n0;B.Voi
9、d SAMPLE:setValue(intn0)n=n0;C.void setValue(int n0)n=n0;D.setVahe(int n0)n=n0;33.有如下程序: #includeiostream using namespace std; class A pubUc: A()cout”A”; -A()cout”一 A”; ; class B:public A A*P; public: B()cout“B”;P=new A(); 一 B()cout”-B”;delete p; ; int main() B obj; return 0; 执行这个程序的输出结果是( )。(分数:2.0
10、0)A.BAAABAB.ABABAAC.BAABAAD.ABAABA34.有如下程序: #includeiostream using namespace std; class Base pfivme: void funl()constcout”funl”; protected: void fun2()constcout”fun2”; public: void fun3()coastcout”fun3”; ; class Derived:protected Base public: void fun4()constcout”fun4”; ; int main() Derived obj; obj
11、funl(); objfun2(); 0bjfun3(); objfun4(); return 0; 其中有语法错误的语句是( )。(分数:2.00)A.B.C.D.35.有如下程序: #includeiostream using namespace std; class Basel public: Basel(int d)coutd; 一 Basel() ; class Base2 public: Base2(int d)coutd; 一 Base2() ;class Derived:public Base1,Base2 public: Deftved(int a,int b,int c,i
12、nt d):Base1(b),Base2(a),b1(d),b2(c) private: int b1; int b2: ; int main() Derived d(1,2,3,4);retum 0; 执行这个程序的输出结果是( )。(分数:2.00)A.1234B.2134C.12D.2136.有如下程序: #includeiostream using namespace std; class Base public: void funl()cout”Basen”; virtual void fun2()cout”Basen”; ; class Derived:public Base pu
13、blic: void funl()cout”Derivedn”; void fun2()cout”Derivedn”; ;void f(Baseclass Stackpublic: virtual void push(char c)=0; virtual char pop()=0;;class ArrayStack:public Stack char*P; int maxSize; int top;public: ArrayStack(int s) top=0; maxSize=s;/*found*p=_; 一 ArrayStack() /*found*_;void push(char c)
14、if(top=maxSize) cerr”Overflow!n”; return; *found*_; top+; char pop() if(top=0) cerr”Underflow! n”; return0; top-;/* found*_;;void f(Stack for(int i=0;isize 一 1;i+) out vi ”,”; outvsize 一 1 ); ; void writeToFile(const char*); maincpp #include”ValArrayh” ValArray:ValArray(const ValArray v1print(cout);
15、 coutendl; cout”ValArray v2=”; v2print(cout); coutendl; writeToFile(”); return 0;(分数:2.00)_国家二级(C+)机试模拟试卷 159 答案解析(总分:86.00,做题时间:90 分钟)一、选择题(总题数:40,分数:80.00)1.程序流程图中带有箭头的线段表示的是( )。(分数:2.00)A.图元关系B.数据流C.控制流 D.调用关系解析:解析:在数据流图中,用标有名字的箭头表示数据流。在程序流程图中,用标有名字的箭头表示控制流。所以选择 C。2.结构化程序设计的基本原则不包括( )。(分数:2.00)A.
16、多态性 B.自顶向下C.模块化D.逐步求精解析:解析:结构化程序设计的思想包括:自顶向下、逐步求精、模块化、限制使用 goto 语句,所以选择 A。3.软件设计中模块划分应遵循的准则是( )。(分数:2.00)A.低内聚低耦合B.高内聚低耦合 C.低内聚高耦合D.高内聚高耦合解析:解析:软件设计中模块划分应遵循的准则是高内聚低偶合、模块大小规模适当、模块的依赖关系适当等。模块的划分应遵循一定的要求,以保证模块划分合理,并进一步保证以此为依据开发出的软件系统可靠性强,易于理解和维护。模块之间的耦合应尽可能的低,模块的内聚度应尽可能的高。4.在软件开发中,需求分析阶段产生的主要文档是( )。(分数
17、:2.00)A.可行性分析报告B.软件需求规格说明书 C.概要设计说明书D.集成测试计划解析:解析:A 错误,可行性分析阶段产生可行性分析报告。c 错误,概要设计说明书是总体设计阶段产生的文档。D 错误,集成测试计划是在概要设计阶段编写的文档。B 正确,软件需求规格说明书是后续工作如设计、编码等需要的重要参考文档。5.算法的有穷性是指( )。(分数:2.00)A.算法程序的运行时间是有限的 B.算法程序所处理的数据量是有限的C.算法程序的长度是有限的D.算法只能被有限的用户使用解析:解析:算法原则上能够精确地运行,而且人们用笔和纸做有限次运算后即可完成。有穷性是指算法程序的运行时间是有限的。6
18、.对长度为 n 的线性表排序,在最坏情况下,比较次数不是 n(n-1)2 的排序方法是( )。(分数:2.00)A.快速排序B.冒泡排序C.直接插入排序D.堆排序 解析:解析:除了堆排序算法的比较次数是 O(nlog 2 n),其他的都是 n(n1)2。7.下列关于栈的叙述正确的是( )。(分数:2.00)A.栈按“先进先出”组织数据B.栈按“先进后出”组织数据 C.只能在栈底插入数据D.不能删除数据解析:解析:栈是按“先进后出”的原则组织数据的,数据的插入和删除都在栈顶进行操作。8.在数据库设计中,将 ER 图转换成关系数据模型的过程属于( )。(分数:2.00)A.需求分析阶段B.概念设计
19、阶段C.逻辑设计阶段 D.物理设计阶段解析:解析:ER 图转换成关系模型数据则是把图形分析出来的联系反映到数据库中,即设计出表,所以属于逻辑设计阶段。9.有三个关系 R、S 和 T 如下: (分数:2.00)A.并B.自然连接C.笛卡尔积D.交 解析:解析:自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉,所以 B 错误。笛卡尔积是用 R 集合中元素为第一元素,S 集合中元素为第二元素构成的有序对,所以 C 错误。根据关系 T 可以很明显地看出是从关系 R 与关系 S 中取得相同的关系组所以取得是交运算,选择 D。10.设有表示学生
20、选课的三张表,学生 S(学号,姓名,性别,年龄,身份证号),课程 C(课号,课名),选课 SC(学号,课号,成绩),则表 SC 的关键字(键或码)为( )。(分数:2.00)A.课号,成绩B.学号,成绩C.学号,课号 D.学号,姓名,成绩解析:解析:学号是学生表 s 的主键,课号是课程表 c 的主键,所以选课表 sc 的关键字就应该是与前两个表能够直接联系且能唯一定义的学号和课号,所以选择 C。11.下列语句中,错误的是( )。(分数:2.00)A.const int buffer=256;B.const int temp; C.const double*point;D.const doubl
21、e*rt=new double(55);解析:解析:const 是一个 C+语言的关键字,它限定一个变量不允许被改变。使用 conat 在一定程度上可以提高程序的安全性和可靠性。限定符声明变量只能被读,必须初始化。B 选项中没有初始化,C 选项为指向常量的指针,定义时初始化与否均可,如果是 const*double point 形式,则为常指针,必须在定义时进行初始化,A、C、D 都正确。12.有如下程序: int x=3; d0 x 一=2; coutx; while(!(一一 x); 执行这个程序的输出结果是( )。(分数:2.00)A.1B.3 0C.1 2 D.死循环解析:解析:本题考
22、查 dowhile 语句,执行 dowhile 语句时,先执行循环体内的语句,然后判断while 中表达式的值,表达式为非零时,返回重新执行循环体语句。在本题中,先执行循环体内的语句,输出 1,然后判断表达式,为非零,且此时 x 为 0;再次执行循环体时,输出一 2,然后判断表达式为 0,不执行,退出,所以答案为 C。13.有如下程序: #includeiostream using namespace std; int main() intp; *p=9; cout”The value at p:”*p;return 0; 编译运行程序将出现的情况是( )。(分数:2.00)A.编译时出现语法
23、错误,不能生成可执行文件B.运行时一定输出:The value at p:9C.运行时一定输出:The value at p:*9D.运行时有可能出错 解析:解析:先定义指针变量,然后给指针变量赋初值有三种情况:用取地址运算符“ ;下列关于 getValue 成员函数的定义中,正确的是( )。(分数:2.00)A.SAMPLE:setvalue(int n0)n=n0;B.Void SAMPLE:setValue(intn0)n=n0; C.void setValue(int n0)n=n0;D.setVahe(int n0)n=n0;解析:解析:本题考查在类外定义类的成员函数,需要使用作用域
24、限定符“:”,属于基础知识,本题答案为 B。33.有如下程序: #includeiostream using namespace std; class A pubUc: A()cout”A”; -A()cout”一 A”; ; class B:public A A*P; public: B()cout“B”;P=new A(); 一 B()cout”-B”;delete p; ; int main() B obj; return 0; 执行这个程序的输出结果是( )。(分数:2.00)A.BAAABAB.ABABAA C.BAABAAD.ABAABA解析:解析:本题考查派生类的构造函数和析构函
25、数,在定义一个派生类的对象时,先调用基类的构造函数,然后再执行派生类的构造函数。对象释放时,先执行派生类的析构函数,再执行基类的析构函数。所以本题答案为 B。34.有如下程序: #includeiostream using namespace std; class Base pfivme: void funl()constcout”funl”; protected: void fun2()constcout”fun2”; public: void fun3()coastcout”fun3”; ; class Derived:protected Base public: void fun4()c
26、onstcout”fun4”; ; int main() Derived obj; objfunl(); objfun2(); 0bjfun3(); objfun4(); return 0; 其中有语法错误的语句是( )。(分数:2.00)A.B. C.D.解析:解析:本题考查保护继承中派生类对基类的访问属性,受保护继承中,基类的公用成员和保护成员在派生类中成了保护成员,其私有成员仍为基类私有,保护基类的所有成员在派生类中都被保护起来,在类外不能访问,所以错误。35.有如下程序: #includeiostream using namespace std; class Basel public:
27、 Basel(int d)coutd; 一 Basel() ; class Base2 public: Base2(int d)coutd; 一 Base2() ;class Derived:public Base1,Base2 public: Deftved(int a,int b,int c,int d):Base1(b),Base2(a),b1(d),b2(c) private: int b1; int b2: ; int main() Derived d(1,2,3,4);retum 0; 执行这个程序的输出结果是( )。(分数:2.00)A.1234B.2134C.12D.21 解析
28、:解析:本题考查派生类的构造函数和析构函数,在定义一个派生类的对象时,先调用基类的构造函数,然后再执行派生类的构造函数,对象释放时,先执行派生类的析构函数,再执行基类的析构函数。本题中定义一个派生类对象时,分别调用基类的构造函数,所以分别输出 21。36.有如下程序: #includeiostream using namespace std; class Base public: void funl()cout”Basen”; virtual void fun2()cout”Basen”; ; class Derived:public Base public: void funl()cout”
29、Derivedn”; void fun2()cout”Derivedn”; ;void f(Baseclass Stackpublic: virtual void push(char c)=0; virtual char pop()=0;;class ArrayStack:public Stack char*P; int maxSize; int top;public: ArrayStack(int s) top=0; maxSize=s;/*found*p=_; 一 ArrayStack() /*found*_;void push(char c) if(top=maxSize) cerr”O
30、verflow!n”; return; *found*_; top+; char pop() if(top=0) cerr”Underflow! n”; return0; top-;/* found*_;;void f(Stack for(int i=0;isize 一 1;i+) out vi ”,”; outvsize 一 1 ); ; void writeToFile(const char*); maincpp #include”ValArrayh” ValArray:ValArray(const ValArray v1print(cout); coutendl; cout”ValArr
31、ay v2=”; v2print(cout); coutendl; writeToFile(”); return 0;(分数:2.00)_正确答案:(正确答案:size=othersize; 把对象数组的大小赋值给 size V=Dew intothersize ; 根据对象数组的大小动态分配数组 v for(int i=0;isize;+i) vi=othervi; 遍历整个对象的数组把值 othervi放到数组 v 中)解析:解析:主要考查考生对复制构造函数的掌握。由函数名:ValArray:ValArray(const。ValArray&other),知道要复制的对象是 other,对由 ValArray 类的成员:int*v;int size;知道要复制的内容是动态数组 v 及整型变量 size。动态数组要使用 new 语句分配内存,最后利用 for 循环语句来完成复制过程。