杭 州 师 范 大 学
2018 年招收攻读硕士研究生入学考试题
考试科目代码: 861
考试科目名称: 软件专业基础
说明:考生答题时一律写在答题纸上,否则漏批责任自负。
第一部分、C程序设计
一、单选题(每题1分,共15分)
1. 假设有定义:
int k;
下面程序段编译运行的情况是_____。
for (k=1; k; k++)
printf ("%d ", k);
A.能运行, 正常结束 B.以上说法都不对 C.编译错误 D.能运行, 是死循环
2.循环语句
while (!x&&!y)
中的循环条件表达式等价于
A.!(x!=0||y!=0) B.!(x==0 && y==0) C.!(x==0 || y==0) D.x=0 && y=0
3. 若定义
char s[2][3]={“ab”, “cd”}, *p=(char *)s;
那么下列表达式语法正确,并且其值与 s[1][1]相等的表达式(并非一定与其等价)是
A.*(p+4) B.*(s+3) C.*(p+3) D.*s+2
4. 对于int x, y;
语句
if (x < 0)
y = -1;
else if (!x)
y = 0;
else
y = 1;
等价于
A.B.C.D.if (x != 0) if (x > 0) y = 1; else y = -1; if (x>=0) y=0; if(x) y=1; else y=-1;y=0; if (x>=0) if(x) y=1; else y=-1;y=0; if (x!=0) if(x>0) y=1; else y=-1;
5. 要求函数的功能是交换x和y中的值,且通过正确调用返回交换结果。能正确实现此功能的函数是
A.B.void funa(int x , int y){ int t; t=x;x=y;y=t;} void funa(int *x , int *y){ int t = *x; *x = *y; *y = t;}C.D.void funa(int *x , int *y){ int *p; *p=*x;*x=*y;*y=*p;} int funa(int *x , int *y){ *x=*y;*y=*x;}
6. 对于如下定义:
int k,a[10],*p=a;
哪个表达式是不正确的
A.a++ B.p++ C.a[0]=k D.*p++=2
7. 下列描述不正确的是
A.全局变量定义在函数外部 B.静态本地变量分配在全局变量所在的地方
C.静态本地变量定义在函数外部 D.本地变量定义在函数内部
8.有如下定义:
int x[]={1,2,3},*p=x,y;
则
y=*p++;
相当于_____
A.y=1, x++ B.y=2, p=x+1 C.y=*p, p++ D.y=2, p=&x[1]
9. 与
while( *s++ = *t++ );
等价的程序段是
A.B.C.D.do { *s++ = *t++; } while ( *t );while ( *t ) *s++ = *t++; do { *s = *t++; } while ( *s++ );while ( *s ) *s++ = *t++;
10. 有以下结构体说明和变量定义,指针p、q、r依次指向一个链表中的三个连续结点。
struct node
{
int data
struct node *next ;
} *p, *q, *r;
现要将q和r所指结点的先后位置交换,同时要保持链表的连续,以下错误的程序段是
A.r->next=q; q->next=r->next; p->next=r;
B.p->next=r; q->next=r->next; r->next=q;
C.q->next=r->next; p->next=r; r->next=q;
D.q->next=r->next; r->next=q; p->next=r;
11. 有以下程序
void WriteStr(char *fn,char *str)
{
FILE *fp;
fp=fopen(fn,"w");
fprintf(fp, "%s", str);
fclose(fp);
}
int main()
{
WriteStr("t1.dat","start");
WriteStr("t1.dat","end");
return 0;
}
程序运行后,文件t1.dat中的内容是
A.start B.endrt C.startend D.end
12.语句
while(x%3) a++;
中的表达式
x%3
等价于_______.
A.x%3!=0 B.x%3==1 C.x%3==2 D.x%3==0
13.当文件打开出现错误时,fopen返回的是?
A.没有返回就导致程序退出了 B.-1 C.1 D.0
14.在一个链表中,要把s所指的一个结点插入到p所指的一个结点后面去,正确的语句是:
A.s->next=p; p->next=s; B.s->next=p¬->next; p=s;
C.p->next=s; s->next=p; D.s->next=p->next; p->next=s;
15.下列数组定义,不正确的是 _______.
A.int a[1][3]; B.int m[][3]={1,2,3,4,5,6};
C.int x[2][]={1,2,4,6}; D.int x[2][2]={1,2,3,4};
二、问答题(每小题3分,共15分)
1. 语句
if (4/5 > 3/4)
a=1;
else
a=0;
运行后,a的值是?
2. 表达式
!!”2010-01-27”
的值为(以1表示真,0表示假)
3. 假设字符变量ch中存放有大写英文字母,将其转换为相应的小写英文字母的表达式是(形如ch=...答案不留任何的空格,不带结尾的分号)
4. 下列程序段的输出是_______。
#define DF(a,b) (a+2*b)
int s=5;
int k= DF(s+1,s-3);
printf("%d",k);
5.以下代码段的输出是:
int x, y, z, w;
void p(int *y, int x)
{
static int w;
*y++; x++; w = x+*--y;
printf("%d#%d#%d#%d#",x,*y,z,w);
}
int main(void)
{
int x, y, z, w;
x=y=z=w=1;
do{
static int x;
p(&x, y);
printf("%d#%d#%d#%d#",x,y,z,w);
} while(0);
return 0;
}
三、请用C语言写出冒泡排序的程序。(20分)
四、请用C语言写出在一个升序的整数数组中折半查找(二分法搜索)的函数。(25分)
第二部分、数据库原理
五、选择题(共15分,每小题3分)
1、若事务T对数据对象A加上S锁(共享锁)而未加X锁(互斥锁),则___________。
A.事务T可以读A和修改A,其它事务只能再对A加S锁,而不能加X 锁。
B.事务T可以读A但不能修改A,其它事务只能再对A加S锁,而不能加X 锁。
C.事务T可以读A但不能修改A,其它事务能对A加S锁和X锁。
D.事务T可以读A和修改A,其它事务能对A加S锁和X锁
2、有一名为“航班运营”实体,含有航班号、日期、计划起飞时间,计划到达时间,实际起飞时间、实际到达时间、情况摘要等属性,该实体主码可能是_________。
A.航班号 B.日期 C.航班号+日期 D.航班号+情况摘要
3、在现代数据库管理系统中,记录数据库事务操作信息的文件是_______。
A. 数据文件 B. 索引文件 C. 辅助数据文件 D. 日志文件
4.设关系R和关系S具有相同的元数(目),且对应的属性取自相同的域。集合{t|t∈R∧t∈S}标记的是( )。
A、R∪S B、R-S C、R×S D、R∩S
5、有一个关系:职工(工号,姓名,岗位、工资),规定工资的范围应该在3000-30000元之间,这一规则在SQL中可以用__________子句约束。
A、whereB、check C、primary key D、foreign key
六、填空题(共10分,每空格2分)
1.数据库管理系统中,若一个事务因某种原因执行失败,将执行____________操作,以保证数据库的一致性。
2.设关系模式 R(A,B,C,D,E)的函数依赖集为F={AB→C, C→D, D→E},则R的候选码(Candidate Key)可为______________________。
3.SQL查询语言中,如要表达任意多个任意字符,应使用通配符___________。
4.数据库管理系统中,为了保证事务的正确执行,维护数据库的完整性,要求数据库系统维护以下事务特性:________、一致性、隔离性和持续性。
5.关系模式的三种完整性约束分别是______________,参照完整性约束和用户自定义的完整性约束。
七、综合应用题(共50分)
1. 数据库概念设计(16分)
一个研究生管理数据库要求提供下述服务:
Ø 可随时查询学校中所有系的信息,包括系的名称、系办公室地址和值班电话。所有系均由系的名称唯一标识。
Ø 可随时查询所有教师的信息,包括其姓名、年龄、职称、所属系以及在该系入职时间。一个系有多名教师,一名教师只能在一个系工作,工作证号具有唯一性。
Ø 可随时查询每个系研究生信息,包括学号、姓名、导师(教师)、专业方向。一名教师可以指导多位研究生,一位研究生的导师只能有一个。
(1)根据以上需求,绘制出E-R图。(8分)
(2)根据E-R图转换成关系模型,并标明主键和外键。(8分)
2. 规范化题(10分)
假设有一个加油站的系统中有如下关系R(加油员ID,加油员姓名,流水号,金额)。其中,每一次加油操作都有一个流水号,并由相应金额。每个加油员各自编制流水号,不同加油员的流水号有可能相同。
(1)给出上述关系R的函数依赖集,以及候选码。
(2)说明R非BCNF模式的理由,并将上述关系R分解为BCNF模式。
3. SQL应用题(24分,共6小题,每小题4分)
设有一个医院管理系统,
科室(科室号,科室名称,值班电话)
医生(工号,姓名,性别,职称,所属科室号,入职时间,状态)
病人(病人编号,姓名,性别,出生日期,电话)
门诊记录(门诊号,病人编号,工号,日期,主诉,诊断,处理建议)
要求用SQL语言完成如下题目,字段名称和数据表名请直接使用上面的汉字:
(1)创建科室表,注意完整性约束。(4分)
(2)检索出所有职称为“主任医师”的医生信息。(4分)
(3)检索出所有在2017年11月11日看过门诊的病人姓名和出生日期。(4分)
(4)检索出各科室门诊量最大的医生的门诊量,要求返回科室号,门诊量。(4分)
(5)查询诊断包含“高血压”的病人编号、病人姓名和出生日期。(4分)
(6)将贾宁医生的状态设置为“退休”。(4分)