|
作者: 时间:2001-9-24 14:49:16 来自: 责任编辑: 阅读次数: | |
 |
i],s[i]=NULL;____(1)____;)
{/*将第i链表移入top工作链表,并顺序处理工作链表的各结点 */
q=top;____(2)____;
if(s[j=q->data]!=NULL)
{/*将j链表也移入工作链表*/
for(p=s[j];____(3)____;p=p->link);
p->link=top; top=s[j];____(4)____;
}
/*在重新生成的第i链表中寻找当前结点的插入点*/
for(y=s[i]____(5)____;x=y,y=y->link);
if (y!=NULL && y->data= = q->data)
free(q);/*因重新生成的第i链表已有当前结点,当前结点删除*/
else {/*当前结点插入新生成的第i链表*/
____(6)____;
if (____(7)____ s[i]=q;
else x->link=q;
}
}
for(i=0;i<0;i++) /*输出结果*/
{if (s[i]= = NULL)continue;
for(p=s[i];p!=NULL;)
{ printf(“\t%d”,p-br> q=p-br> }
printf(“\n”);
}
}
试题六
阅读以下程序说明和FORTRAN程序,将应填入__(n)__处的字句,写在答卷的对应栏内。
[程序说明]
子程序MS对N阶方阵A中的与次(副)对角线平行的各条斜线(共有2N-1条)上的元素进行累加和比较,求出累加和的最大值MAX,以及具有最在值的斜线上的最大元素TOP,例如
MAX=10
A=
TOP=6
[程序]
SUBROUTINE MS(A,N,MAX,TOP)
REAL MAX,A(N,N)
MAX=A(1,1)
TOP=A(1,1)
DO 20 K=____(1)____
IF(K.E.N)THEN
IBEG=K
IEND=1
JBEG=1
ELSE
IBEG=____(2)____
IEND=____(3)____
JBEG=____(4)____
ENDIF
J=JBEG
____(5)____
T=Az(IBEG,JBEG)
DO 10 I=IBEG,IEND,-1
S=S+A(I,J)
IF(A(I,J) .GT.T) T=A(I,J)
____(6)____
10 CONTINUE
IF(S.GT.MAX) THEN
MAX=S
TOP=T
ELSE
IF(____(7)____)TOP=T
ENDIF
20 CONTINUE
RETURN
END
试题七
阅读以下程序说明和C程序,将应填入__(n)__处的字句,写在答卷的对应栏内。
[程序说明]
有些非负整数文件中存在许多边续相等的整数段。设计函数packed( )将这种整数原文件按以下规则压缩存储到另一个压缩文件中:
餷 一个连续相等的整数段,如有C(>1)个边续相等整数,在压缩文件中存入C和这个整数。
餷 一个不连续相等的整数段,如有C(C>1)个整数,其中每个整数都与其相邻的整数不等,在压缩文件中存入-C和这个C个整数。
例如,原文件为
2 2 2 4 4 4 8 3 8 1 1 1 1 2 2 1
则它的压缩文件为
3 2 3 4 –3 8 3 8 4 1 –2 2 1
函数packed( ) 把从原文件读入的整数暂存于数组buf中,对连续相等的整数段只保存一个整数。当发现一个连续相等整数段或一个不边续相等整数段结束时,就将该整数段按压缩规则存入压缩文件。函数为了防止不连续相等整数太长,当发现不连续相等整数段已有N(N=100)个整数时,先将其中前(N-2)个整数按压缩规则存入压缩文件。
[程序]
# include
# define N
char rfname[]=”pp071.dat”,wf name[]=”pp072.dat”:
main()
{FILE* rfp,* wfp;
if ((rfp=fopen(rfname,”r”))= =NULL)
{ printf (“Can’t open file %s.\n”,rfname);
exit(1);
}
wfp=fopen(wfname,”w”);
packed(wfp,rfp);
fclose(wfp_; fclose(rfp);
printf(“The program has finished.\n”);
}
packed (FILE*wfp,FILE *rfp)
{int buf(N),pos,c,pstatus,cstatus;
c =0; /* c:当前整数段已读入的整数个数*/
pos =0: /* pos:下一个读入整数在buf中的存放位置*/
while(fscanf(rfp,”%d”,buf+pos)= = 1)
{ if (c= =0)
{c=pos=1:continue:/*buf中只有一个数*/
}
if (c= =1)
{ /*buf中已有两个数,建立已读入的两个数的相等与否状态*/
pstatus=buf[0]= =buf[1];
pos=____(1)____;/*设定下一个输入数在buf中的位置*/
c =2; /*设置当前整数段已读入的整个数*/
continue;
}
cstatus=____(2)____;/*建立最后两个数的相等与否状态*/
if (pstatus && ! cstatus)
{ /*连续相等整数段结束*/
pop(pstatus,buf,c,wfp);
____(3)____;c=pos=1;pstatus=cstatus;
}
else if (!pstatus && cstatus || pos= =cstatus;
{/*不连续相等整数段已结束或已满N个*/
pop(____(4)____);
____(5)____; c=2;
if(!cstatus)
{ /*不连续相等整数段尚未结束*/
____(6)____;pos=2;
}else
{/* 不连续相等速数段已结束*/
____(7)____;pstatus=cstatus;
}
}else{ /*一个整数段还未结束*/
c++; if (!pstatus)pos++;
}
}
if(c>0) pop (pstatus,buf,c,wfp); /*最后一个整数段的处理*?
}
pop(int s,int *b,int c,FILE* fp)
{/*一个整数段以压缩形式存入压缩文件*/
int i;
if(s)fprintf(fp,”%d %d\n”,c, *b);
else {fprintf(fp,”%d”,-c);
for(i=0;ibr> fprintf(fp,”%d”,-C);
rprint(fp,”\n”);
}
}
试题八
阅读以下程序说明和FORTRAN程序,将应填入__(n)__处的字句,写在答卷的对应栏内。
[程序说明]
为减少存贮空间或数据通信中的信息量,经常需要对原始数据进行压缩。下面给出一种数据压缩规则:
(1) 当原始数据中连续出现N(N>1)个相同的数X时,则在压缩数据中相继存放N和X两个数
(2) 当原始数据中连续出现M(M>0)个相邻不同的数(即每个数与其相邻的数均不相同)时,则在压缩数据中先存放-M,再存放这M个相邻不同的数。
(3) 在压缩数据中,数据次序与原始数据中数的出现次序相一对敌,并在压缩数据的最后加上0,作为结束标志。
例如,原始数据如下:
-14,-14,-14,2,3,5, -Z,8,8,8,8,-6,5,7,12,19,25
压缩后的数据为:
3,-14,-4,2,3,5,-2,5,8,-6,-6,5,7,12,19,25,0
子程序PACK用来压缩原始数据,并求出压缩后数据的数目。程序中数组X存放L个原始数据,数组Y存放压缩后的数据(假定Y中数据数目不超过1000)。子程序POP根据参数SAME之逻辑值将X中一组连续出现的数据或一组相邻不同的数据以压缩方式存入在数组Y中。
[程序]
S 一九九七年度程序员级下午试题 共有3页 第 1 2 3 页
|
|
|
|
中华网校依法保护知识产权,如果我们的文章有涉及或侵犯您的有关权益,请即时与我们
联系,
注明网址及文章,我们会即时处理或删除,感谢您的合作!中华网校email
中华网校由广州市中六电脑城智锐计算机专业培训学院及中华网校技术中心提供网络支持未经本站许可任何个人网站、书刊报社一律不得私自复制,转载本站内容! |
|
 | |