1、国家二级( C+)笔试模拟试卷 265及答案与解析 1 2 一个关系中属性个数为 1时,称此关系为 ( A)对应关系 ( B)单一关系 ( C)一元关系 ( D)二元关系 3 下列关于关系运算的叙述中正确的是 ( A)投影、选择、连接是从二维表的行的方向来进行运算 ( B)投影、选择、连接是从二维表的列的方向来进行运算 ( C)并、交、差是从二维表的列的方向来进行运算 ( D)以上三种说法都不对 4 5 6 在进行任何 C+流的操作后,都可以用 C+流的 有关成员函数检测流的状态:其中只能用于检测输入流状态的操作函数名称是 ( )。 ( A) fail ( B) eof ( C) bad (
2、D) good 7 8 以下程序的输出结果是 ( )。 main() int b33=O,1,2,0,1,2,0,1,2,i,j,t=1; for(i=0;i 3;i+) for(j=i;j =i;j+) t=t+bibj j; ( A) 2 ( B) 3 ( C) 4 ( D) 5 9 10 类模板 template class T class x() ,其中,友元函数 f成为从该类模板实例化的每个模板类的友元,则其说明应为 ( )。 ( A) friend void f(); ( B) friend void f(x T ( D) friend void C T: f(x T ( D) y
3、.operator/(operator-(x); 13 有如下的运算符重载函数定义: double operator+(inti,intk)return double(i+k); 但定义有错误,对这个错误最准确的描述是 ( )。 ( A) +只能作为成员函数重载,而这里的 +是作为非成员函数重载的 ( B)两个 int型参数的和也应该是 int型,而这里将 +的返回类型声明为 double ( C)没有将运算符重载函数声明为某个类的友元 ( D) C+已经提供了求两个 int型数据之和的运算符 +,不能再定义同样的运算符 14 有如下说明 : int a10 1,2,3,4,5,6,7,8,9
4、,10, * p a; 则数值为 9的表达式是 ( A) *p 9 ( B) * (p 8) ( C) * p 9 ( D) p 8 15 类模板的使用实际上是将类模板实例化成一个具体的 ( )。 ( A)类 ( B)对象 ( C)函数 ( D)模板类 16 若有如下语句 : #include iostream.h void main( ) int x 3; do x x 2; cout x; while(!( X) ) ; 则上面程序段 ( A)输出的是 1 ( B)输出的是 1和 2 ( C)输出的是 3和 0 ( D)是死循环 17 类 MyClass的定义如下,若要对 value赋值,
5、则下面语句正确的是 ( )。 class MyClass public: MyClass() MyClass(int i)value=new int(i); int*value; ; ( A) MyClass my; my value=10; ( B) MyClass my; *my value=10; ( C) MyClass my; my *value=10; ( D) MyClass my(10); 18 有如下程序: #include iostream using namespace std; class Point int x, y; public: Point(int x1=0,
6、int y1=0):x(x1), y(y1) int get()return x+y;) ; class Circle Point center; int radius; public: Circle(int CX, int cy, int r):center(cx, cy), radius(r) int get()return center. get()+radius; ; int main() circle c(3, 4, 5); cout c. get() end1; return (): 运行时的输出结果是 ( )。 A) 5 B) 7 C) 9 D) 12 19 下列语句中,与语句
7、“n=(a b?(b c?1:0):0);”的功能等价的是 ( )。 A) if(a = B) n=0; B) if(a B) |(b C) )n=1; else n=0; C) if(a B) if(b C) n=h else n=0; else n=0; D) if(a B) n=1; else if(b =C) n=1; else if(b C) n=1; else n=0; 20 有如下类定义 class MyClass public: Private: int data; ; 若要为 MyClass类重载流输入运算符,使得程序中可以 “cin obj;”形式输入 MyClass类的对
8、象 obj,则横线处的声明语句应为 ( )。 A) friend istream B) friend istream C) istream D) istream 21 如果表达式 -x/y中的 “-”和 “/”都是作为友元函数重载的运算符,采用运算符函数调用格式,该表达式还可表示 ( )。 ( A) operator/(x. operator-(), y) ( B) operator/(operator-(x), y) ( C) x. operator-().operator/(y) ( D) y. operator/(operator-(x) 22 下面描述中正确的是 _。 ( A) vir
9、tual可以用于声明虚函数 ( B)含有纯虚函数的类不可以用来创建对象 ( C)即使基类的构造函数没有参数,派生类也必须建立构造函数 ( D)静态数据成员可以通过成员初始化列表来初始化 23 在每个 c+ 程序中必须包含这样一个函数,该函数的函数名为 _ 。 ( A) main ( B) MAIN ( C) name ( D) function 24 下面程序错误的语句是 #include“iostream h“ void main() int A=0; int if(n=1|n=2)s=2; else s=n-fun(n-1); return s; void main( ) cout fun
10、(3); ( A) 1 ( B) 2 ( C) 3 ( D) 4 30 有以下程序: #include iestream using namespace std; int f(int n) if(n=1) return 1; else return f(n-1)+1; int main() int i, j=0; for(i=1; idatai; for (i=1; itemp j-; dataj+1 = temp; for(i=O;i using namespace std; int main() intx=3; int class Base public: 【 】 void fun() c
11、out 1; ; class Derived:public Base public: void fun() cout 2; int main() Base*p=new Derived; p- fun(); delete p; return 0; 45 程序段的输出结果是【 】。 int a=12, b=12; cout - -a “ “ +b; 46 C+语言标识符是以字母或 _开头的,由字母,数字和下划线组成的字符串。 47 多态具体体现运行和编译两个方面,在程序运行时的多态性通过继承和 _来体现,而程序编译时多态性体现函数和运符的重载上。 48 虚函数必 须是类的【 】。 49 多态性分为
12、两类:编译时的多态性和【 】。 50 表达式 x.operator+(y.operator+(0)还可以写成【 】。 国家二级( C+)笔试模拟试卷 265答案与解析 1 【正确答案】 D 【试题解析】 栈是一种特殊的线性表,栈是限定在表的一端进行插入和删除运算的线性表。 2 【正确答案】 C 3 【正确答案】 B 【试题解析】 A和 B 是互相矛盾的,答案必然是这两者之 _。在关系模型的数据语言中,常规的集合运算 (并、交、差、笛卡尔积等 ),是将关系 (即二维表 )看成是元组的集合,这些运算主要是从二维表的行的方向来进行的;投影、选择、连接等运算主要是从二维表的列的方向来进行运算。正确答案
13、是 B。 4 【正确答案】 D 5 【正确答案】 D 6 【正确答案】 B 【试题解析】 可以用文件流对象的成员函数来判别文件流当前的状态: fail,刚进行的操作失败时返回 true,否则返回 false; eof,进行输入操作时,若文件到达文件尾返回 true,否则返回 false; bad,如果进行了非法操作返回 true,否则返回false; good,刚 进行的操作成功时返回 true,否则返回 false。 7 【正确答案】 B 【试题解析】 数据库设计阶段主要包括需求分析、概念设计、逻辑设计和物理设计。其中逻辑设计的主要工作是将 E R图转换为关系模式。 8 【正确答案】 C 【
14、试题解析】 程序中通过 for二重循环依次取二维数组中的数值进行与 t的累加。取数组中的元素为 i行和符合循环条件的 bjj列的数据。循环为 0, 1, 2行,对应 0, 1, 2列。即 0, 1, 2。所以 1+0+1+2=4。 9 【正确答案】 C 10 【正确答案】 A 11 【正确答案】 D 【试题解析】 带有纯虚函数的类称为抽象类,抽象类中的纯虚函数没有具体的定义,所以不能说明抽象类的对象。 12 【正确答案】 B 【试题解析】 本题考核运算符的重载。假定已经作为某个类的成员函数重载了二元运算符 +,且 c1、 c2 都是该类的对象,则 c1。 operator+(c2)与 c1+c
15、2含义相同。如果 +作为该类的非成员函数重载,则 operator+(c1, c2)与 c1+c2含义相同。同理,运算符 “/”作为友元函数重载,则 (-x)/y与表达式 operator/(-x), y)相同。前缀运算符 “-”作为友元函数重载,则 -x与 operator-(x)相同,所以组合起来是operator/(operator-(x), y);,即 B选项。 13 【正确答案】 D 【试题解析】 此题考查的是运算符的重载。 C+语言规定,不能作为非成员函数重载的运算符有 =、 、 ()、 -以及所有的类型转换运算符,故选项 A)错误:运算符重载对返回值类型没有限制,故选项 B)错误
16、; C+并不强制要求非成员重载的运算符一定是某个类的友元,所以选项 C)错误;题目中重载的 “+”运算符 的两个参数都是 int类型,而 C+已经提供了求两个 int型数据之和的运算符 +,编译器无法区分应该调用哪一个,所以应该选择选项 D)。 14 【正确答案】 B 【试题解析】 按照 C语言的数组元素的引用方法,如数组元素 a0 ,可以用表达式 * (p 0) ,即 * p 来引用,对于数组元素 a1 ,可以用表达式 * (p 1) 来引用,在这里, p 1的值就是数组元素 a1 的地址,对此地址使用 “间接访问运算符 ”:* (p 1) 就代表存储单元 a1 ,注意一对圆括号不可少。同样
17、,对于数组元 素 a2 ,则可以用表达式 * (p 2) 来引用 ,对于数组元素 a9 ,可以用表达式 * (p 9) 来引用。因此,当指针变量 p指向 a数组的起始地址时,若 0i 10,则数组元素 ai 可以用表达式 * (p i) 来引用。 15 【正确答案】 A 【试题解析】 类模板就是把类中的数据分离出来,作为一个类的描述。 C+编译器根据类模板和特定的数据类型来产生一个类,类模板就是一个抽象的类。 16 【正确答案】 B 【试题解析】 dowhile 语句的一般格式为 do 循环体语句 while(表达式 ) ;,先执行循环体语句一次,再判断表达式的值,若为真则继续执行循环,否则终
18、止循环。本题中,先执行 x x 2,即为 1。判断表达式的值, !( x) 为真, x 0,继续循环。再次执行循环体语句后, x 2,此时表达式的值为 0,结束循环。 17 【正确答案】 D 【试题解析】 因题目中定义的指针 value是指向变量 i的,所以直接利用语句MyClass(int i)value=new int(i); 对 value进行赋值即可。 18 【正确答案】 D 19 【正确答案】 C 20 【正确答案】 A 21 【正确答案】 B 22 【正确答案】 A 23 【正确答案】 A 【试题解析】 每个 C+程序必须包含一个主函数 main。 24 【正确答案】 C 【试题解
19、析】 引用必须在第一时间进行赋值, int & B 没有在第一时间赋值故错误。注意:引用的方式,引用和指针应用的比较。 25 【正确答案】 A 【试题解析】 C+语言中 setfill 的意思是在空格的地方填上 setfill函数中的参数字符, setw 的意思是设置整个输出字符串的字符个数,本题 中用。宋代替空格。 26 【正确答案】 B 27 【正确答案】 C 28 【正确答案】 B 29 【正确答案】 A 【试题解析】 题中 fun 函数进行了递归调用,第 1次调用 :fun(3)n=3 s=3-fun(2),第二次调用时: fun(2)n=2 s=2,返回第一次调用后, s=3-2=1
20、。 30 【正确答案】 B 【试题解析】 本题考查的知识点是递归函数的调用。根据程序代码逐步分析: f(n)用来计算 n+(n-1)+1 ,在 f(n)定义内部又调用 f(n)自身,这就是 递归函数。 f(n)=f(n-1)+1,因此必须先计算出 f(n-1),而 f(n-1)=f(n-2)+1,又必须计算 f(n-2)。 由此类推,直到 n=1,返回后可以此计算出 f(n), f(n-1), f(1) 。 第 1次调用 f(n)时,形参 n 接收的值为 1,进入函数体后,由于满足 “n=1”,执行 return语句得到 1。第 2次调用 f(n)时, n 的值为 2,不满足条件 “n=1”,
21、执行 return f(n-1)+1,在这条语句中又调用 f(n-1)即 f(1),从而得到 f(2)的返回值为2。所以 j=1+2=3。 31 【正确答案】 B 【试题解析】 本题属于综合题,考查数组和循环语句两方面的知识。此题看起来很复杂,其实不然,根据程序逐步分析: 在程序第 1个 for语句中,为数组 data赋输入的值,即 2, 8, 4, 3。 第 2个 for语句是嵌套式循环,循环次数是 3次,即从 1到 3。第 1次循环时, i=1,执行 “j=i-1”后, j=0,然后把 data1的值赋给 temp,再进入 while循环。 while后的条件表达式 “dataj temp
22、&j =0”,就是当 data 刚 大于 temp,同时 j不小于 0时执行 while循环体。当 while条件表达式成立时,执行“dataj+1=dataj”,即当 data刚大于 dataj大于 dataj+1时,把它们俩的值交换一下,以此类推,最后实现把数组中的数从小到大排列起来。 最后一个 for语句用于打印经过程序处理后数组中的元素。 32 【正确答案】 C 33 【正确答案】 D 【试题解析】 虚函数一定不能定义为静态的。虚函数可以声明为友元,子类也不是必须重定义父类的虚函数,若在重定义虚函数时使用了 virtual,则该重定义函数不一定还是虚函数。 34 【正确答案】 A 【试
23、题解析】 第三行是由逗号表达式组成的语句,第四行是由条件表达式组成的语句,第五行 printf语句的输出项为逗号表达式,本题没有语法错误。 35 【正确答案】 B 36 【正确答案】 6 37 【正确答案】 类 【试题解析】 在面向对象方法中,把具有相同属性和方法的对象称为类,类是对象的抽象,对象是类的实例。 38 【正确答案】 n(n-1) 2 【试题解析】 冒泡排序法是通过相邻数据元素的交换逐步将 线性表变成有序。假设线性表的长度为 n,则在最坏的情况下,冒泡排序需要经过 n 2遍的从前往后的扫描和 n/2 遍的从后往前的扫描,需要的比较次数为 n(n-1) 2。 39 【正确答案】 29
24、 40 【正确答案】 对象 【试题解析】 将属性、操作相似的对象归为类,也就是说,类是具有共同属性、共同方法的对象的集合。 41 【正确答案】 有格式 42 【正确答案】 编译器。 【试题解析】 本题考查内联函数的基本概念。内联函数是通过编译嚣,只是在调用的时候,像宏一样展开。内联函数比普通函数 的效率更高。 43 【正确答案】 4 【试题解析】 C+程序中的引用实际上是为变量起个别名,其后的任何操作都相当于对原变量的操作。所以最后输出 4。 44 【正确答案】 virtual 45 【正确答案】 11 13 46 【正确答案】 下划线 47 【正确答案】 虚函数 48 【正确答案】 成员函数 【试题解析】 本题考核虚函数的概念。 C+中,只有类的成员函数才能说明为虚函数,这是因为虚函数仅适用于有继承关系的类对象,所以普通函数不能说明为虚函数。 49 【正确 答案】 运行时的多态性 【试题解析】 本题考核 C的多态性。在 C语言中,多态性可分为两类:编译时的多态性和运行时的多态性。 50 【正确答案】 x+y+或 x+(y+) 【试题解析】 因为 y.operator+(0)是对成员 y重载运算符,所以是成员重载,在参数表中又有一个参数,是重载后缀 +,即是 x+(y+)。