7. 设四位数P=0110和Q=1010,则

按位逻辑运算的等价运算及其结果为
。
A.

B.

C.PQ=0010 D.P+Q=1110
A B C D
D
[解析]
本题要求我们熟练掌握逻辑与、或、非运算。
计算本题时,首先要对Q进行逻辑非运算,其结果为0101。然后,再与P进行逻辑与运算,得到结果为0100。最后,再与Q进行逻辑或运算,得到最后结果为1110。计算出P+Q,结果为1110,而答案B明显是错误的。
20. 设U是所有属性的集合,X、Y、Z都是U的子集,且Z=U-X-Y。下面关于多值依赖的叙述中,不正确的是
。
A.若X→→Y,则X→→Z
B.若X→Y,则X→→Y
C.若X→→Y,且X包含Y,则X→Y
D.若Z=

,则X→→Y
A B C D
D
[解析]
本题考查多值依赖的相关知识。
多值依赖的定义如下:设U是关系模式R的属性集,X和Y是U的子集,Z=R-X-Y,小写的x、y、z表示属性集x、y、z的值。对于R的关系r,在r中存在元组(x,y1,z1)和(x,y2,z2)时,也就存在元组(x,y2,z1)和(x,y1,z2),那么称多值依赖X→→Y在模式R上成立。
若X→→Y,则X→→Z,这是多值依赖的补规则;若X→Y,则X→→Y,这是多值依赖的复制性;若X→→Y,且X包含Y,则显然有X→Y成立。
27. 树的基本遍历策略可分为先根遍历和后根遍历;二叉树的基本遍历策略可分为先序遍历、中序遍历和后序遍历。这里,我们把由树转换得到的二叉树叫做这棵树对应的二叉树。结论
是正确的。
- A.树的先根遍历序列与其对应的二叉树的先序遍历序列相同
- B.树的后根遍历序列与其对应的二叉树的后序遍历序列相同
- C.树的先根遍历序列与其对应的二叉树的中序遍历序列相同
- D.以上都不对
A B C D
A
[解析]
本题考查树的遍历和树向二叉树的转换。
树的遍历方法中的前序遍历是首先访问根结点,然后从左到右按前序遍历根结点的各棵子树;后序遍历是首先从左到右按后序遍历根结点的各棵子树,然后访问根结点。而二叉树的遍历方法中前序遍历是首先访问根结点,然后按前序遍历根结点的左子树,再按前序遍历根结点的右子树;后序遍历是首先按后序遍历根结点的左子树,然后按后序遍历根结点的右子树,再访问根结点;中序遍历是首先按中序遍历根结点的左子树,然后访问根结点,再按中序遍历根结点的右子树。
树的转换思想是根据孩子的存储方式而来的,其步骤是:
(1)在各兄弟结点之间用虚线相连;
(2)对每个结点仅保留它与其最左一个孩子的连线,抹去该结点与其他孩子之间的连线;
(3)把虚线改为实线从水平方向向下旋转45℃,成右斜下方向,原树中实线成左斜下方向。
下面,我们来看一个例子,图A是一棵普通树,图B是其转换来的二叉树。

图A的前序遍历为:A,B,E,C,F,H,G,D
图A的后序遍历为:E,B,H,F,G,C,D,A
图B的前序遍历为:A,B,E,C,F,H,G,D
图B的中序遍历为:E,B,H,F,G,C,D,A
图B的后序遍历为:E,H,G,F,D,C,B,A
由此可见,树的前序遍历序列与其对应的二叉树的前序遍历序列相同。
32. 假设双链表结点的类型如下:
Typedef struct linknode
{int data; /*数据域*/
struct linknode *llink; /*llink是指向前驱结点的指针域*/
struct linknode *rlink; /*rlink是指向后续结点的指针域*/
}bnode
下面给出的算法段是要把一个q所指的新结点作为非空双向链表中的p所指结点的前驱结点插入到该双链表中,能正确完成要求的算法段是
。
- A.q->rlink=p;q->llink=p->llink;p->llink=q;p->llink->rlink=q;
- B.p->llink=q;q->rlink=p;p->llink->rlink=q:q->llink=p->llink;
- C.q->llink=p->llink:q->rlink=p;p->llink->rlink=q;p->llink=q;
- D.以上都不对
A B C D
C
[解析]
本题考查链表的操作问题。
在链表中插入一个结点时,首先需要确定插入的位置,题目中是插入在p结点前面,因此,需要把插入结点q的rlink指向p,q的llink指向p的llink。然后,需要把p的llink指向q,p的前驱结点的rlink也指向q。
53. 对于类定义:
class A{
public:
virtual void func1( ){}
void func2( ){}
};
class B:public A{
public:
void func1(){cout<<"class B func 1"<<end1;}
virtual void func2(){cout<<"class B func 2"<<end1;}
};
下面叙述正确的是
。
- A.A∷func2()和B∷func1()都是虚函数
- B.A∷func2()和B∷func1()都不是虚函数
- C.B∷func1()是虚函数,而A∷func2()不是虚函数
- D.B∷func1()不是虚函数,而A∷func2()是虚函数
A B C D
C
[解析]
本题考查的是C++中类的继承和虚函数。要解答此类题目,我们需要对类的继承和虚函数有很清楚的认识。
继承是面向对象程序设计最重要的特征,指的是一个新类从已有的类那里获得其已有的特征,并可以添加新的特征。
虚函数的作用是允许在派生类中重新定义与基类同名的函数,并且可以通过基类指针或引用来访问基类和派生类中的同名函数。
题目中类A声明了两个函数,一个虚函数func1()和一个函数func2(),类B继承于类A,那就继承了类A的特征,因此,类B中的func1()是一个虚函数。在类B中又把 func2()声明成虚函数,给func2()增加了新的特征,所以,类B中的两个函数都是虚函数,而在类A中只有func1()是虚函数。