1996年高级程序员级下午试题Word文档格式.docx
《1996年高级程序员级下午试题Word文档格式.docx》由会员分享,可在线阅读,更多相关《1996年高级程序员级下午试题Word文档格式.docx(17页珍藏版)》请在冰豆网上搜索。
![1996年高级程序员级下午试题Word文档格式.docx](https://file1.bdocx.com/fileroot1/2023-1/6/1e37a4ba-e6f1-4d74-b3a1-478fc52168cb/1e37a4ba-e6f1-4d74-b3a1-478fc52168cb1.gif)
25
22
4
5
6
7
19
20
21
N=4时
N=5时
填充流程图中的①~⑥使之成为完整的流程图。
若将数字1,2,…,N2按顺时针方向依次写在N*N矩阵中,则只需将上述流程图中的__⑦__改成__⑧__即可。
【流程图】
注:
图中[W]表示不大于W的最大整数。
试题三
阅读以下说明和E-R图,回答问题,讲解答写在答卷的对应栏内。
设有下列关于运动会管理系统的E-R图。
图中矩形表示实体,圆表示属性,双圆表示关键字属性,菱形表示实体之间的关系。
假定已通过下列SQL语言建立了基本表:
CREATETABLEATHLETE
(ANOCHAR(6)NOTNULL,
ANAMECHAR(20),
ASEXCHAR
(1),
ATEAMCHAR(20));
CREATETABLEITEM
(INOCHAR(6)NOTNULL,
INAMECHAR(20),
ITIMECHAR(10),
IPLACECHAR(20));
CREATETABLEGAMES
INOCHAR(6)NOTNULL,
SCORRECHAR(10));
为了答题的方便,图中的实体和属性同时给出了中英文两种名字,回答问题时只需写出英文名即可。
【E-R图】
【问题】
填充下列SQL程序3.1~3.4中的①~⑦,使它们分别完成相应的功能:
程序3.1:
统计参加比赛时运动员人数
SELECT__①__
FROMATHLETE
WHEREASEX='
M'
;
程序3.2:
查100872号运动员参加的所有项目及其比赛时间和地点
SELECTITEM,INO,INAME,ITIME,IPLACE
FROMGAMES,ITEM
WHERE__②__
AND__③__;
程序3.3:
查参加100035项目的所有运动员名单
SELSECTANO,ANAME,ATEAM
WHERE__④__
(SELECT__⑤__
FROMGAMES
WHEREGAMES.ANO=ATHLETE.ANO
ANDINO='
100035'
);
程序3.4:
建立运动员成绩视图
__⑥__ATHLETE_SCORE
ASSELECTATHLETE,ANO,ANAME,ATEAM,INAME,SCORE
FORM__⑦__
WHEREATHLETE,ANO=GAMES,ANO
ANDGAMES.INO=ITEM.INO;
试题四为必答题。
试题四
在COMET型计算机上可以使用试卷上所附的CASL汇编语言。
阅读下列程序说明和CASL程序,将应填入程序中__?
__处的字句,写在答卷的对应栏内。
【程序说明】
子程序OFFSET用二分法,查找无符号整数M在一个长度为N的有序(升序)无符号整数列表NTABLE中的位置。
程序中标号为LOW和UP的两个存储字分别用作存放查找区间的上下限。
进入子程序时,在GR1中给出存放子程序所需参数的起始地址。
参数的存放次序如下:
(GR1)+0
M
N
NTABLE的首址
从子程序返回时,GR0中存放查找结果,即M在此有序表中的位置序数,如表中找不到M,则GR0中返回0,其它寄存器的内容保持不变。
[程序]
START
OFFSET
PUSH
0,GR2
0,GR3
LD
GR0,0,GR1
LEA
GR2,0
ST
GR2,LOW
___
(1)___
___
(2)___
GR2,UP
LOOP
ADD
SRL
GR2,1
GR3,0,GR2
___(3)___
___(4)___
JZE
FOUND
JPZ
INCLOW
GR2,-1,GR2
M<
NTABLE(K)
JMP
CMPLU
GR2,1,GR2
M>
NTABLE(K)
K+1→LOW
___(5)___
CPL
___(6)___
___(7)___
GR0,1,GR2
POP
GR3
GR2
RET
LOW
DS
UP
END
从下列的2道试题(试题五至试题六)中任选1道解答。
如果解答的试题数超过1道,则解答的前1道有效。
试题五
阅读以下程序说明和C程序,将应填入程序中__?
本程序是一个简单的计算器模拟程序。
对任意给定的正确四则运算表达式,程序计算其结果值并输出。
表达式中运算分量为无正负号整数,运算符为+、_、*、/,圆括号按常规配对,表达式以字符"
="
结束。
函数getach()为获取表达式的一个合法字符,并将字符存入变量curch;
函数指针数组func[]是为了统一加减乘除计算而设置的。
【程序】
#include<
stdio.h>
intadd(intx,inty){returnx+y;
}
intsub(intx,inty){returnx-y;
intmul(intx,inty){returnx*y;
intdiv(intx,inty){returnx/y;
int(*func[])()={add,sub,mul,div};
intnum,curch;
charchtbl[]="
+-*/()="
;
charcorch[]="
+-*/()=0123456789"
intgetach()
{inti;
while
(1)
{curch=getchar();
if(curch==EOF)return-1;
for(i=0;
corch[i]&
&
curch!
=corch[i];
i++);
if(i<
strlen(corch))break;
returncurch;
intgetid()
if(curch>
='
0'
&
curch<
9'
)
{for(num=0;
curch>
getach())
num=__①__;
return-1;
else{for(i=0;
chtbl[i];
i++)
if(chtbl[i]==curch)break;
if(i<
=5)getach();
returni;
intcal()
{intx1,x2,x3,op1,op2,i;
i=getid();
if(i==4)x1=cal();
elsex1=um;
op1=getid();
if(op1>
=5)returnx1;
if(i==4)x2=cal();
elsex2=num;
op2=getid();
while(__②__)
{i=getid();
if(i==4)x3=cal();
elsex3=num;
if((op1/2==0)&
(op2/2==1))
x2=(*func[op2](x2,x3));
else{x1=__③__;
x2=x3;
__④__;
op2=getid();
return__⑤__(x1,x2);
voidmain()
{intvalue;
printf("
Pleaseinputanexpression:
\n"
getach();
while(curch!
='
{value=cal();
Theresultis:
%d\n"
value);
试题六
阅读下列程序说明和FORTRAN程序,将应填入程序中__?
__处的字句,写在答卷纸的对应栏内。
【程序说明】
子程序SUM计算数列
1,1/2,1/3,…,1/n,…
的前n项和,并以M位小数形式输出(M≤60)。
为提高计算结果的精度,用分数形式计算并存放数列的部分和,求和结果记为
A+U/V
其中U/V是不可约真分数,A为整数。
例如:
n=5,M=10时,子程序输出为
1+1/2+1/3+1/4+1/5=2+17/60
2.283333333
整型函数GCD用辗转相除法计算U和V的最大公约数。
SUBROUTINESUM(N,M)
INTEGERA,U,V,G,D(60),GCD
A=1
U=0
V=1
DO20K=2,N
U=__①__
V=__②__
A=__③__
U=MOD(U,V)
__④__
U=U/G
V=V/G
20
CONTINUE
WRITE(*,100)N,A,U,V
100
FORMAT(1X,'
1+1/2+1/3+…+1/'
I2,'
+'
I10,'
/'
I10)
DO40I=1,M
D(I)=__⑤__
__⑥__
40
WRITE(*,200)A,(D(I),I=1,M)
200
FORMAT(1X,I2,'
.'
60I1)
INTEGERFUNCTIONGCD(U,V)
INTEGERU,V
K=V
L=U
10
IF(MOD(K,L).GT.0)THEN
J=MOD(K,L)
K=L
L=J
GOTO10
ENDIF
__⑦__
从下列的2道试题(试题七至试题八)中任选1道解答。
试题七
阅读下列程序说明和C程序,将应填入程序中__?
本程序先从文件读入各考生的准考证号(设为整型数)及成绩,并将其存放在一棵检索二叉树上,二
叉树的结点的键值是成绩,二叉树每个节点带一链表,链表结点存放取得该成绩的考生的准考证号。
然后,程序按中序遍历检索二叉树,从高到底分输出结果,使每行输出某成绩及其取得该成绩的各考生的准考证号。
typedefstructidnode{
intid;
structidnode*next;
}IdNode;
typedefstructmarknode{
intmark;
IdNode*head;
structmarknodeleft,right;
}MarkNode;
charfname[]="
sp07.dat"
'
main()
{intid,mark;
MarkNode*root=null;
FILE*fp=fopen(fname,"
r"
if(!
fp){
file%sopenerror.\n"
fname);
exit(0);
while(!
feof(fp)){
fscanf(fp,"
%d%d"
&
id,&
mark);
btree(&
root,id,mark);
fclose(fp);
print(root);
btree(MarkNode**mpptr,intid,intmark)
{IdNode*ip;
MarkNode*mp=mpptr;
if(__①__){
if(mark==mp->
mark)addIdNode(__②__,id);
elseif(mark>
mp->
mark)btree(&
left,id,mark);
elsebtree(&
right,id,mark);
}else
{mp=(MarkNode*)malloc(sizeof(MarkNode));
mark=mark;
left=mp->
right=NULL;
__③__
addIdNode(&
head,id);
addIdNode(IdNode**ipp,intid)
{IdNode*ip=ipp;
if(__⑤__)addIdNode(__⑥__,id);
else{
ip=(IdNode*)malloc(sizeof(IdNode));
sp->
id=id;
ip->
next=NULL;
print(MarkNode*mp)
{IdNode*ip,ip0;
if(mp){
print(mp->
left);
%6d:
\t"
mp->
ip=mp->
head;
while(ip){
ip->
id);
ip0=ip;
ip=ip->
next;
free(ip0);
print(mp->
right);
free(mp);
试题八
某公司招聘M个工种(编号为1~M)的工作人员,每个工种有各自的计划招工数。
共有N位应聘者,每位应聘者有一报名号,且必须申报两个工种志愿,并参加公司组织的笔试和面试。
公司为每位应聘者评定一个综合考试成绩(0~100分)。
然后从高分到低分(分数相同者报名号小的优先)依次对每个应聘者进行录用。
录用的原则如下:
(1)对同一应聘者,第一志愿优于第二志愿。
(2)若应聘者的第一志愿工种已录满,则将其成绩减去5分后,立即参加第二志愿录用。
(3)在一个工种录取时,按申报该工种的应聘者"
录用成绩"
(第一志愿为考试成绩,第二志愿为考试成绩减5分)从高到底次序录用,"
相同者,按报名号从小到大顺序优先录用。
(4)允许某工种未招满计划招工数。
程序中数组NO、MARK、ZY1、ZY2分别存放应聘者的报名号、考试成绩、第一志愿工种遍号和第二志愿工种编号,并假定它们已先按考试成绩降序、后按报名号升序的顺序排列,数组GZ存放各工种的计划招工数。
子程序RY按上述录用原则完成录用工作。
录用过程中使用了三维数组RYNO,数组的最终值即为各工种的录取顺序名单。
数组元素RYNO(K,J,1)和RYNO(K,J,2)分别存放第K个工种准备录用的第1名应聘者的报名号和"
。
数组元素TOP(K)存放录用过程中第K个工种已存入数组RYNO的人数。
子程序INSERT将报名号NOI和成绩MARKI按"
降序顺序插入到数组RYNO第K个工种的相应位置中。
【程序】
SUBROUTINERY(NO,MARK,ZY1,ZY2,GZ,RYNO,TOP,M,N)
INTEGERNO(N),MARK(N),ZY1(N),ZY2(N),GZ(N)
INTEGERRYNO(M,N,2),TOP(,M)
DO10I=__①__
TOP(I)=0
DO20I=1,N
K1=ZY1(I)
K2=ZY2(I)
IF(TOP(K1).LT.GZ(K1))THEN
__②__
CALLINSERT(RYNO,M,N,K1,TOP(K1),NO(I),MARK(I))
ELSEIF(TOP(K20.LT.GZ(K2))THEN
TOP(K2)=__③__
RYNO(K2,TOP(K2),1)=NO(I)
RYNO(K2,TOP(K2),2)=__④__
ENDIF
CONTINUE
END
SUBROUTINEINSERT(RYNO,M,N,K,TOPK,NOI,MARKI)
INTEGERRYNO(M,N,2),TOPK
IF(J.EQ.0)THEN
RYNO(K,1,1)=NOI
RYNO(K,1,2)=MARKI
ELSEIF(MARKI__⑤__RYNO(K,J,2))THEN
RYNO(K,J+1,1)=NOI
RYNO(K,J+1,2)=MARKI
ELSE
__⑥__
__⑦__
J=J-1
GOTO10