1、国家二级( C+)机试模拟试卷 22及答案与解析 一、选择题 1 某二叉树有 5个度为 2的结点及 3个度为 l的结点,则该二叉树中结点个数共有( )个。 ( A) 3 ( B) 6 ( C) 10 ( D) 14 2 程序流程图中的菱形框表示的是 ( )。 ( A)事实描述 ( B)行动方案 ( C)逻辑判断 ( D)流动方向 3 软件开发过程主要分为需求分析、设计、编码与测试 4个阶段。其中,产生 “软件需求规格说明书 ”的阶段是 ( )。 ( A)需求分析 ( B)软件设计 ( C)软件编码 ( D)软件测试 4 在数据库技术中,实体集之间的联系可以是一对一或一对多的,那么 “学生 ”和
2、“可选课程 ”的联系为 ( )。 ( A)一对一 ( B)多对多 ( C)一对多 ( D)无联系 5 人员基本信息一般包括身份证号、姓名、性别、年龄等。其中可以做主关键字的是 ( )。 ( A)身份证号 ( B)姓名 ( C)性别 ( D)年龄 6 若表达式 “(x+(y-z)*(m n)+3”中的变量均为 doublc型,则表达式值的类型为( )。 ( A) double ( B)整型 ( C) double或整型 ( D)无法判断 7 有如下循环语句: for(int i=50; i20; i-=2)coutz y=z”的值为 ( )。 ( A) 0 ( B) 10 ( C) 20 ( D
3、) 40 20 有如下语句序列: int x=-10; while(+x) 运行时, while循环体的执行次数为 ( )。 ( A) 0 ( B) 1 ( C) 9 ( D) 10 21 有如下语句序列: int arr22=9, 8, 7, 6; int*p=arr0+1; cout using namespace std; class Test public: Test(int a)data=a; Test() void print()cout using namespace std; class Base public: void print()cout using namespace
4、 std; class Base public: Base(int a): idata(a) void print()cout using namespace std; Class Fraction “分数 ”类 public: Fraction(double a, double b): num(a), den(b) Fraction() 重载取负运算符 “-”,返回一个分数对象,其分子是原来分子的相反数 Fraction operator-() _ return f; void print()cout using namespace std; template T Min(T*array,
5、int n) T min=array0; for(int i=1; i+) if(arrayix)x=*pa; return X: 若在执行了语句: int x5=23, 46, 78, 55, 16后,通过表达式 “xfun(x, 5)”调用该函数,则得到的返回值为 ( )。 ( A) 23 ( B) 46 ( C) 78 ( D) 55 32 有如下函数定义: int Xfun(int x) int y=x; int x=10; y+=x; return x+y; 通过表达式 “Xfun(5)”调用该函数,则得到的返回值为 ( )。 ( A) 10 ( B) 20 ( C) 30 ( D)
6、 40 33 假定 Xcs是一个类,该类中一个成员函数的原型为 “Xcs*abc; ”,则在类外定义时对应的函数头为 ( )。 ( A) Xes ( B) abc ( C) override ( D) overabc 34 要使 由语句 “Date FirstDay; ”定义的对象 FirstDay的值为 2010午 1月 1日,横线处应填 ( )。 class Date public: Date(_): year(y), month(n), day(d) private: int year, month, day;依次表示年、月、日 ; ( A) int m=2000, int y=1, i
7、nt d=1 ( B) int y=2000, int n=1, int m=1 ( C) int y=2000, int m=1, int d=1 ( D) int d=2000, int m=1, int y=1 35 在有理数类 Rational中重载插入运算符 “ using namespace std; class GrandChild public: GrandChild()strcpy(name, “Unknown“); const char*get Name()constreturn name; ) virtual char*get Address()const=0; priv
8、ate: char name20; ; class GrandSon: public GrandChild public: GrandSon(char*name) char*get Address()constreturn“Shanghai“; ; int main() GrandChild*gs=new GrandSon(“Feifei“); coutgetName()get Address() void fun(int n) void main() int n; coutn; if(n 1) eout class TC1 int a; public: * * * * * * * * 1 *
9、 * * * * * * * return a=x; void showa() coutz值为 0, y=z值为 1,两者结果为0。 20 【正确答案】 C 【试题解析】 考查了 x+和 +x之间的区别,前者是先用 x后再加 1,后者是先给 x加 1再使用 x。从 -9到 -1执行 9次后循环结束。 21 【正确答案】 c 【试题解析】 该题考查了数组和指针之间的转化,数组的第 1个元素地址就是指针的首地址, *p=&a00,则 amn=*(p+m)+n。 22 【正确答案】 D 【试题解析】 每次循环都需要得出指针当前的数字值,则由字符转化为数字的表达式是 “*p-0”。 23 【正确答案】
10、 C 【试题解析】 友元函数的声明方式是 friend返回值类型函数名称 (形参列表 )。 24 【正确答案】 B 【试题解 析】 简单的类对象的实例化,只需要对该类数组进行实例化即可。 25 【正确答案】 A 【试题解析】 考查了类的继承方式,派生类访问基类的成员 public函数,则继承方式也应该是 public。 26 【正确答案】 D 【试题解析】 与上题一致,也是考查了类的继承方式, Derived 类继承了 Base类的构造函数。 27 【正确答案】 D 【试题解析】 考查了重载运算符 “-”的操作,在重载函数中需要取分子的相反数。 28 【正确答案】 C 【试题解析】 考查了模板
11、函数的用法 ,第 1个参数是数组名称,第 2参数是数组元素个数。 29 【正确答案】 B 【试题解析】 y+=x-等同于 y=y+x, x=x-1, x-是先用原始 x 然后再自减,于是y=6+5=11, x=4,最后 x+y=11+4=15。 30 【正确答案】 A 【试题解析】 首先执行 do,一次不用判断,第 3次 i变为 3,但 i*i=910,条件 i*i10不成立,结束循环。 31 【正确答案】 C 【试题解析】 函数 Xfun 的作用是找出最大 的数。 32 【正确答案】 B 【试题解析】 通过参数传递将 5传给 x,由语句 “y=x; ”,知 y=5,又由 x=10将局部变量
12、x重新赋值,而 y+=x使得 y=15,于是 x+y=5+15=20,返回 20。 33 【正确答案】 C 【试题解析】 override是指派生类重写基类的虚函数。 34 【正确答案】 C 【试题解析】 给各个参数赋值。 35 【正确答案】 A 【试题解析】 此题为重载操作符 “”,返回一个输入输出类型。 36 【正确答案】 D 【试题解析】 这是一个平方运算的函数模板,由上述实例可知道模板有一个形参n,函数名为 square,所以可得模板 template(type n)typesquare(type n)return n*n; 。 37 【正确答案】 B 【试题解析】 把数组的首尾交换后
13、,对在第一位和最后一位之间的子数组执行同样的首尾交换操作,此子数组为原数组长度减去 2,所以答案为 size-2。 38 【正确答案】 B 【试题解析】 因为构造函数的参数 data 与类成员 data同名,所以需要加上类名Sample:。 39 【正确答案】 D 【试题解析】 将静态数据成员 data初始化为 0的语句是 “Sample:data=0; ”,因为 Sample是一个公共类,可以这样进行初始化。 40 【正确答案】 A 【试题解析】 定义 Grandson(”Feifei”)时,继承类型中构造函数没有任何操作,则在基类构造函数中把 name赋值为 ”Unknown”,所以 gs
14、- get Name()输出 name的值 ”Unknown”。 gs- get Address()执行继承类中的 get Address 函数,输出 ”Shanghai”。总共输出 “Unknown住在 Shanghai”。 二、基本操作题 41 【正确答案】 本题考查了考生对名字空间的了解情况。 (1)“cout“please input a string: “end1; ”应改为 “std: cout“please input a string: “std: end1; “。 (2)“namespace std; ”应改为 “using namespace std; ”。 【试题解析】
15、本题中程序使用的头文件是 iost ream,没有 h 后缀 ,该头文件中定义的所有标识符都位于 C+标准库名字空间 std内。所以语句 “cout“please input a string: “end1; ”中的 cout和 end1都要加上 std:前缀才能使用。如果要使后面所有语句都能用到 std名字空间中的内容,省略加 std:前缀的麻烦,可以使用语句 “using namespace std; ”。 三、简单应用题 42 【正确答案】 int i: for(i=0; i(n; i+) 外层循环,要打印的行数 int j; for(j=0; jn-i-1; j+) 循环打印空格 co
16、ut; for(; jn; j+)循环打印 A cout“A“; coutend1; 打印每一行的回车符 【试题解析】 本题利用外层循环打印每一行。内层循环分为打印空格和打印 A。打印空格由第一个位置到第 n-i-1。打印 A,是由打印完空格开始一直到行结柬。在外循环中打印每一行的结束符。 四、综合应用题 43 【正确答 案】 (1)应添加 “int seta(int x)”。 (2)应添加 “class TC3: public TC1, private TC2”。 (3)应添加 “int c; ”。 (4)应添加 “seta(x); ”。 【试题解析】 本题第 1处要求 “完成类 TC1的成
17、员函数 seta定义,定义 seta对象x为 int类型 ”。类的成员函数是函数的一种,它与一般函数的区别是,它是一个类的成员,出现在类体中。所以类 TC1中的成员函数,就是在 TC1中定义题目中要求的参数为 int x的 seta函数,即 “int seta(int x)”。 第 2处要求 “完成类 TC1(公有 )和类 TC2(私有 )派生类 TC3的定义 ”。从已有的类产生一个新的子类,称为类的派生。声明派生类的一般形式为 “Class派生类名: 继承方式 基类名 ”。根据声明派生类的一般形式,这里补全 “class TC3:public TC1, private TC2”。 第 3处要求 “定义类 TC3中的私有成员 c为 int”。在类 TC3中的 private数据成员区域,定义 int c,即在第 3处补全 “int c; ”。第 4处要求 “完成 sete中对基类的变 量 a的赋值 ”。基类为 TC1, sete对于该类 a的赋值,是 int seta(int x)函数的赋值,即 “seta(x); ”