|
作者: 时间:2001-9-24 15:26:11 来自: 责任编辑: 阅读次数: | |
 |
br>
}
}
试题六
阅读以下程序说明和FORTRAN程序,将应填入程序中 (n) 处的字句,写在答卷的对应栏内。
[程序说明]
子程序PRINT对给定的N(2 < N < 50)和M(2 < M < 16),以M进制形式计算并输出N!的全部有效数字。
因N!的值通常超出整型数最大值,故程序采用一维数组存储计算结果。数组A的每一个元素存放N!的M进制表示形式的一位数值。例如:当N=9,M=10时
9! = 362880 (10)
其存储形式为
数组下标 1 2 3 4 5 6 7 8 ……
值 0 8 8 2 6 3 0 0 ……
当N = 3,M = 4时
3! = 12 (4)
其存储形式为
数组下标 1 2 3 4 5 ……
值 2 1 0 0 0 ……
程序中,用加法代替乘法计算阶乘,(K-1)!作为加数暂存于数组B中,D是数组B中有效数字的长度。
[程序]
SUBROUTINE PRINT (M,N)
CHARACTER V*16
INTERGER A(200), B(200), C, D
DATA V/ '012345678ABCEDF '/
DO 10 I = 1,200
A ( I ) = 0
B ( I ) = 0
10 CONTINUE
A (1) = 1
D = _______(1)_______
DO 70 K=2,N
DO 20 J=1,D
____(2)____
20 CONTINUE
DO 50 NUM=1.____(3)____
I=1
40 C=A(O)+B(I)
A(I)=___(4)____
I=I+1
_____(5)____
IF ( I. LT. MIN(D+K-1,200)) ____(6)____
50 CONTINUE
60 IF ( A(I) . EQ. 0 ) THEN
I=I-1
GOTO 60
ENDIF
____(7)____
70 CONTINUE
WRITE ( *,100) N,M,(V(A(J)+1:A(J)+1),J=D,1,-1)
100 FORMAT (1X, I2, '! ( ', I2 , ') = ',50A1/3(9X,50A1))
RETURN
END
试题七
阅读以下程序说明和C程序,将应填入程序中 (n) 处的字句,写在答卷的对应栏内。
[程序说明]
某集团公司为发展生产向社会公开招聘M个工种的工作人员,每个工种各有不同的编号(1至M)和计划招聘人数。每位应聘者需申报两个工种,并参加公司组织的考试。公司将按应聘者的成绩从高分至低分的顺序进行排队录取。公司的录取原则是:从高分到低分依次对每位应聘者先按其第一志愿录取;当不能按其第一志愿录取时,便将他的成绩扣去5分后,重新排队,并按其第二志愿考虑录取。
程序为输出各工种实际招聘的应聘人员,每个工种都保留一个录取者的有序队列。录取处理循环直至招聘额满或已对全部应聘者都作了录取处理。
程序中,类型STU包含有应聘者的基本信息:编号、成绩、志愿、排队成绩和录取志愿号。数组rz [ ]的每个元素对应一个工种,包含有计划招聘人数和已录取的人数。
[程序]
#include
#define M 20
#define EDMARK 5
typedef struct stu {
int no, total, z [ 2 ], sortm, zi;
struct stu *next;
} STU;
struct rzmode {
int 1mt , count;
STU *next;
} rz [ m ];
STU *head = NULL, *over = NULL;
Int all
FILE *fp;
char dataf [ ] = "pp07.dat";
print (STU *p)
{ for (;p!=NULL; p = p -> next)
printf ("%d(%d)\t", p->no, p->total);
}
insert (STU **p, STU *u)
{ STU *v, *q;
for (q = *p;q != NULL; v = =q , ____(1)____)
if (q-> sortm < u->sortm) break;
if ( q == *p) ___(2)____;
else ____(3)____;
u -> next = q ;
}
main ( )
{ int zn, i, no, total, z1, z2 ;
STU *p, *v, *q;
fp = fopen (dataf, "r");
if (fp == NULL)
{ printf ("Can’t open file %s.\n",dataf);
exit (0);
}
fscanf (fp, "%d", &zn);
for (all=0, i=1; i <= zn; i++)
{ fscanf (fp, “%d”, &rz [ i ].lmt );
rz [ i ].count = 0; rz[ i ].next = NULL;
all += ___(4)___;
}
for (;;)
{ if ( ( fscanf (fp, "%d%d%d%d",&no,&total,&z1,&z2)) !=4)
break;
p = ( STU *) malloc (sizeof (STU));
p -> no = no;
p -> total = p -> sortm = total;
p -> zi = 0; p -> z [ 0 ] = z1; p -> z [ 1 ] = z2;
____(5)____;
}
fclose (fp);
for (;all && head!=NULL;)
{ p = head; head = head -> next;
if (rz [ p -> z[p ->zi]].count < ___(6)___)
{ rz [ p -> z[p ->zi]].count ++;
insert (&rz [ p -> z [ p -> zi ] ].next, p);
all --;
continue;
}
if (p -> zi >= 1 )
{ p -> next = over; over = p;
continue;
}
p -> sortm -= DEMARK; _____(7)_____;
insert (&head,p);
}
for ( i = 1; i <= zn; i++ )
{ printf ("%d:\n",i);
print ( rz [ i ].next);
printf ("\n");
}
printf ("over:\n"); print (head);
print (over); printf("\n");
}
试题八
阅读以下程序说明和FORTRAN程序,将应填入程序中 (n) 处的字句,写在答卷的对应栏内。
[程序说明]
某肉猪养殖场为了保证生猪质量,对每次配种种猪的祖先进行族谱代系分析,以选择无血缘关系或尽可能远的远亲种猪进行配种。
为了分析某个给定种猪的族谱代系,我们为该种猪及其每个祖先计算一个代系号,代系号的计算方法是:给定种猪自身的代系号为1,父母的代系号为其子女代系号加1。本题假定任一种猪的最大祖先代系号小于20。
假定每只种猪有一能唯一标识的编号I ( 1 < I < 100 ),数组元素PARENT (1,I)、PARENT(2,I)分别存放种猪I的双亲编号,当不知其某个双亲来源时,其相应的双亲编号为零。
函数 FINDLV 对给定的二只编号为MA、MB的种猪,查找它们是否至少存在一只相同的祖先。若存在,则返回相同祖先中最小的代系号;否则返回值为100。程序中用数组NOA、LEVA存放MA的所有祖先编号及其相应的代系号,TOPA为MA的祖先个数(含MA),数组NOB、LEVB存放MB的所有祖先编号及其相应的代系号,TOPB为MB的祖先个数(含MB)。
子程序GF将种猪编号MAB的所有祖先编号存放于数组NO中,将其相应的代系号存放于数组LEV中。实现时,先将种猪编号MAB及代系号1分别存入NO(1)和LEV(1)中,然后按代系号由小到大的次序依次将其祖先(如有的话)的编号和代系号加入数组NO和LEV中,直 一九九六年度程序员级上午试卷 共有5页 第 1 2 3 4 5 页
|
|
|
|
中华网校依法保护知识产权,如果我们的文章有涉及或侵犯您的有关权益,请即时与我们
联系,
注明网址及文章,我们会即时处理或删除,感谢您的合作!中华网校email
中华网校由广州市中六电脑城智锐计算机专业培训学院及中华网校技术中心提供网络支持未经本站许可任何个人网站、书刊报社一律不得私自复制,转载本站内容! |
|
 | |