资源描述
2021年 软件工程 计算机科与技* 专业知识试卷 真题
(考试时间150分钟,满分300分,共三部分)
第一部分C语言程序设计
一、单项选择题(本大题共30小题,每小题2分,共60分)
在每小题列出的四个备选项中只有一个是符合题目要求的,请将正确答案代码填写在答题纸相应位置上。
1.下列选项中,合法的C语言标识符是 。
A.myname B.$234 C.my name D.23b
2.己知:int x=5;执行完printf(“%d”,++x);后,输出的结果是 。
A.4 B.5 C.6 D.不确定
3.己知:int X=5,y=3;则逻辑表达式(x-y)&&(y-3)的值为 。
A.7 B.2 C.1 D.0
4.己知:int a =3,b=6,c=8;则执行完语句:a=a>b?a:(b<c?b:c);后,a的值是
A.3 B.6 C.8 D.17
5.有如下程序段执行后的结果是
main()
{ int a=11,b=3;
printf(“%d,%d”,a/b,a%b); }
A.3,2 B.1 1,2 C.3,3 D.3.3,2
6.有如下程序段:
main()
{char c;
scanf(“%c”,&c);
switch(C) :
{case‘A’:printf(“5”);
case‘B’:printf(“4”);
case‘C’:printf(“3”);
case‘D’:printf(“2”);
default:printf(“1”);}
}
当运行时输入“B回车”,则输出结果是 。
A.4 B.43 C.432 D.4321
7. 已知字符’a’的ASCII码值为97,‘A’的ASCII码值为65,则如下程序段的运行结果是 。
main()
{ char C=‘d’;
int i=C-32:
printf(“%c,%d”,i,i); }
A.d,68 B.D,68 C.d,100 D.D,100
8.如下程序段的执行结果是
main()
{int X=1,Y=100;
while(y>0)
{X*=2; Y/=3;}
printf(“%d,%d”,X,Y); }
A.8,0 B.16.0 C. 32,0 D.64,0
9. 如下选项中正确的数组定义是
A.#define m 10; static int a[m]={3,4,5,6}; B.static int a[2]={3,4,5,6};
C.static int a[10]={3,4,5,6); D.int m=4;static int a[m]={3,4,5,6};
10.执行程序段:char str[12];scanf(“%s”,str);如果输入如下字符串(其中口表示空格):
What’s口your口name? 则str的值是
A.What’s B.What’s口 C.What’s口your D.What’s口your口name?
11.如下程序段的运行结果是 。
main()
{int i=5,sum=100;
do(sum=sum+(--i);) while(i>=0);
printf(“%d”.sum); }
A.100 B.109 C.105 D.110
12.如下程序段的运行结果是 。
main()
{ int i;
for(i=1;i<=10;i++)
{if(i%3= =0) continue;
printf(“%d,”,i);} }
A.1,2,4,5,7,8,10, B.1,2,3,4,5,6,7,8,9,10,
C.3,6,9, D.1,2,4,5,6,7,8,9,1 0,
13.若有说明:int a[5][6];则数组a的正确引用是 。
A. a[5][4] B.a[3,4] C.a(3)(4) D.a[3][4]
14.在C语言中,凡不加类型说明的函数,自动 。
A.按无类型void处理 B.按整型int处理 C.按字符类型char处理 D.按浮点型float处理
15.如下程序段的输出结果是 。
void kk(int a,int b)
{a=a*b;printf(“%d,%d,”,a,b);}
main()
{int a=5,b=6;
kk(a,++b);
printf(“%d,%d”,a,b); }
A.30,6,30,6 B.35,6,35,6 C.30,7,5,7 D.35,7,5,7
16.如下程序段的输出结果是
main()
{static int a[6]={3,6,9,12,15,1 8);
Int *c=&a[2];
printf(“%d,%d”,*(c+3),*c+3);}
A.18,12 B.15,18 C.18,15 D.15.12
17.如下程序段中语法正确的是 。
A.int *p;p=1000; B.int a,*p;p=&a;
C.int a,*p;*p=&a;D.int a:1 000,*p;p=a;
18.如下程序段的输出结果是 。
int mm(int*a,int b)
{*a=*a+5;b*=3;return *a+b;)
main()
{ int a=3,b=6;
int c=mm(&a,b);
printf(“%d,%d,%d”,a,b,c); }
A.3,6,9 B.8,6,26 C.8,18,26 D.3,18,11
19.如下程序段的输出结果是 。
main()
{ static int a[2][3]={3,6,9,12,15,18);
Int *c:a[1];
printf(“%d,%d”,*(c+1),*c+1);}
A.15,13 B.6,7 C.9,10 D.12,13
20.已有函数定义如下 。:void aa(int a,char b,float c){c=(float)(a+b);}
则下列程序段能够进行函数正确调用的是
A.main() {aa(5.0,‘a’,5); }
B.main() {int*a; scanf(“%d”,&a); aa(a,‘a’,9);}
C.main() {int a=1;char b=‘b’;float c=1.0;aa(a,b,c);}
D.main() {int*a;scarlf(“%d”,a);aa(a,‘a’,3.0); }
21.有如下定义:
struct student
{char nmne[10];
float score;
int age;}stul,*p;
则在C语言程序中给变量stul赋值正确的是 。
A.stul={“ddd”,66.0,55); B.strcpy(stul.name,“ddd”);stul.Score=66.0;stul.age=15;
C.P=&stul;p->name=‘ddd’;p->score=66.0;p->age=15;
D.P=&stul;p.name=“ddd”;p.score=66.0;p.age=15;
22.下面程序段中语法正确的是 。
A.int mm(int x,int y) {int x,y;return x+y;} B.char str[10];scanf(“%s”,&str);
C.int i,a[10];for(i=0;i<=10;i++) scanf(“%d”,&a[i]);
D.int i,a[10],*p; for(i=0,p=a;p<a+10;p++) scan~“%d”,p);
23.已知int a;并且a已经被正确赋值,则下列逻辑表达式中与(!a)等价的是
A.(a= =0) B.(a>0) C.!(a= =1)D.(a= =1)
24.若变量已经正确定义,要求程序段完成1到100的累加,下列选项中不能完成此功能的程序段是 。
A.for(i=1,sum=0;i<=100;i++)sum=sum+i; B.i=1;suln=0;while(i++<=100)sum=sum+i;
C.for(i=1;i<=100;i++){sum=0;sum=sum+i} D.i=1;sum=0;do{sim=sum+i;}while(++i<:100);
25.己知int k;且k已经正确赋值,则下列表达式中存在语法错误的是
A.2<k<6 B.(k<6)++ C.k<6&&k>2 D.k= =1
26.如下程序段的输出结果是 。
main()
{int i,j,a=0;
for(i=1;i<=5;i++)
for(j=i;j<=5;j++)
a=a+j;
printf(“%d”,a);}
A.10 B 25 0 C.55 D.75
27.语句:printf(“%-8.4d”,-36);执行时的输出结果是(口表示空格) 。
A.-036口口口口 B.-036口口口口口 C.口口口口-036 D.口口口口口-036
28.如下程序段的输出结果是 。
main()
{int a[10]={34,22,12,66,8,33,22,338,56,99);
int i,x=0;
for(i=1;i<10;i++)
if(a[i]<a[x]) x=i;
printf(“%d”,a[x]);}
A.8 B.34 C.99 D.338
29.如下程序段的输出结果是 。
main()
{char str[ ]=(‘S’,‘t’,‘u’,‘d’,‘e’,‘n’,‘t’,‘\0’);
Char*q=str;
while(*q!=‘\0’)q++;
printf(“%d”,q-str);}
A.5 B.6 C.7 D.8
30.如下程序段的输出结果是 。
#define n 5
struct student
{ int no;
float score; }
main()
{struct student stu[n]={{1,12.},{2,55.5},{3,90.5},{4,78.0},{5,34.0}};
int i;
float a=0,b;
for(i=0;i<n;i++) a+=stu[i].score;
b=a/n;
printf(“%08.4f”,b);}
A.0054.1000 B.054.1000 C.0054.1 D.54.10000
二、程序阅读题(本大题共4小题,每小题5分,共20分)阅读下列程序,请将运行时输出的结果写在答题纸相应的位置上。
31. /*程序段中口表示空格*/
#include<stdio.h>
void main()
{char strl[]=“good口morning!”,str2[20];
char*p,*q;
for(p=strl;*p!=‘\0’;p++);
for(q=str2;--p>=strl;q++)*q=*p;
*q=‘\0’;
printf(“%s”,str2);}
32. #include<stdio.h>
#define n 10
void de(int a[],int x,int *m)
{int i=x+1;
for(;i<=*m;i++)a[i-1]=a[i];
*m=*m-1;}
void main()
{static int a[n]:{32,12,12,56,78,12,78,5,32,12};
int i,j,x,m=n-1;
for(i=0;i<=m;i++)
{x=a[i];
For(j=i+l;j<=m;j++)
if(a[j]= =X) de(a,j,&m);}
for(i=0;i<=m;i++)
printf(“%d,”,a[i]);}
33. #include<stdio.h>
void ch(int *a,int *b)
{int c; c=*a;*a=*b;*b=c;}
void main()
{static int a[10]={32,5,1 8,56,98,52,78,15,132,1 12);
int x=0,y=1,i;
if(a[x]>a[y])ch(&x,&y);
for(i=2;i<10;i++)
if(a[i]<a[x])x=i;
else if(a[i]>a[y])y=i;
ch(&a[x],&a[y]);
for(i=0;i<10;i++)printf(“%d,”,a[i]);}
34. #include<stdio.h>
void main()
{char str[ ]=“0342201411”;
static int a[10];
int i;
char *p;
for(i=0;i<10;i++) a[i]=0;
for(p=str;*p !=‘\0’;p++)
{i=*p-‘0’;
a[i]++;
for(i=0;i<10;i++) printf(“%d,”,a[i]);}
三、完善下列程序(本大题共2小题,每空4分,共20分) 请将答案写在答题纸相应的位置上。
35.下面程序求一个二维矩阵的最大值。
#include<stdio.h>
#define m 3
#define n 4
int findmax(int a[][n])
{int i,j,max=a[0][0];
for(i=0;i<m; ① )
for(j=0;j<n;j++)
if(a[i][j]>max) max=a[i][j];
② ;}
void main()
{ int i,j,max, ③ ;
for(i=0;i<rn;i++)
for(j=0;J<n;j++)
scanf(“%d”,&a[i][j]);
max=findmax(a);
printf(“%d”.max);}
36.下面程序找出100~200之间的全部素数。
#include<stdio.h>
#include<math.h>
void main()
{int nq,k,i;
for(m=101;m<=200;m=m+2)
{k=sqrt(m);
for(i=2;i<=k; ④ )
if(m%i= =0) ⑤ ;
if(i>k) printf(“%d”,m); } }
第二部分数据结构(共1 00分)
一、单项选择题(本大题共1 2,qJ、题,每小题2分:.共24分)
在每小题列出的四个备选项中只有一个是符合题目要求的,请将正确答案代码填写在答题纸相应位置上。
1.要表示高校的校、系、班级的有关数据及其关系,选择 比较合适。
A.线性结构 B.树结构 C.图结构 D.集合结构
2.下列函数中渐近时间复杂度最小的是 。
3.已知一个栈s以及一个输入序列(A,B,C,D,E),每个元素按照A,B,C,D,E顺序进栈一次,进栈后可立即出栈,也可在栈中停留一段时间后再出栈,则不能得到 序列。
A.A,B,C,D,E B.B.A,E,D,C C.C,B,A,D,E D.D,C,A,B,E
4.平均排序效率最好的排序方法是 。
A.直接插入排序 B.快速排序 C.简单选择排序 D.冒泡排序
5.某链表中最常用的操作是在已知的一个结点之前插入一个新结点和删除其之前一个结点,则采用 存储方式最节省运算时间。
A.双向链表 B.带头指针的单向链表 C.带尾指针的单向链表 D.单向循环链表
6.在逻辑结构不变的情况下,不是导致一个图的遍历序列不唯一的因素是
A.出发点不同 B.存储(物理)结构不同 C.遍历方法不同 D.画法不同
7.散列函数有一个共同的要求,即函数值应当尽量以 取其值域的每个值。
A.最大概率 B.最小概率 C.正态分布概率D.均等概率
8.下面 方法可以判断出一个图中是否存在环(回路)。
A 排序 B.深度和广度遍历 C.求最短路径 D.求关键路径
9.最佳二叉搜索(排序)树是 。
A.关键码个数最小的二叉搜索树 B.退化为线性的二叉搜索树
C.搜索中平均比较次数最小的二叉搜索树 D.任何结点的度数为0或2的二叉搜索树
10. 是数据的基本单位,即数据集合(对象)中的个体。
A 数据结构 B.数据项 C.数据元素 D.数据对象
11. (线性)表是一个 。
A有限序列,可以为空 B 有限序列,不能为空 C 无限序列,可以为空 D.无限序列,不能为空
12.树是结点的集合,它 根结点。
A 有0个或1个 B 有0个或多个 C 有且只有1个 D 有1个或1个以上
二、填空题 (本大题共7小题,每空2分,共1 6分) 请将答案写在答题纸相应的位置上。
13.在有n个顶点的有向图中,每个顶点的度最大可达 。
14.以下程序段的时间复杂度是 。
i=0;j=o;
while(i+j<=n)
{ if(i>j) j++;
else i++; }
15.右图所示的二叉树后序遍历的结果是
16.在一个双向链表中P所指结点之前插入一个由指针s所指的新结点,写出可执行的操作序列: 。(前指和后指的指针域分别为prior和next)
17. (线性)表有两种存储结构:顺序存储结构和链式存储结构,请就这两种存储结构完成下列填充: 存储密度较大,可以随机存取; 不可以随机存取,插入和删除操作比较方便。
18.递归的程序执行时使用 来保存各层递归调用时的现场信息,以保证可以正确返回。
19.设数组a[M](M为最大空间个数)作为循环队列Q的存储空间,front为队头指针(指向第一个存放数据的位置),rear为队尾指针(指向最后一个存放数据位置的下一个),则判定Q队列的队满条件是
三、应用题(本大题共4小题,每小题1 0分,共40分) 请将答案写在答题纸相应的位置上。
20.设字符集D={A,B,C,D,E),各字符使用频率W={10,2,5,6,4)。画出对字符进行哈夫曼编码时所对应的哈夫曼树,并给出各字符的编码。
21.用普里姆(Prim)算法从右图中的顶点1开
始逐步构造最小支撑(代价生成)树,要求
画出构造的每一步。
22.给定待排关键字集合为{23,14,48,25,5,19},按关键字非递减(从小到大)排序,写出采用冒泡排序的每一趟(最外层循环的每一次)排序结果。
23.(1)图示表示右边有向图的邻接表。(4分)
(2)写出从顶点1开始分别进行深度
优先和广度优先遍历的顶点序列各一种。(6分)
四、算法设计题(本大题共2小题,每小题1 0分,共20分)
请将答案写在答题纸相应的位置上c
24.假定用一个有头结点循环链表来存储一个有序的线性表,线性表从头到尾为非递减(从小到大)有序(如下图)。用指针(如下图)。用指针current从head开始搜索数据域等于key的元素在线性表中位置,如果搜索成功则current指向搜索到的结点,函数返回该指针;如果搜索不成功,函数返回空指针NULL。请在函数SortedlistLocate(head,key)内填空,完成下列算法以实现这种搜索,并使得搜索不成功的平均比较次数小于链表长度。
typedef struct node{ elemtype data;//数据域
struct node *next;//指针域
}1node,术linklist;
linklist SortedlistLocate(1inklist head,elerntype key)
{linklist current;
if( (1) ) return ERROR;//错误提示
current= (2) ;
while( (3) && (4) )
current=current-->next;//循链搜索其值等于key的结点
if ( (5) )
return current;//找到,返回结点地址
else return NULL;//未找到,返回空指针 }
25.r[]为一维数组,其中r[0]到r[n-]为待排序的n个元素,排序好的元素仍在r[0]到 r[n-1]中。请写出对该数组进行非递减排序的直接插入排序算法取名为InsertSort(etemtype r[ ],int n)。
第三部分 关系数据库与SQL语言(共1 00分)
一、单项选择题(本大题共20小题,每小题2分,共40分)
在每小题列出的四个备选项中只有一个是符合题目要求的,请将正确答案代码写在答题纸相应位置上。
1. 数据库(DB),数据库系统(DBS)和数据库管理系统(DBMS)之间的关系是 。
A.DBS包括DB乖DBMS B.DBMS包括DB和DBS
C.DB包括DBS和DBMS D.DBS就是DB,也就是DBMS
2.下面列出的数据库管理技术发展的三个阶段中,没有专门的软件对数据进行管理的是 I.人工管理阶段II.文件系统阶段III.数据库阶段。
A.I帮II B.只有I C.II帮III D.只有II
3.下面的选项不是关系数据库基本特征的是 。
A.不同的列应有不同的数据类型 B.不同的列应有不同的列名
C.与行的次序无关 D.与列的次序无关
4. 从一个数据库文件中取出满足某个条件的所有记录形成一个新的数据库文件的操作是 操作。
A.投影 B.连接 C.选择 D.复制
6. SOL语言中,删除一个视图的命令是 。
A.DELETE B.DROP C.CLEAR D.REMOVE
7. 在SQI二语言中,修改数据结构应使用的命令是 。
A.CHANGE B. CREATE C. ALTER D. DEI,E FE
8.下述SQL命令中,允许用户定义新关系时,引用其他关系的主码作为外码的是 。
A.INSERT B.REFERENCES C.DELETE D.SELECT
9.规范化理论是关系数据库进行逻辑设计的理论依据,第一范式是指关系中的每一个属性都是 。
A.长度不变的 B.互不相关的 C.互相独立的 D.不可分解的
10.若用如下的SQL语句创建了一个表SC:CREATE TABLE SC(S CHAR(6) NOT NULL,C CHAR(3) NOT NULL,SCORE INTEGER,NOTE CHAR (20));向SC表插入如下行时, 行可以被插入。
A.(‘200823’,’101’,NULL,NULL) B.(’201009’,’111’,60,必修)
C.(NULL,’103’,80,’选修’) D.(’201132’,NULL,86,’ ’)
11.规范化理论是数据库 阶段的指南和工具。
A.需求分析 B.概念设计 C.逻辑设计 D.物理设计
12.候选码的属性有 。
A.多个 B.0个 C.1个 D.1个或多个
13.关系模式中,满足3NF的模式 。
A.可能是2NF B.必定是4NF C.必定是2NF D.必定是BCNF
A.一对多 B.一对一 C.N对N D.多对多
15.能够用条件限定记录的分组的SELECT语句的子句是
A.WHERE B.HAVING C GROUPBY D.ORDERBY
16.关系数据模型的三个组成部分中,不包括 。
A.完整性规则 B.数据结构 C。恢复 D.数据操作
A.4 B.5 C.6 D. 7
18.在E-R模型中,用来表示关系的是 。
A.椭圆形 B.平行四边形 C.菱形D.矩形
19.删除索引用的SQL语句是 。
A.DELETE INDEX B.DROP INDEX
C.DELETE CLUSTERED INDEX D.DROP CLUSTERED INDEX
20.下列聚合函数中不忽略空值(null)的是 。
A.SUM(列名) B.MAX(列名) C.COUNT(*) D.AVG(列名)
二、填空题(本大题共6小题,每空2分,共20分) 请将答案写在答题纸相应的位置上。
21.数据库系统常见的数据模型仃层次模型、网状模型与 三种。
22.关系数据模型中,二维表的列称为 ,二维表的行称为
23.数据库管理系统提供四个方面的数据控制功能,包括数据的 、数据的完整性控制、 和数据恢复。
25关系模型的三类完整性是指实体完整性、 和 。
26数据库设计包括数据库的 和数据库的
三、根据题意,用SQL语句实现以下操作(本大题共25分) 请将答案写在答题纸相应的位置上。
27.现有关系数据库三个基本表如下:
学生表 STUDENT(SNO,SNAME,SSEX,SAGE,SDEPT),其属性分别为(学生,姓名,性别,年龄,系);
┏━━━━━━━┳━━━━━┳━━━━┳━━━━┳━━━━┓
┃ 学号 ┃ 姓名 ┃ 性另 ┃ 年龄 ┃ 系 ┃
┃ SNO ┃ SNAME ┃ SSEX ┃ SAGE ┃ SDEPT┃
┣━━━━━━━╋━━━━━╋━━━━╋━━━━╋━━━━┫
┃ 200215121 ┃ 李勇 ┃ 男 ┃ 20 ┃ CS ┃
┣━━━━━━━╋━━━━━╋━━━━╋━━━━╋━━━━┫
┃ 200215122 ┃ 刘晨 ┃ 女 ┃ 19 ┃ IS ┃
┣━━━━━━━╋━━━━━╋━━━━╋━━━━╋━━━━┫
┃ 200215123 ┃ 王敏 ┃ 女 ┃ 18 ┃ IS ┃
┗━━━━━━━┻━━━━━┻━━━━┻━━━━┻━━━━┛
课程表COURSE(CNO,CNAME,CPNO,CREDIT),其属性分别为(课程号,课程名,先行课,学分1
┏━━━━━┳━━━━━━┳━━━━━┳━━━━━━┓
┃ 课程号 ┃ 课程名 ┃ 先行课 ┃ 学分 ┃
┃ CNO ┃ CNAME ┃ CPNO ┃ CREDIT ┃
┣━━━━━╋━━━━━━╋━━━━━╋━━━━━━┫
┃ 1 ┃ 数据库 ┃ 3 ┃ 4 ┃
┣━━━━━╋━━━━━━╋━━━━━╋━━━━━━┫
┃ 2 ┃ 操作系统 ┃ 4 ┃ 3 ┃
┣━━━━━╋━━━━━━╋━━━━━╋━━━━━━┫
┃ 3 ┃ 数据结构 ┃ 7 ┃ 4 ┃
┣━━━━━╋━━━━━━╋━━━━━╋━━━━━━┫
┃ 4 ┃ 数据处莲 ┃ ┃ 2 ┃
┗━━━━━┻━━━━━━┻━━━━━┻━━━━━━┛
选修表SC(SNO,CNO,GRADE),其属性分别为(学号,课程号,分数)
┏━━━━━━┳━━━━━━┳━━━━━┓
┃ 学号 ┃ 课徉号 ┃ 分数 ┃
┃ SNO ┃ CNO ┃ GRADE ┃
┣━━━━━━╋━━━━━━╋━━━━━┫
┃ 200215121 ┃ 1 ┃ 92 ┃
┣━━━━━━╋━━━━━━╋━━━━━┫
┃ 200215121 ┃ 2 ┃ 85 ┃
┣━━━━━━╋━━━━━━╋━━━━━┫
┃ 200215122 ┃ 2 ┃ 90 ┃
用SQL语言实现下列①一⑦小题:
①查询所有学生的学号与姓名(本小题2分):
②查询成绩优秀(90分及以上)学生的学号、课程号与分数(本小题4分)
③计算学生表STUDENT中学生的总人数(本小题4分):
④给学生表STUDENT插入一条记录,记录信息为(学号:200215300:姓名:黄帝;性别:男;年龄:21;系:CS),注意学生表年龄为整型,其余为字符型(本小颢4分):
⑤在学生表STLIDENE、中,“性别”为字符型,请创建一个名字为MEN VIEW的全体男生信息视图(本小题4分);
⑥删除选修表SC中没有成绩的记录(注意:成绩为0不算“没有成绩的记录”)(本小题4分);
⑦对于某门课程,如果所有选课的学生考试成绩都低于80分,并且该课程的学分大于2,将其改为2(本小题3分)。
四、计算题(本大题共2小题,共1 5分)请将答案写在答题纸相应的位置上。
28.假设某连锁店数据库中有一关系模式R如下:
如果规定:
(1)不同的商店可以销售相同的商品,但每个商店的每种商品只在一个部门销售;
(2)每个商店的每个部门只有一个负责人;
(3)每个商店的每种商品只有一个库存数量。
试回答下列①一②小题:
①根据上述规定,写出关系模式R的基本函数依赖;(本小题3分)
②试问关系模式R最高已经达到第几范式?为什么?(本小题9分)
29.用关系代数表达式实现下列①一②小题:
①检索学生成绩得过满分(100分)的课程的课程号、课程名和学分;(本小题4分)
②检索“国际贸易”系中成绩不及格的学生信息,包括学号、姓名、课程名和分数。(本小题4分)
展开阅读全文