从下列的 2 道试题(试题七至试题八)中任选 1 道解答。如果解答的试题数超过 1 道,则解答的前 1 道有效。 |
试题七
阅读下列程序说明和 C 程序,将应填入程序中__?__处的字句,写在答卷纸的对应栏内。
【程序说明】
本程序先从文件读入各考生的准考证号(设为整型数)及成绩,并将其存放在一棵检索二叉树上,二叉树的结点的键值是成绩,二叉树每个节点带一链表,链表结点存放取得该成绩的考生的准考证号。然后,程序按中序遍历检索二叉树,从高到底分输出结果,使每行输出某成绩及其取得该成绩的各考生的准考证号。
【程序】
#include <stdio.h>
typedef struct idnode{
int id;
struct idnode *next;
} IdNode;
typedef struct marknode{
int mark;
IdNode *head;
struct marknode left,right;
} MarkNode;
char fname[] = "sp07.dat"'
main()
{ int id,mark;
MarkNode *root = null;
FILE *fp = fopen(fname,"r");
if (!fp) {
printf("file %s open error.\n",fname);
exit(0);
}
while (!feof(fp)) {
fscanf(fp,"%d%d",&id,&mark);
btree(&root,id,mark);
}
fclose(fp);
print(root);
}
btree(MarkNode **mpptr,int id,int mark)
{ IdNode *ip;
MarkNode *mp = mpptr;
if(__①__){
if(mark == mp->mark) addIdNode(__②__,id);
else if(mark>mp->mark) btree(&mp->left,id,mark);
else btree(&mp->right,id,mark);
}else
{ mp = (MarkNode *)malloc(sizeof(MarkNode));
mp->mark=mark;
mp->left = mp->right = NULL;
__③__
addIdNode(&mp->head,id);
__④__
}
}
addIdNode(IdNode **ipp,int id)
{ 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);
printf("%6d: \t",mp->mark);
ip=mp->head;
while(ip){
printf("%6d: \t",ip->id);
ip0 = ip;
ip = ip->next;
free(ip0);
}
printf("\n"); print(mp->right); free(mp);
}
}
试题八
阅读下列程序说明和 FORTRAN 程序,将应填入程序中__?__处的字句,写在答卷纸的对应栏内。
【程序说明】
某公司招聘 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 个工种的相应位置中。
【程序】
SUBROUTINE RY(NO,MARK,ZY1,ZY2,GZ,RYNO,TOP,M,N)
INTEGER NO(N),MARK(N),ZY1(N),ZY2(N),GZ(N)
INTEGER RYNO(M,N,2),TOP(,M)
DO 10 I=__①__
10 TOP(I)=0
DO 20 I=1,N
K1=ZY1(I)
K2=ZY2(I)
IF(TOP(K1).LT.GZ(K1)) THEN
__②__
CALL INSERT(RYNO,M,N,K1,TOP(K1),NO(I),MARK(I))
CALL INSERT(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
20 CONTINUE
END
SUBROUTINE INSERT(RYNO,M,N,K,TOPK,NOI,MARKI)
INTEGER RYNO(M,N,2),TOPK
10 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
GOTO 10
ENDIF
END
答案
试题一
[问题1]
处理 1 能发现两人录入不全同的工单和非法数据(如非法字符,数据越界等)
处理 2能发现与营业库不一致的工单(如新装电话重号,移机,拆机,更改等原电话号码不存在等)
处理 4 能发现两人录入不全同的用户回函和非法数据(如非法字符,电话号长度不对等)
[问题2]
户名+地址+电话号码+套红标记+字体大小("套红标记+字体大小"可写成"印刷要求")
[问题3]
处理 5 前对回函库按序号排序。
处理 2 前对工单库的排序关键字进行排序
试题二
[问题1]
1. I:N-K或 I;N-J 或 M:4(K-1)(N-K+1)+N-2K+1
2. J:N-K或 J:N-J 或 M:4(K-1)(N-K+1)+2(N-2K+1)
3. I:K+1或 I;N+2-J 或 4(K-1)(N-K+1)+3(N-2K+1):M
4. J:K+1或 J;I+1 或 4K(N-K):M
5. MOD(N,2):0 或 [N/2]*2:N或 [N/2]:[(N+1)/2] 或N/2:[N/2] 或[N/2]:[N/2] 或 N:2(K-1) 或
I+J=N 或 M-1:N*N
6. M→A[K,K]
其中:M可答成N*N; A[K]可答成[(N+1)/2, (N+1)/2]或 A[[N/2]+1, [N/2]+1] A[I+ 1,J+1]
[问题2]
1. A[I,J] 或 M→A[I,J]
2. A[J,I] 或 M→A[J,I]
试题三
1. COUNT(*)
2. GAMES.INO=ITEM.INO
3. GAMES.ANO='100872' 注: 2,3 可互换
4. EXISTS
5. * 或 ANO 或 INO 或 SCORE 或三个列名的任意组合 4,5 也可为 4. ANO,IN 5. ANO
6. CREATE VIEW
7. ATHLETE, ITEM, GAMES(三项可交换)
试题四
1. LD GR2,1,GR1 或 ADD GR2,1,GR1
2. LEA GR2,-1,GR2 1,2 两条指令中形成 N-1 的解答均正确
3. ADD GR3,2,GR1
4. CPL GR0,0,GR3
5. LD GR2,UP
6. JPZ LOOP
7. LEA GR2,-1 或 SUB GR2, LOW
试题五
1. num*10+curch-'0' 其中'0'可答成48或0x30或corch[7]
2. (op2>=0)&&(op2<5) 或 op2<5 或 op2<=4 或 !(op2>=5)
3. (*func[op1])(x1, x2)
4. op1=op2
5. (*func[op1])
试题七
1. mp 或 mp !=NULL 或 *mpptr 或 *mpptr !=NULL
2. &mp->head 或 &(mppr)->head
3. mp->head=NULL
4. *mpptr=mp
5. ip 或 ip !=NULL 或 *ipp 或 *ipp !=NULL
6. &ip->next 或 &(ipp)->next
7. *ipp=ip
试题六
1. U*K+V
2. V*K
3. A=U/V 或 A+INT (U/V) 或 A+(U-MOD(U,V))/V
4. G=GCD(U,V)
5. 10*U/V或 INT(10*U/V) 或 (U*10-MOD(U*10,V))/V
6. U=10*U-D(I)*V 或 U=MOD(10*U, V)
7. GCD=L
试题八
1. 1,M 或 1,M,1
2. TOP(K1)=TOP(K1)+1
3. TOP(K2)+1
4. MARK(I)-5
5. .LE.
6. RYN0(K,J+1,1)=RYNO(K,J,1)
7. RYN0(K,J+1,2)=RYNO(K,J,2)
注:(6), (7)次序可交换
- 推荐给朋友
- 收藏此页
·2008年下半年软考信息系统项目管理师试题(下午II) (2008-12-21 22:39:30)
·2008年下半年计算机软考网络工程师试题(下午) (2008-12-21 22:26:13)
·2008下半年软考系统分析师考试试题(下午)II (2008-12-21 22:20:49)
·2008年下半年计算机软考程序员试题(下午) (2008-12-21 22:18:18)
·2008年下半年计算机软考程序员试题(上午) (2008-12-21 22:11:38)