35. 已知a数组元素共5个,依次为12,10,5,3,1;b数组元素共4个,依次为4,6,8,15,则执行如下所示的过程语句sort后得到c数组各元素依次为15,12,10,8,6,5,4,3,1;数组a,b,c的长度分别为l=5,m=4,n=9请在程序中方框内填入正确的成分,完成上述要求。
procedure sort;
var i, j, k, x: integer; d: array[1..m] of integer;
begin
for i:=1 to m do d[i]:=(1) ;
i:=1; j:=1; k:=1;
while (i<=l) and (j<=m) do
begin
if a[i]>d[j] then begin(2) ; (3) _end
else begin (4)__; (5) __end;
c[k]:=x; (6)
end;
while(7) _do
begin c[k]:=a[i]; k:=k+1; i:=i+1;end;
while(8) _do
begin c[k]:=d[j]; k:=k+1; j:=j+1;end;
end. {sort} 【上海交通大学 1998 七 (12分)】
36. 下列程序段search(a,n,k)在数组a的前n(n>=1)个元素中找出第k(1<=k<=n)小的值。这里假设数组a中各元素的值都不相同。
#define maxn 100
int a[maxn],n,k;
int search_c(int a[], int n, int k)
{int low, high, i, j, m, t;
k--,;low=0 ;high=n-1;
do {i=low; j=high ; t=a[low];
do{while (i<j && t<a[j]) j--;
if (i<j) a[i++]=a[j];
while (i<j && t>=a[i]) i++
if (i<j) a[j--]=a[i];
} while (i<j);
a[i]=t;
if (1) ;
if (i<k) low= (2) ; else high= (3) ;
}while(4) _;
return(a[k]);
} 【上海大学 1999 一、1(8分)】
37. 完善下列程序,每小题在pascal语言(a)和c语言(b)中任选一题。下面是一个将广义表逆置的过程。例如原来广义表为((a,b),c,(d,e)),经逆置后为:((e,d),c,(b,a))。
(a)算法的pascal语言过程描述(编者略):(b)算法的c语言过程描述:
typedef struct glistnode
{int tag;
struct glistnode *next;
union{char data;
struct{struct glistnode *hp,*tp;}ptr;
}val;
}*glist,gnode;
glist reverse(p)
glist p;
{glist q,h,t,s;
if(p==null) q=null;
else
{if(1) { q=(glist)malloc(sizeof(gnode)); q->tag=0;
q->val.data=p->val.data; }
else {(2)
if (3)
{t=reverse(p->val.ptr.tp); s=t;
while(s->val.ptr.tp!=null) s=s->val.ptr.tp;
s->val.ptr.tp=(glist)malloc(sizeof(gnode));
s=s->val.ptr.tp;s->tag=1;s->val.ptr.tp=null;
s->val.ptr.hp=h; (4) __ }
else {q=(glist)malloc(sizeof(gnode));q->tag=1;
q->val.ptr.tp=null; (5) ; }
}
}
return(q);
}
【上海大学 2002 六、3 (10分)】
责任编辑:小草