二级C++笔试-407
(总分:87.00,做题时间:90分钟)
一、选择题(总题数:35,分数:62.00)
1.下列关于关系运算的叙述中正确的是
A) 投影、选择、连接是从二维表的行的方向来进行运算
B) 并、交、差是从二维表的列的方向来进行运算
C) 投影、选择、连接是从二维表的列的方向来进行运算
D) 以上三种说法都不对


(分数:2.00)
 A.
 B.
 C. 
 D.
解析:[解析] 在关系模型的数据语言中,一般除了运用常规的集合运算(并、交、差、笛卡尔积等)外,还定义了一些专门的关系运算,如投影、选择,连接等运算.前者是将关系看成是元组的集合,这些运算主要是从二维表的行的方向来进行的;后者主要是从二维表的列的方向来进行运算。周此,选项A与B错误,选项C正确。
2.下列关于类定义的说法中,正确的是
A) 类定义中包括数据成员和函数成员的声明
B) 类成员的缺省访问权限是保护的
C) 数据成员必须被声明为私有的
D) 成员函数只能在类体外进行定义


(分数:2.00)
 A. 
 B.
 C.
 D.
解析:[解析] 本题考查的知识点是:类的定义。类中缺省的访问权限是私有的(private),所以选项B) 不正确:类的数据成员和函数成员的访问控制权限均可被声明为公有 (public)、私有(priate)和保护(protected)中的任意一种,所以选项C) 不正确;成员函数的实现即可以在类体内定义,也可以在类体外定义,所以选项D) 不正确。故本题应该选择A。
3.下面程序的运行结果为( )。
构造函数可以被重载#include<iostream.h>
void swap(int &a,int b)

int temp;
temp=a++;
a=b:
b=temp;

void main()

int a=2,b=3;
swap(a,b);
cout<<a<<","<<b<<endl;

A) 2,3 B) 3,2 C) 2,2 D) 3,3


(分数:2.00)
 A.
 B.
 C.
 D. 
解析:[解析] 本题考查引用调用,因为函数swap引用调用参数a,所以在swap函数中a的变化会改变主函数中a的值,即a自加1,但b的值并未改变。
4.有3个关系R、S和T,如下:

由关系R和S通过运算得到关系T,则所使用的运算为
A) 并 B) 自然连接 C) 笛卡儿积 D) 交


(分数:2.00)
 A.
 B.
 C.
 D. 
解析:[解析] 在关系运算中,交的定义如下:设R1和R2为参加运算的两个关系,它们具有相同的度n,且相对应的属性值取自同一个域,则R1∩R2为交运算,结果仍为度等于n的关系,其中,交运算的结果既属于R1又属于R2。
5.当使用ofstream流类定义一个流对象并打开一个磁盘文件时,文件的默认打开方式为( )。
A) ios base::in B) ios_base::binary
C) ios base::in|ios base::out D) ios base::out


(分数:2.00)
 A.
 B.
 C.
 D. 
解析:[解析] 此题考查的是文件输入输出流的基本知识。对于 ofstream流,mode的默认值为ios::out。另外,对于ifstream流,mode参数的默认值为ios::in。
6.对下列二叉树

进行中序遍历的结果是
A) ACBDFEG B) ACBDFGE
C) ABDCGEF D) FCADBEG


(分数:1.00)
 A. 
 B.
 C.
 D.
解析:[解析] 二叉树的中序遍历递归算法为:如果根不空,则(1)按中序次序访问左子树;(2)访问跟结点;(3)按中序次序访问右子树。否则返回。本题中,根据中序遍历算法,应首先按照中序次序访问以C为根结点的左子树,然后再访问根结点P,最后才访问以E为根结点的右子树。遍历以C为根结点的左子树同样要遵循中序遍历算法,因此中序遍历结果为ACBD;然后遍历根结点F;遍历以E为根结点的右子树,同样要遵循中序遍历算法,因此中序遍历结果为EG。最后把这三部分的遍历结果按顺序连接起来,中序遍历结果为ACBDFEG。因此,本题的正确答案是A。
7.当使用fstram流类定义一个流对象并打开一个磁盘文件时,文件的隐含打开方式为
A) ios::in B) ios::out C) ios::int | ios::out D) 没有



(分数:2.00)
 A.
 B.
 C.
 D. 
解析:[解析] C++中没在规定文件打开时的隐含打开方式,因此考生在写程序是必须指定打开方式,否则将出现错误。
8.下列对字符数组进行初始化的语句正确的是.
A) chara[]="Hello";
B) chara[][]='H','e','l','l','o';
C) char a[5]="Hello";
D) chara[2][5]="Hello","World":


(分数:1.00)
 A. 
 B.
 C.
 D.
解析:[解析] 本题考查对字符数组的初始化。A) 选项中,数组a在定义后紧跟初始化的情况下可省略数组长度,其最终数组长度由所赋字符串常量的长度给定。A) 选项是正确。
B) 选项中,a是一个二维数组,二维数组也能在定义时被初始化。如果对全部元素都赋初值,则定义数组时第一维的大小可以忽略,但第二维的大小不能省略。故B) 选项是错误。
C) 选项和D) 选项都忽略了字符串的大小要比字符串中的字符数多1这一点,造成了数组的越界。
9.一个人有一个身份证号码,一个身份证号码对应一个人。实体“人”和实体“身份证号码”存在的联系是
A) 一对一 B) 一对多 C) 多对多 D) 无定义


(分数:2.00)
 A. 
 B.
 C.
 D.
解析:[解析] 一个人有一个身份证号码,一个身份证号码对应一个人。则实体“人”和实体“身份证号码”之间存在一对一联系。
10.当一个类的某个函数被说明为virtual时,该函数在该类的所有派生类中 ______。
A) 都是虚函数
B) 只有被重新说明时才是虚函数
C) 只有被重新说明为virtual时才是虚函数
D) 都不是虚函数


(分数:2.00)
 A. 
 B.
 C.
 D.
解析:
11.以下关于私有和保护成员的叙述中,不正确的是
A) 私有成员不能被外界引用,保护成员可以
B) 私有成员不能被派生类引用,保护成员在公有继承下可以
C) 私有成员不能被派生类引用,保护成员在保护继承下可以
D) 私有成员不能被派生类引用,保护成员在私有继承下可以


(分数:2.00)
 A. 
 B.
 C.
 D.
解析:[解析] 私有成员和保护成员都不能被外界引用,这与继承方式无关。
12.有如下程序:
#include<iostream>
using namespace std;
class TestClass1

public:
virtual void fun()cout<<"1";
;
class TestClass2: public TestClass1

public:
TestClass2()cout<<"2";
;

class TestClass3:public TestClass2

public:
virtual void fun()TestClass2::fun();cout<<"3";
;
int main()

TestClass 1 aa,*p;
TestClass2 bb;
TestClass3 cc;
p=&cc;
P->fun();
return 0;

执行上面程序的输出是( )。
A) 1122 B) 2112 C) 2213 D) 2223


(分数:2.00)
 A.
 B.
 C. 
 D.
解析:[解析] 主函数中定义TestClass1的对象aa,*p对象指针,TestClass2的对象bb以及TestClass3的对象cc。p指向cc,TestClass3为TestClass2的派生类,构造函数输出2。TestClass3中fun函数中为TestClass2中的。fun,调用TestClass2的构造函数,输出2。“p->fun();”,TestClass2继承于TestClass1中的fun,所以输出1。然后输出TestClass3中的“cout
<<”3””,即输出3。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。