1、国家二级 C+机试(选择题)模拟试卷 18 及答案与解析 一、选择题 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 对长度为 n的线性表排序,在最坏情况下,比较次数不是 n(n 1)/2的排序方法是 ( )。 ( A)快速排序 ( B)冒泡排序 ( C)直接插入排序 ( D)堆排序 7 下列关于栈的叙述正确的是 ( )。 ( A)栈按 “先进先出 “组织数据 ( B)栈按 “先进后出 “组织数据 ( C)只能在栈底插入数据 ( D)不能删除数据 8 在数据库设计中,将 E R图转换成关系数据模型的过程属于 ( )。 ( A)需求分析阶段
3、( B)概念设计阶段 ( C)逻辑设计阶段 ( D)物理设计阶段 9 有三个关系 R、 S和 T如下:由关系 R和 S通过运算得到关系 T,则所使用的运算为 ( )。 ( A)并 ( B)自然连接 ( C)笛卡尔积 ( D)交 10 设有表示学生选课的三张表,学生 S(学号,姓名,性别,年龄,身份证号 ),课程 C(课号,课名 ),选课 SC(学号,课号,成绩 ),则表 SC的关键字 (键或码 )为( )。 ( A)课号,成绩 ( B)学号,成绩 ( C)学号,课号 ( D)学号,姓名,成绩 11 下列语句中,错误的是 ( )。 ( A) const int buffer=256; ( B)
4、const int temp; ( C) const double *point; ( D) const double *rt=new double(5.5); 12 有如下程序: int x=3; do x-=2; cout using namespace std; int main() int *p; *p = 9; cout ) 或 格式 2: if() else 关于上面的语法格式,下列表述中错误的是 ( )。 ( A) 部分可以是一个 if语句,例如 if(if(a=0) ) ( B) 部分可以是一个 if语句,例如 if() if() ( C)如果在 前加上逻辑非运算符 !并交换
5、和 的位置,语句功能不变 ( D) 部分可以是一个循环语句,例如 if() while() 15 下列符号中,正确的 C+标识符是 ( )。 ( A) enum ( B) 2b ( C) foo-9 ( D) _32 16 下列关于 C+函数的说明中,正确的是 ( )。 ( A)内联函数就是定义在另一个函数体内部的函数 ( B)函数体的最后一条语句必须是 return语句 ( C)标准 C+要求在调用一个函数之前,必须先声明其原型 ( D)编译器会根据函数的返回值类型和参数表来区分 函数的不同重载形式 17 运算符重载是对已有的运算符赋予多重含义,因此 ( )。 ( A)可以对基本类型(如 i
6、nt类型)的数据,重新定义 “+“运算符的含义 ( B)可以改变一个已有运算符的优先级和操作数个数 ( C)只能重载 C+中已经有的运算符,不能定义新运算符 ( D) C+中已经有的所有运算符都可以重载 18 下列有关内联函数的叙述中,正确的是 ( )。 ( A)内联函数在调用时发生控制转移 ( B)内联函数必须通过关键字 inline来定义 ( C)内联函数是通过编译器来实现的 ( D)内联函数函数体的最后一条语句必须是 return语句 19 下列运算符不能重载为友元函数的是 ( )。 ( A) = () () - ( B) + - + - ( C) = using namespace s
7、td; int main() void function(double val); double val; function(val); cout“,使得程序中可以 “cin obj;“的形式改变 MyClass类的对象 obj中数据成员 data的值,则横线处的声明语句应为 ( )。 ( A) friend istream ( B) friend istream ( C) istream ( D) istream 23 由于常对象不能被更新,因此 ( )。 ( A)通过常对象只能调用它的常成员函数 ( B)通过常对象只能调用静态成员函数 ( C)常对象的成员都是常成员 ( D)通过常对象可以
8、调用任何不改变对象值的成员函数 24 如下类定义: class AA int a; public: int getRef()const return / int getValue()const return a; / void set(int n)const a=n; / friend void show(AA aa)const couta = a; / static int g() return a; / void h(int b) Test:b = b; ; / private: int a; static int b; const int c; ; int Test:b = 0; 在标注
9、号码的行中,能被正确编译的是 ( )。 ( A) ( B) ( C) ( D) 32 有如下类声明: class SAMPLE int n; public: SAMPLE(int i=0):n(i) void setValue(int n0); ; 下列关于 getValue成员函数的定义中,正确的是 ( )。 ( A) SAMPLE:setValue(int n0) n=n0; ( B) void SAMPLE:setValue(int n0) n=n0; ( C) void setValue(int n0) n=n0; ( D) setValue(int n0) n=n0; 33 有如下程
10、序: #include using namespace std; class A public: A() cout using namespace std; class Base private: void fun1() const cout using namespace std; class Base1 public: Base1(int d) cout using namespace std; class Base public: void fun1() cout T cast(U u) return u; 其功能是将 U类型数据转换为 T类型数据。已知 i为 int型变量,下列对模板函
11、数cast的调用中正确的是 ( )。 ( A) cast(i); ( B) castopen(“file.dat“); 40 当使用 ifstream流类定义一个流对象并打开一个磁盘文件时,文件的默认打开方式为 ( )。 ( A) ios_base:in ( B) ios_base:in | ios_base:out ( C) ios_base:out ( D) ios_base:in & ios_base:out 国家二级 C+机试(选择题)模拟试卷 18 答案与解析 一、选择题 1 【正确答案】 C 【试题解析】 在数据流图中,用标有名字的箭头表示数据流。在程序流程图中,用标有名字的箭头表
12、示控制流。所以选择 C。 2 【正确答案】 A 【试题解析】 结构化程序设计的思想包括:自顶向下、逐步求精、模块化、限制使用 goto语句,所以选择 A。 3 【正确答案】 B 【试题解析】 软件设计中模块划分应遵循的准则是高内聚低偶合、模块大小规模适当、模块的依赖关系适当等。模块的划分应遵循一定的要求,以保证模块划分合理,并进一步保证以此为依据开发出的软件系统可靠性强,易于理解和维护。模块之间的耦合应尽可能的低,模块的内聚度应尽可能的高。 4 【正确答案】 B 【试题解析】 A)错误,可行性分析阶段产生可行性分析报告。 C)错误,概要设计说明书是总体设计阶段产生的文档。 D)错误,集成测试计
13、划是在概要设计阶段编写的文档。 B)正确,需求规格说明书是后续工作如设计、编码等需要 的重要参考文档。 5 【正确答案】 A 【试题解析】 算法原则上能够精确地运行,而且人们用笔和纸做有限次运算后即可完成。有穷性是指算法程序的运行时间是有限的。 6 【正确答案】 D 【试题解析】 除了堆排序算法的比较次数是 O(nlog2n),其他的都是 n(n 1)/2。 7 【正确答案】 B 【试题解析】 栈是按 “先进后出 “的原则组织数据的,数据的插入和删除都在栈顶进行操作。 8 【正确答案】 C 【试题解析】 E R图转换成关系模型数据则是把图形分析出来的联系反映到数据 库中,即设计出表,所以属于辑
14、设计阶段。 9 【正确答案】 D 【试题解析】 自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉,所以 B)错误。笛卡尔积是用 R集合中元素为第一元素, S 集合中元素为第二元素构成的有序对,所以 C)错误。根据关系 T 可以很明显的看出是从关系 R与关系 S 中取得相同的关系组所以取得是交运算,选择 D)。 10 【正确答案】 C 【试题解析】 学号是学生表 S 的主键,课号是课程表 C的主键,所以选课表 SC的关键字就应该是 与前两个表能够直接联系且能唯一定义的学号和课号,所以选择 C。 11 【正确答案】 B 【试题解析】 c
15、onst是一个 C+语言的关键字,它限定一个变量不允许被改变。使用 const在一定程度上可以提高程序的安全性和可靠性。限定符声明变量只能被读,必须初始化。 B 选项中没有初始化, C选项为指向常量的指针,定义时初始化与否均可,如果是 const * double point 形式,则为常指针,必须在定义时进行初始化, A、 C、 D都正确。 12 【正确答案】 C 【试题解析】 本题考查 do.while语句,执行 do.while语句时,先执行循环体内的语句,然后判断 while中表达式的值,表达式为非零时,返回重新执行循环体语句。在本题中,先执行循环体内的语句,输出 1,然后判断表达式,
16、为非零,且此时 x为 0;再次执行循环体时,输出 -2,然后判断表达式为 0,不执行,退出,所以答案为 C。 13 【正确答案】 D 【试题解析】 先定义指针变量,然后给指针变量赋初值有三种情况: 用取地址运算符 “&“将变量地址赋给指针变量,如 p=&a; 将一个指针变量中的地址赋给另一个指针变量,如 p=p1; 给指针 变量赋空值 0,如 q=0,表示该指针变量不指向任何变量。而不能用一个常量给指针变量赋初值,所以本题选 D。 14 【正确答案】 A 【试题解析】 本题考查 if语句, if语句的条件部分不能嵌套 if 语句,所以 A选项错误; B选项就是 if语句嵌套; C选项其实就是将
17、判断条件颠倒,然后执行语句也颠倒,所以效果一样; D选项也正确。 15 【正确答案】 D 【试题解析】 本题考查 C+标识符的命名规则,规定如下: 所有标识符可以由字母、数字和下画线组成,且必须以字母或下画线开头; C+的关键字不能作为标识 符; 大、小写字母表示不同意义,即代表不同的标识符,如 mun 和 Mun。A选项是 C+的关键字, B 选项不能以数字开头, C选项 “-“不能用于组成标识符。 16 【正确答案】 C 【试题解析】 一般函数进行调用时,要将程序执行权转到被调用函数中,然后再返回到调用它的函数中;而内联函数在调用时,是将调用表达式用内联函数体来替换,而不是在定义在另一个函
18、数体内,所以 A选项错误。函数可以没有返回值,所以就不需要 return了,如果被调函数在调用函数之前已经定义,那么就不需要声明,所以 C选项错误,正确选项为 D。 17 【正确答案】 C 【试题解析】 重载运算符的规则如下: C+不允许用户自己定义新的运算符,只能对已有的 C+运算符进行重载; C+不能重载的运算符只有 5个; 重载不能改变运算符运算对象的个数; 重载不能改变运算符的优先级和结合性; 重载运算符的函数不能有默认的参数; 重载的运算符必须和用户定义的自定义类型的对象一起使用,至少应有一个是类对象,即不允许参数全部是 C+的标准类型。故本题答案为 C。 18 【正确答案】 C 【
19、试题解析】 一般函数进行调用时,要将程序执行权转到被调 用函数中,然后再返回到调用它的函数中;而内联函数在调用时,是将调用表达式用内联函数体来替换,所以在调用时不发生控制转移。在类内部实现的函数都是内联函数,可以不用 inline定义;只有函数外部定义的内联函数才必须加关键字 inline。编译系统并非对内联函数必须使用内联,而且根据具体情况决定。内联函数不是必须要有返回值的。 19 【正确答案】 A 【试题解析】 关于运算符重载为友元函数有如下规定: 一般情况下,单目运算符最好重载为类的成员函数,双目运算符则最好重载为类的友元函数; 双目运算符 “=、() 、 -“不能重载为类的友元函数。所
20、以本题答案为 A。 20 【正确答案】 D 【试题解析】 本题考查函数调用及传值方式传递参数,执行函数 function 时,并没有将 3的值传回来,而 val又没有初始化,所以会输出一个不确定的值, D选项正确。 21 【正确答案】 C 【试题解析】 本题考查四种运算符作为非成员函数的重载的使用方法,根据重载规则,本题答案为 C, C项正确原型为: Fraction operator=( Fraction &)。 22 【正确答案】 A 【试题解析】 本题 考查重载流运算符 “,根据重载规则,本题答案为 A。 23 【正确答案】 A 【试题解析】 本题考查常对象的基本知识,常对象只能调用它的
21、常成员函数,而不能调用非 const函数,常对象的成员函数不一定都是常成员函数,只需保证其数据成员是常数据成员即可。所以本题选 A。 24 【正确答案】 B 【试题解析】 本题考查常成员函数,常成员函数只能引用本类中的数据成员,而不能修改它。所以本题答案为 B。 25 【正确答案】 D 【试题解析】 this 作用域是在类内部,当在类的非静态成员函数 中访问类的非静态成员时,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。另外,全局函数和静态函数都不能使用 this 指针。所以答案为 D。 26 【正确答案】 B 【试题解析】 在某基类中声明为 virtual 并在一个或多个派生类中被
22、重新定义的成员函数。虚函数必须是基类的非静态成员函数,其访问权限可以是 protected 或public。如果一个类包含了纯虚函数,称此类为抽象类。所以本题答案为 B。 27 【正确答案】 D 【试题解析】 本题考查派生类与基类的关系,派生类可以有多个直接 基类,而派生类有三种继承方式,在私有继承中,派生类的成员并不能访问基类的成员。如果基类中定义了缺省构造函数或根本没有定义任何一个构造函数时,在派生类构造函数的定义中可以省略对基类构造函数的调用。所以本题答案为 D。 28 【正确答案】 A 【试题解析】 本题考查公用继承对基类成员的访问属性。在公用继承中,基类的公用成员和保护成员在派生类中
23、保持原有的访问属性,其私有成员仍为基类私有。所以在本题中,在类外引用成员函数时,派生对象只能引用基类的公用成员函数 fun1,故本题答案为 A。 29 【正确答案】 D 【试题解析】 本题考查对象的初始化,类的数据成员是不能在声明类时初始化的,所以本题答案为 D。 30 【正确答案】 C 【试题解析】 本题考查默认构造函数和带参数的构造函数,题目中定义一个对象a(2)以及对象数组 b 3 ,共执行 4次构造函数,对象指针不调用构造函数。所以本题答案为 C。 31 【正确答案】 D 【试题解析】 只能通过构造函数的参数初始化列表对常数据成员进行初始化,本题中常数据成员为 c。 通过默认构造函数初
24、始化 c,所以不正确。常成员函数只能引用本类中数据成员,而不 能修改它,所以 不正确。静态成员函数由于没有this 指针,所以不能访问本类中的非静态成员,所以 错误。 32 【正确答案】 B 【试题解析】 本题考查在类外定义类的成员函数,需要使用作用域限定符 “:“,属于基础知识,本题答案为 B。 33 【正确答案】 B 【试题解析】 本题考查派生类的构造函数和析构函数,在定义一个派生类的对象时,先调用基类的构造函数,然后再执行派生类的构造函数。对象释放时,先执行派生类的析构函数,再执行基类的析构函数。所以本题答案为 B。 34 【正确答案】 B 【试题解析】 本题考查保护继承中派生类对基类的
25、访问属性,受保护继承中,基类的公用成员和保护成员在派生类中成了保护成员,其私有成员仍为基类私有,保护基类的所有成员在派生类中都被保护起来,在类外不能访问,所以 错误。 35 【正确答案】 D 【试题解析】 本题考查派生类的构造函数和析构函数,在定义一个派生类的对象时,先调用基类的构造函数,然后再执行派生类的构造函数,对象释放时,先执行派生类的析构函数,再执行基类的析构函数。本题中定义一个派生类对象时,分别调用基类的构造函数,所以分别输出 21。 36 【正确答案】 B 【试题解析】 在某基类中声明为 virtual 并在一个或多个派生类中被重新定义的成员函数,本题中定义了一个派生类对象 obj
26、,执行 f函数后,将派生类对象 obj转化为基类对象,由于 fun1不是虚函数,所以输出基类的 fun1;而 fun2是虚函数,所以输出派生类的 fun2,所以本题答案为 B。 37 【正确答案】 B 【试题解析】 本题考查类模板的基本概念。类模板的定义和声明都以关键字template开头。关键字后面是一个用逗号分隔的模板参数表,用尖括号 “括起来,这 个表被称为类模板的模板参数表。类模板是类的抽象,类是类模板的实例。类模板使类中的一些数据成员和成员函数的参数或返回值可以取任意的数据类型。所以 B 选项正确。 38 【正确答案】 D 【试题解析】 本题考查函数模板的基本运用,属于基础知识。函数模板实际上是建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型代表,这个通用函数就是函数模板。函数模板可以设定默认参数,这样在调用模板函数时就可以省略实参,函数模板的实例就是一个函数的定义。所以本题答案为D。 39 【正确答案】 A 【 试题解析】 本题考查对文件流输入的操作,可以调用文件流的成员函数 pen,一般形式如下:文件流对象 .open(磁盘文件名,输入 /输出方式 )。根据以上格式,可以判断 A选项错误。 40 【正确答案】 A 【试题解析】 本题考查对文件输入流的操作, ifstream流类为输入流类,默认的文件输入流打开方式为 ios: in。故答案为 A。