2020 浙江杭州师范大学软件专业基础考研真题
)
C 程序设计部分(75 分)
一、判断题(每小题 1 分,共 10 分)
1、在 C 语言中,标识符是不区分大小写的。(
)
2、在 C 语言中,int 类型数据可以表示任何整数。(
3、在 C 语言中,while 和 do-while 循环的主要区别是:do-while 循环体可能一次都不执行;
而 while 循环体至少无条件循环一次。(
4、在 C 语言中,可以给指针变量赋一个整数作为地址值。(
5、在 C 语言中,向函数传递参数时,实参和形参不可以重名。(
6、设有宏定义:#define F(N) 2*N,则表达式 F(2+3)的值是 7。(
7、已知:char a[7] = "a0\0a0\0"; 则:sizeof(a)的值为 7,strlen(a)的值为 2。(
8、在 C 语言中,结构类型成员的类型还可以是结构类型。(
9、若文本文件打开方式为"a",而该文件已经存在,则文件中原有数据被清除。(
10、在 C 语言中,用 malloc 函数动态分配的内存是在栈中分配的,而不是在堆中分配的。
(
)
)
)
)
)
)
)
)
)。
)。
B. x != 1
C. x
D. x == 1
B. 2、1、3
D. 高级语言
B. 自然语言
C. 机器语言
)是等价的。
二、单项选择题(每小题 1 分,共 20 分)
1、软件与程序的区别是(
A. 程序价格便宜、软件价格昂贵
B. 程序是用户自己编写的,而软件是由厂家提供的
C. 程序是用高级语言编写的,而软件是由机器语言编写的
D.软件是程序以及开发、使用和维护所需要的所有文档的总称,而程序只是软件的一部分
2、CPU 能直接识别的是(
A. 汇编语言
3、若有表达式:x&&1,和以下表达式(
A. x == 0
4、设 x、y、z 均为 int 型变量,则执行以下语句后 x、y、z 的值为(
x = 1; y = 0; z = 2; y++ && ++z || ++x;
A. 2、1、2
5、若有变量声明:int x = 10, y = 4, f; double m; 则执行表达式:f = m = x / y 后,
f、m 的值分别是(
A. 2, 2.5
6、若定义 x 为 double 型变量,则能正确输入 x 值的语句是(
A.scanf("%lf", &x);
C.scanf("%f", &x);
7、“if(表达式)”中的“表达式”(
A.只能是算术表达式
B.逻辑表达式、关系表达式和算术表达式都可以 C.只能是逻辑表达式
D.只能是关系表达式
8、switch 语句语法中的 case 分支必须是常量表达式且互不相同,值不能为(
A.浮点型
9、以下对枚举类型的声明中,正确的是(
A. enum a = {one, two, three};
B.scanf("%5.1f", &x);
D.scanf("%f", x);
D.字符型
)。
C. 2.5, 2.5
D. 2、2、3
C. 2、0、3
D. 2, 2.0
B.整型
C.枚举型
)。
B. 3, 2.5
)。
)。
)。
)类型。
B. enum a {one = 9, two = -1, three}; C. enum a = {"one", "two", "three"};
D. enum a {"one", "two", "three"};
10、在 while(!e)中,!e 等价于(
A. e == 0
11、假设有变量声明:int k;
下面代码段编译运行的情况是(
for(k = 1; k; k++)
C. e == 1
D. e != 1
B. e!=0
)。
)。
printf("%d ", k);
)。
D. 结
)。
)。
B. int f(i);
)是错误的。
B. f(1);
C. f(&a);
D. f(sizeof(a));
C. int f(int);
D. int f(void);
B. 终止当前整个循环的执行 C. 结束 switch 语句
B.能运行,正常结束
D.能运行,是死循环
B. double fun(int x; int y)
D. double fun(int x, y);
)。
A.编译错误
C.以上说法都不对
12、在循环语句的循环体中使用 break 语句的作用是(
A. 结束本次循环
束程序的执行
13、以下正确的函数头是(
A. double fun(int x, int y)
C. double fun(int x, y)
14、以下函数原型,错误的是(
A. int f(int i);
15、给定函数原型:void f(double dd); 和变量声明:double a;
下列函数调用(
A. f(1.0f);
16、如果 i 是变量,而 p 是指向 i 的指针,则下列表达式(
A. *&p
char x[] = "abcd";
char y[] = {'a', 'b', 'c', 'd'};
以下说法正确的是(
A. 数组 x 的长度大于数组 y 的长度
C. 数组 x 的长度小于数组 y 的长度
18、结构变量在其生命期里,(
A. 所有成员一直驻留在内存中
C. 部分成员驻留在内存中
19、位运算符中,运算符~的功能是(
A. 按位取反
20、如果需要打开一个已经存在的非空文件“file”进行修改,正确的文件打开语句为(
A. fp = fopen("file", "r");
C. fp = fopen("file", "w+");
)。
B. 只有一个成员驻留在内存中
D. 没有成员驻留在内存中
B. fp = fopen("file", "ab+");
D. fp = fopen("file", "r+");
B. 两个数组的长度相同
D. 数组 x 和数组 y 的值相同
D. *&i 17、若有:
B. &i
C. &*i
)可以代替 i。
B. 按位与
C. 按位或
D. 按位异或
)。
)。
三、填空题(每小题 1 分,共 10 分)
1、计算机硬件系统由________、运算器、存储器、输入设备、输出设备五部分组成。
2、C 语言中,表示语句结束的符号是________。
3、若有:int x = 3, y = 4, z = 5; 表达式 x || y + z && y == z 的值为________。
4、若变量 x 已正确定义并赋值,则表达式-10 < x < 0 的值为________。
5、假设 sizeof(int)的值为 4,对于数组:int a[3][6]; sizeof(a[0])的值为________。
6、在 C 语言中,二维数组在内存中是按________顺序存放。
7、若有 int a[3][2]={10,20,30,40,50,60}, (*p)[2]; p=a; 则*(*(p+2)+1)的值为
________。
8、在 C 语言中,字符串的结束标志是________。
9、若有:
struct wc {
int a;
int *b;
};
int x[] = {11,12}, y[] = {31, 32};
struct wc z[] = {100, x, 300, y}, *p = z;
则表达式++p->a 的值为________。
10、当文件打开出现错误时,fopen 函数的返回值是________。
四、程序阅读题(每小题 3 分,共 15 分)
1、以下程序的输出结果是________。
#include
int main(void) {
int x, a = 10, b = 20, ok1 = 5, ok2 = 0;
if(a < b)
if(b != 15)
if(!ok1)
x = 1;
else if(ok2)
x = 10;
else
x = -1;
printf("%d\n", x);
return 0;
}
2、对于以下递归函数 f,调用 f(4),其返回值是________。
int f(int n) {
if(n)
return f(n-1)+n;
else
return n;
}
3、以下程序的输出结果是________。
#include
void add(int *p, int x) {
(*p)++;
x++;
printf("%d%d", (*p), x);
}
int main(void) {
int a = 3;
int b = 0;
int *p = &a;
add(p, b);
printf("%d%d\n", a, b);
}
4、以下程序的输出结果是________。
#include
int f(int);
int any_function(int (*pf)(int));
int main(void) {
printf("%d\n", any_function(f));
return 0;
}
int f(int i) {
return i * i + i - 12;
}
int any_function(int (*pf)(int)) {
int n = 0;
while(pf(n))
++n;
return n;
}
5、以下程序的输出结果是________。
#include
int main(void) {
FILE *fp;
int i, n=0, k=0;
fp = fopen("source.txt", "w");
for(i = 0; i < 5; i++)
fprintf(fp, "%d", i);
fclose(fp);
fp = fopen("source.txt", "r");
fscanf(fp, "%d%d", &n, &k);
printf("%d,%d", n, k);
fclose(fp);
return 0;
}
五、程序填空题(每空 2 分,共 10 分)
1、下面程序的功能是计算 1000!的末尾有多少个零。请填空使程序完整、正确。
#include
int main(void) {
int i, k, m;
for(k = 0, i = 5; i <= 1000; i += 5) {
m = i;
while(________) {
k++;
m = m / 5;
}
}
return 0;
}
2、下面程序的功能是输入一个不包括空格的字符串(少于 80 个字符),判断字符串是否是
回文(即从左往右读和从右往左读一样)。请填空使程序完整、正确。
#include
#include <________>
int main(void) {
int i, len, flag;
char str[80];
gets(str);
len = strlen(str);
flag = 1;
for(i = 0; i < len / 2; ++i) {
if(str[i] != ________) {
________;
break;
}
}
if(________)
printf("Yes\n");
else
printf("No\n");
return 0;
}
六、程序设计题(共 10 分)
编写一个选择排序函数:
void selectionSort(int list[], int n);
第 1 个参数 list 是需要升序排序的整数数组,第 2 个参数 n 是数组大小。对数组元素进行
升序排序。
数据库原理部分(75 分)
七、选择题(共 15 分,每小题 1 分)
1. 数据库具有
、最小冗余、较高的数据的独立性和易于扩充等特点。
A)数据结构化 B)程序标准化
C)数据模块化 D)程序结构化
2.数据库系统中,负责数据库物理结构与逻辑结构的定义与修改的人员是
A)数据库管理员`
C)应用程序员 D)最终用户
3.三个模式之间存在映射关系,下列映射关系正确的是
A)外模式/内模式
C)模式/模式
D)内模式/外模式
B)外模式/模式
B)专业用户
。
。
。
。
4.要保证数据库的数据独立性,DBMS 通过修改的是
A)三级模式之间的两种映射 B)模式与内模式
C)模式与外模式 D)三层模式
5.下列关于 E-R 模型的说法中,正确的是
A)依赖于计算机硬件和 DBMS
B)独立于计算机硬件,依赖于 DBMS
C)独立于计算机硬件和 DBMS
D)依赖于计算机硬件,独立于 DBMS
6.学生社团可以接纳多名学生参加,但每个学生只能参加一个社团,从社团到学生之间的
联系类型是
A)多对多
C)多对一
7.现有如下关系:
患者(患者编号,患者姓名,性别,出生日期,所在单位)
医生(医生编号,医生姓名,所在科室)
医疗(患者编号,医生编号,诊断日期,诊断结果)
则,医疗关系中的外键有
A)患者编号
C)患者编号和医生编号
8.在某个数据库中建立了表 person(No,Name,Sex,Birthday),No 为表的主码,表中已有的记
录如下图所示:
。
B)一对多
D)一对一
B)医生编号
D)没有
。
No
1
4
6
Name
Sex
Birthday
张丽丽
女 1967/05/07
李方
王安
女 1970/04/14
男 1982/10/27
。
以下四个语句中能够正确执行的插入操作是
A)INSERT INTO person VALUES(6,′王中′,′男′,′1964/03/08′)
B)INSERT INTO person (Name,Sex) VALUES(′王中′,′男′)
C)INSERT INTO person VALUES(2,′男′,′王中′,′1964/03/08′)
D)INSERT INTO person(No,Sex) VALUES(2,′男′)
9.若 R∈1NF,且 R 中只有一个主属性,则 R 必然满足
A)2NF
C)4NF
B)3NF
D)BCNF
。
。
B)2NF
D)BCNF
10.在关系数据库中,从关系规范化的意义看,如果关系 R 中的非主属性对码有传递函数依
赖,那么 R 至多是
A)1NF
C)3NF
11.如果采用关系数据库来实现应用,在数据库设计的___________阶段将关系模式进行规
范化处理。
A)需求分析 B)概念设计
C)逻辑设计 D)物理设计
12.数据库的转储和恢复属于数据库设计的
A)逻辑设计 B)物理设计
C)数据库实施 D)数据库的维护
13.已知事务 T1 和 T2 的并发操作序列,如下图所示,并发操作引发的问题是
A)丢失修改
C)读”脏”数据
B)不可重复读
D)幽灵问题
。
。
。
14.多个事务执行的次序称为
A)过程 B)流程
C)调度 D)步骤
15.恢复机制的关键问题是建立冗余数据,最常用的技术是
A)数据镜像 B)数据转储
C)登录日志文件 D)B+C
。
八、填空题(共 10 分,每空格 1 分)
1.数据库系统的三级模式结构保证了数据的独立性,它们分别是 (1) 和 (2) 。
2.关系数据模型中的关系是二维表,表中的一行称为关系的一个 (3 ,表中的一列称
为关系的一个 (4) 。
3.在关系数据库中,主键值不能为空,也不允许出现重复,这是 SQL 中的 (5) 完整
性约束规则。
4.写出实现“将查询 SC 表的权限授予用户 U1,并允许该用户将此权限授予其他用户”这
一功能的 Grant 语句: (6) 。
5.设有关系模式 S(A,B,C,D),与关系代数表达式σ3<′4′(S)等价的 SQL 语句是:
(7)
6.多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行这些事务时的
结果相同,称这种调度策略为 (8)
。
。
7.当发生介质故障时,必须使用 (9) 和 (10)
进行数据库恢复。
九、综合应用题(共 50 分)
1.数据库概念设计(16 分)
某学校有若干系(包含系号、系名、系主任名、电话),每个系有若干学生(包含学号、姓
名、年龄)、若干课程(包含课程号、课程名),每个学生选修若干课程,每门课有若干学生
选修,学生选修课程有成绩记录,某一门课可以为不同的系开设。今要建立该校学生选修课
程的数据库,在以上基础上要求:
(1)画出该学校数据库的实体-联系模型 E-R 图。(8 分)
(2)把 E-R 图转变成相应的关系模型,并标明主键和外键。(8 分)
2.规范化题(10 分)
假设为考试成绩管理设计了一个关系 R(S#,SN,C#,CN,G,U),其属性的含义依次为
考生号、姓名、课程号、课程名、分数和主考学校名称。规定每个学生学习一门课程只有一
个分数;一个主考学校主管多门课程的考试,且一门课程只能属于一个主考学校管理;每名
考生有唯一的考号,每门课程有唯一的课程号。
(1)写出关系模式 R 基本的函数依赖集及候选键。(4 分)
(3)关系模式 R 最高达到第几范式?为什么?(3 分)
(4)将 R 规范化为 3NF。(3 分)
3.SQL 应用题(24 分,共 6 小题,每小题 4 分)
现有如下关系:
职工(职工号,姓名,性别,职务,家庭地址,部门编号)
部门(部门编号,部门名称,地址,电话)
保健(保健卡编号,职工号,检查身体日期,健康状况)
要求用 SQL 语言完成如下题目,字段名称和数据表名直接使用上面的汉字:
(1)查找所有女科长的姓名、检查身体日期和健康状况。
(2)查找没有参加任何检查的职工姓名。
(3)职工人数最多的部门名称。
(4)查找每个部门的男女职工人数,要求列出部门编号、部门名称、性别及人数。
(5)删除职工关系表中职工号为“3016”的记录。
(6)将职工号为“3061”的职工的健康状况改为“一般”。