1、国家二级( C+)机试模拟试卷 15及答案与解析 一、选择题 1 从工程管理角度,软件设计一般分为两步完成,它们是 ( )。 ( A)概要设计与详细设计 ( B)数据设计与接口设计 ( C)软件结构设计与数据设计 ( D)过程设计与数据设计 2 下列叙述中正确的是 ( )。 ( A)一个逻辑数据结构只能有一种存储结构 ( B)数据的逻辑结构属于线性结构,存储结构属于非线性结构 ( C)一个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数据处理的效率 ( D)一个逻辑数据结构可以有多种存 储结构,且各种存储结构影响数据处理的效率 3 下列关于完全二叉树的叙述中,错误的是 ( )。 ( A)
2、除了最后一层外,每一层上的结点数均达到最大值 ( B)可能缺少若干个左右叶子结点 ( C)完全二叉树一般不是满二叉树 ( D)具有结点的完全二叉树的深度为 log2n+1 4 如果进栈序列为 e1、 e2、 e3、 e4,则可能的出栈序列是 ( )。 ( A) e3、 e1、 e4、 e2 ( B) e2、 e4、 e3、 e1 ( C) e3、 e4、 e1、 e2 ( D)任意顺序 5 原因排除法属于 ( )。 ( A)软件调试方法 ( B)黑盒测试方法 ( C)白盒测试方法 ( D)动态测试方法 6 在 E-R图中,用来表示实体的图形是 ( )。 ( A)矩形 ( B)椭圆形 ( C)菱
3、形 ( D)三角形 7 下列数据模型中,具有坚实理论基础的是 ( )。 ( A)层次模型 ( B)网状模型 ( C)关系模 ( D)以上 3个都是 8 对长度为 n的线性表进行顺序查找,在最坏情况下所需要的比较次数为 ( )。 ( A) log2n ( B) n 2 ( C) n ( D) n+1 9 数据流图用 于抽象描述一个软件的逻辑模型,数据流图由一些特定的图符构成。下列图符名标识的图符不属于数据流图合法图符的是 ( )。 ( A)控制流 ( B)加工 ( C)数据存储 ( D)源和潭 10 数据库设计的根本目标是要解决 ( )。 ( A)数据共享问题 ( B)数据安全问题 ( C)大量
4、数据存储问题 ( D)简化数据维护 11 结构化分析方法是面向 ( )的自顶向下、逐步求精进行需求分析的方法。 ( A)对象 ( B)数据结构 ( C)数据流 ( D)目标 12 对线性表进行二分法检索, 其前提条件是 ( )。 ( A)线性表以顺序方式存储,并按关键码值排序 ( B)线性表以顺序方式存储,并按关键码的检索频率排序 ( C)线性表以链式方式存储,并按关键码值排序 ( D)线性表以链式方式存储,并按关键码的检索频率排序 13 结构化程序设计的 3种结构是 ( )。 ( A)顺序结构、选择结构、转移结构 ( B)分支结构、等价结构、循环结构 ( C)多分支结构、赋值结构、等价结构
5、( D)顺序结构、选择结构、循环结构 14 已知数据表 A中每个元素距其最终位置不远,为了节省时间,应采用 的算法是( )。 ( A)堆排序 ( B)直接插入排序 ( C)快速排序 ( D)直接选择排序 15 在数据管理技术的发展过程中,经历了人工管理阶段、文件系统阶段和数据库系统阶段。其中数据独立性最高的阶段是 ( )。 ( A)数据库系统 ( B)文件系统 ( C)人工管理 ( D)数据项管理 16 以下选项中合法的实型常数是 ( )。 ( A) 5E2 0 ( B) E-3 ( C) 2 ( D) 1 3E 17 下列字符串中可以用做 C+语言标识符的是 ( )。 ( A) 1234 (
6、 B) foobar ( C) virtual ( D) 34var 18 下列关于 C+函数的说明中,正确的是 ( )。 ( A)内联函数就是定义在另一个函数体内部的函数 ( B)函数体的最后一条语句必须是 return语句 ( C)标准 C+要求在调用一个函数之前,必须先声明其原型 ( D)编译器会根据函数的返回值数型和参数表来区分函数的不同重载形式 19 若有如下语句: #include void main() int x=3: do x=x-2; cout void main() int*p, *q, a, b; p=&a; cout p; ( A) *P表示的是指针变量 P的地址 (
7、 B) p表示的是变量 a的地址,而不是变量 a的值 ( C) *p表示的是指针变量 P的值 ( D) *p只能用来说明 P是一个指针变量 22 下列有关复制构造函数的描述中错误的是 ( )。 ( A)复制构造函数是一种构造函数 ( B)复制构造函数与一般的构造函数一样,可以设置多个形参 ( C)每一个类中都必须有一个复制构造函数 ( D)复制构造函数的功能是用一个 已知对象去初始化一个正在创建的对象。 23 假定其中的 x的单位是角度且不考虑 的值的精度,则与数学公式 等价的 C+语言表达式是 ( )。 ( A) sqrt(cos(x) ( B) sqrt(abs(cos(x*3 14 18
8、0) ( C) sqrt(abs(cos(x*( 180) ( D) sqrt(fabs(cos(x*3 14 180) 24 函数 swap(a, n)可完成对 a数组从第 1个元素到第 n个元素两两交换。其中b0=1; b1=2; swap(b, 2)。在运行调用函数中的语句后 , b0和 b1的值分别为( )。 ( A) 1, 1 ( B) 1, 2 ( C) 2, 2 ( D) 2, 1 25 有以下程序: #includeiostream h) void fun(int a, int b, int c) a=456, b=567, c=678; void main() int x=1
9、0, y=20, z=30; fun(x, y, z); cout fun1(char a, char b)char c; c=a; a=b; b=c; fun2(char*a, char 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; funl(a, b); putchar(a); putchar(b); a=A b=B; fun2(&a, b); putchar(a); putchar(b); a=A; b=B; fun3(&
10、a, &b); putchar(a); putchar(b); putchar( n); ( A) BABBAB ( B) ABBBBA ( C) ABBABA ( D) ABABBA 29 下面程序的结果是 ( )。 #include iostream h class A int a; public: A(): a(1) void showa()cout #include(stdlib h) class TestClass public: int x, y; TestClass()x=y=0; TestClass(int a, int b)x=a; y=b; void disp() cout
11、(“x=“ using namespace std; class A public: A()cout int x=5; int fun(int a) int c; void main() int x=3, a=4; x=x+fun(a); cout class TC int i: public: TC(): void display(); TC(): ; * * * * * * * * error* * * * * * * * TC: TC() cout #include(cmath #define NUM 50 int ANUMNUM= 1, 3, 5, 7, 9), 11, 13, 15,
12、 17, 19), 21, 23, 25, 27, 29), 31, 33, 35, 37, 39), 41, 43, 45, 47, 49) ; boolisPrime(int n) if(n=1) return false; if(n=2) retUrn true; for(int i=2; i(n 2; i+) if(n i=0) return false; return true; int sum(int ANUMNUM, int n) int main() cout class TC1 public: * * * * * * * * 1 * * * * * * * * ; class
13、 TC2: public TC1 public: void GetName() cout(参数函数 ),因此第 1处应改为 “TC: TC()”,默认构造函数没有参数。由第 2处 “TC: display()”后的语句看,这是在类外实现 TC函数,因此也有作用域运算符使用错误问题, display函 数返回值为 void,因此第 2处的语句应改为 “void TC: display()”。由第 3处的语句 “TC: TC()”可知,显然这里是在类外实现析构函数,析构函数是一个特殊的函数,它的名称和类名相同,并在前面加 “ ”字符,用来与构造函数加以区别,因此第 3处的语句应改为“TC: TC(
14、)”。 三、简单应用题 42 【正确答案】 int re=0; for(int i=0; i(n; i+) for(int j=0; j(n; j+) if(!isPrime(Aij) 判断是否是素数 ,不是素数则累加 re=re+Aij; return re: 【试题解析】 矩阵 ANUMNUM是二维矩阵, sum函数的参数 n给出了矩阵 A的具体维数,因此矩阵 A中共含有 nn个有效数。 ANUMNUM中的元素可表示为 Aij,其中 i表示元素所在行数, j表示元素所在的列数, i、 j分别从 0到n-1范围内变化,因此设置内外两层循环可逐个遍历整个矩阵寻找非质数。函数isPrime提供了
15、判断质数的方法,对每个元素 Aij,调用函数 isPrime(Aij),判断函数的返回值是否为假,如果为假,说明不是质数,应该累加起来。 四、综合应用题 43 【正确答案】 (1)应添加 “virtual void GetName()=0; ”。 (2)应添加 “const char*GetName2()”。 (3)应添加 “TC2(char*str)”。 (4)应添加 “m_stri=0; ”。 【试题解析】 本题第 1处要求 “在类 TC1中定义接口函数 GetName,为纯虚函数 ”。在 C+中,在基类中用 virtual声明成员函数为虚函数。纯虚函 数是在声明虚函数时被 “初始化 ”为
16、 0的函数,即 “virtual void GetName()=0; ”。第 2处要求“函数 GetName2实现获得名字的缓存,但只获得读允许操作这个缓存 ”。只能引用数据成员,而不能修改,所以使用常成员函数,其一般形式为 “const函数类型函数名 ”,即 “const char*GetName2()”。第 3处要求 “实现 TC2的构造函数 ”。 TC2的构造函数与类 TC2的名称应该相同,而且第 3处的大括弧中是对字符数组 str的操作,所以类 TC2的构造函数中的参数为 str,即这里补全为“TC2(char*str)”。第 4处要求 “完成 TC2的构造函数,实现对名字的处理 ”,补全类 TC2的构造函数,构造函数中的名字变量 str对应于类 TC中的成员变量m_str,所以这里补全变量赋值操作 “m_stri=0; ”。