单项选择题10. 现有表示患者和医疗的关系如下:P(P#,Pn,Pg,By),其中P#为患者编号,Pn为患者姓名,Pg为性别,By为出生日期,Tr(P#,D#,Date,Rt),其中D#为医生编号,Date为就诊日期,Rt为诊断结果。检索在1号医生处就诊且诊断结果为感冒的病人姓名的表达式是______。
A.

B.π
P#(σ
D#=1∧Rt='感冒'(Tr))
C.σ
D#=1∧Rr='感冒'(Tr)
D.π
Pn(σ
D#=1∧Rt='感冒'(Tr))
A B C D
A
[解析] π表示投影运算,针对属性:σ表示选择运算,针对元组:∧为关系交:∞表示自然连接。首先在Tr表中选择D#为1且就诊且诊断结果为感冒的记录σD#=1∧Rt='感冒'(Tr),并检索出这些记录中患者的编号πP#(σD#=1∧Rr='感冒'(Tr)),检索结果与表P进行自然连接生成中间表πP#(σD#=1∧Rt='感冒'(Tr))∞P,最后在中间表中检索患者的姓名πPn(πP#(σD#=1∧Rt='感冒'(Tr))∞P)。故本题答案为A选项。
16. 定义学生选修课程的关系模式如下:
S(S#,Sn,Sd,Sa)(其属性分别为学号、姓名、所在系、年龄);
C(C#,Cn,P#)(其属性分别为课程号、课程名、先选课);
SC(S#,C#,G)(其属性分别学号、课程号和成绩)。
检索选修了课程号为2且成绩不及格的学生的姓名的表达式是______。
A.σ
C#=2∧G<60(SC)
B.π
Sn(π
S#(σ
C#=2∧G<60(SC)))
C.

D.

A B C D
24. 下列程序的输出结果是______。
#include<stdio.h>
void main()
{int a=0,b=1,c=2;
if(++a>0‖++b>0)
++c;
printf("%d,%d,%d",a,b,c);
}
- A.0,1,2
- B.1,2,3
- C.1,1,3
- D.1,2,2
A B C D
C
[解析] 本题考查if语句。先判断if语句的条件是否成立,因为++a=1>0,所以条件成立,又因为是进行逻辑或运算,在已知其中一个运算对象为真的情况下,不必判断另外一个运算对象的真假,即不进行++b操作,就可以直接得出整个表达式的值为逻辑1,执行下面的++c。
32. 线性表L=(α
1,α
2,α
3,…,α
i,…,α
n),下列说法正确的是______。
- A.每个元素都有一个直接前件和直接后件
- B.线性表中至少要有一个元素
- C.表中诸元素的排列顺序必须是由小到大或由大到小
- D.除第一个元素和最后一个元素外,其余每个元素都有一个且只有一个直接前件和直接后件
A B C D
D
[解析] 线性表可以为空表;第一个元素没有直接前件,最后一个元素没有直接后件;线性表的定义中,元素的排列并没有规定大小顺序。
37. 运行下列程序时,若输入数据为“321”,则输出结果是______。
main()
{int num,i,j,k,s;
scanf("%d",&num);
if(num>99)
s=3:
else if(num>9)
s=2:
else
s=1;
i=num/100;
j=(num-i*100)/10;
k=(num-i*100-j*10);
switch(s)
{ case 3:printf("%d%d%d\n",k,j,i);
break;
case 2:printf("%d%d\n",k,j);
case 1:printf("%d\n",k);
}
}
A B C D
A
[解析] 本题考查if...else语句和switch语句。scanf函数通过键盘读入num的值。因为num=321>99,所以s=3,i=3,j=2,k=1。因为s=3,所以执行case 3,输出k、j、i的值,然后通过break结束程序。