阅读以下说明,将应填入(n)处的字句写在答卷纸的对应栏内。【说明】下面的程序为堆排序程序,其中函数adjust(i,n)是把以R[i](1≤i≤┕i/2┙)为根的二叉树调整成堆的函数,假定R[i]的左、右子树已经是堆,程序中的,是在主函数中说明的结构数组,它含有要排序的n个记录。【程序】Void adjust(i,n)Int i,n;{iht k,j;element extr;extr=r[i];k=i;j=2*i;while (j<=n ){if ((j<n) (r[j].key<r[j+1].key))(1);if (extr. key<r[j].key){r[k]=r[j];k=j;(2);}else(3);}r[k]=extr;}/*让i从┗i/2┛逐步减到1, 反复调用函数adjust, 便完成建立初始堆的过程。*/void heapsort (r,n)list r;int n;{int i,1;element extr;for (i=n/2;i>=1;- -i)(4); /* 建立初始堆*/for (k--n;k>=2;k- -){extr=r[1];r[1]=r[k];r[k]=extr;(5);}}

阅读以下说明,将应填入(n)处的字句写在答卷纸的对应栏内。

【说明】

下面的程序为堆排序程序,其中函数adjust(i,n)是把以R[i](1≤i≤┕i/2┙)为根的二叉树调整成堆的函数,假定R[i]的左、右子树已经是堆,程序中的,是在主函数中说明的结构数组,它含有要排序的n个记录。

【程序】

Void adjust(i,n)

Int i,n;

{

iht k,j;

element extr;

extr=r[i];

k=i;

j=2*i;

while (j<=n )

{if ((j<n) && (r[j].key<r[j+1].key))

(1);

if (extr. key<r[j].key)

{

r[k]=r[j];

k=j;

(2);

}

else

(3);

}

r[k]=extr;

}

/*让i从┗i/2┛逐步减到1, 反复调用函数adjust, 便完成建立初始堆的过程。*/

void heapsort (r,n)

list r;

int n;

{

int i,1;

element extr;

for (i=n/2;i>=1;- -i)

(4); /* 建立初始堆*/

for (k--n;k>=2;k- -)

{

extr=r[1];

r[1]=r[k];

r[k]=extr;

(5);

}

}


相关考题:

●试题二阅读下列函数说明和C代码,将应填入(n)处的字句写在答题纸的对应栏内。【说明2.1】以下C语言函数用二分插入法实现对整型数组a中n个数的排序功能。【函数2.1】void fun1(int a[]){int i,j,k,r,x,m;for(i=2;i=n;i++){ (1) ;k=1;r=i-1;while(k=r){m=(k+r)/2;if(xa[m])r=m-1;else (2) ;}for(j=i-1;j=k;j--)a[j+1]=a[j];(3) ;}}【说明2.2】以下程序可以把从键盘上输入的十进制数(1ong型)以二~十六进制形式输出。【程序2.2】#includestdio.hmain(){char b[16]={′0′,′1′,′2′,′3′,′4′,′5′,′6′,′7′,′8′,′9′,′A′,′B′,′C′,′D′,′E′,′F′};int c[64],d,i=0,base;long n;printf(″enter a number:′n″);scanf(″%1d″,n);printf(″enter new basc:kn″);scanf(″%d″,base);do{c[i]= (4) ;i++;n=n/base;}while(n!=0);printf("transmite new base:\n");for(--i;i=0;--i){ d=c[i];printf("%c", (5) );}}

阅读下列程序说明和C代码,将应填入(n)处的字句写在对应栏内。[说明]函数Printprime(int UpBound)的功能是输出1到UpBound以内的全体素数。[函数2.1]void PrintPrime(int UpBound)printf("2," );for(i=3; i<UpBound; i+ =2) {int k = sqrt(i);for(j=3; j<= k;(1)) /*检查i是否有3到k以入的奇因数*/if((2)) break;fi((3)) printf("%d", i);[函数2.2说明]递归函数invert(int a[],int k),int k)的功能是将数组a中的前k个元素逆置。[函数2.2]void invert(int a[ ], int k){ int t;if ((4)) {invert((5));t=a[0];a[0] =a[k-1];a[k-l]=t;}}

阅读以下函数说明和C语言函数,将应填入(n)处的字句写在对应栏内。【程序2.1说明】已知一个排好序的数组,现输入一个数,要求按原来的顺序规律,将它插入到数组中。【程序2.1】include <stdioh>define N 100void main(){float a[N+l],x;int i,p;printf("输入已经排好序的数列: ");for(i=0; i<N; i++)scanf(%f",a[i]);printf("输入要插入的数:");scanf("%f",x);for(i=0,p=N; i<N; i++)if(x<a[i]){(1)break;}for(i=N-1; i>=p; i--)(2)(3)for(i=0; i<=N; i++)prinff("%f\t",a[i]);}【程序2.2说明】本程序用变量count统计文件中字符的个数。【程序2.2】include <stdio.h>include <stdlib.h>void main(){FILE *fp;long count=0;if((fp=fopen("letter.txt","r"))==NULL){printf("can not open file\n");exit(0);}while(!feof(fp)){(4)count++;}printf("count=%d\n",count);(5)}

阅读下列函数说明和C代码,将应填入(n)处的字句写在对应栏内。【说明2.1】以下C语言函数用二分插入法实现对整型数组a中n个数的排序功能。【函数2.1】void fun1 (int a[]){ int i,j,k,r,x,m;for(i=2;i<=n;i++){ (1);k=1;r=i-1;while(k<=r){ m=(k+r)/2;if(x<a[m])r=m-1;else (2);}for(j=i-1;j>=k;j--)a[j+l]=a[j];(3);}}【说明2.2】以下程序可以把从键盘上输入的十进制数(long型)以二~十六进制形式输出。【程序2.2】include<stdio.h>main(){ charb[16]={'0','l','2','3 ,4,'5','6','7','8','9','A','B','C','D','E','F'};int c[64],d,i=0,base;long n;printf("enter a number:\n");scanf("%1d",n);printf("enter new basc:\n");scanf("%d", base);do{ c[i]=(4);i++; n=n/base;} while(n!=0);printf("transmite new base:\n");for(--i;i>=0;--i){ d=c[i];printf("%c",(5));}}

阅读以下函数说明和C语言函数,将应填入(n)处的字句写在对应栏内。【程序2.1说明】求所有满足如下条件的三位数:它除以11得的商等于它各位数字的平方和。例如 550,除以11商为50,50=52+52+02。【程序2.1】void main(){int i, j,n,s;for(i=100;i<=999;i++){n=i;j=n/11;s=0;while((1)){(2)n/=10;}if((3))printf("%d\t",i);}}【程序2.2说明】本程序输入一字符串,将其中的大写字母改变成小写字母。【程序2.2】void main(){int i=0;char s[120];scanf("%s",s);while((4)){if((5))s[i]=s[i]- 'A'+'a';i++;}printf("%s\n",s);}

阅读以下说明和C语言函数,将应填入(n)处的语句写在对应栏内。【说明】下面的程序构造一棵以二叉链表为存储结构的二叉树。【函数】BitTree *createbt(BitTree *bt){BitTree *q;struct node *s[30];int j,i;char x;printf("i,x=");scant("%d,%c",i,x);while(i!=0 x!='$'){q=(BitTree *}malloc(sizeof(BitTree));//生成一个结点(1);q->lchild=NULL;q->rchild=NULL;(2) ;if ((3)){j=i/2; // j为i的双亲结点if(i%2==0)(4); //i为j的左孩子else(5); //i为j的右孩子}printf("i,x=");scanf("%d,%c",i,x);}return s[i];}

阅读下列程序说明和C++程序,把应填入其中(n)处的字句,写在对应栏内。【说明】阅读下面几段C++程序回答相应问题。比较下面两段程序的优缺点。①for (i=0; i<N; i++ ){if (condition)//DoSomething…else//DoOtherthing…}②if (condition) {for (i =0; i<N; i++ )//DoSomething}else {for (i=0; i <N; i++ )//DoOtherthing…}

阅读以下说明和C语言函数,将应填入(n)处的字句写在对应栏内。【说明】下面的程序构造一棵以二叉链表为存储结构的二叉树算法。【函数】BTCHINALR *createbt ( BTCHINALR *bt ){BTCHINALR *q;struct node1 *s [30];int j,i;char x;printf ( "i,x =" ); scanf ( "%d,%c",i,x );while (i!=0 x!='$'){ q = ( BTCHINALR* malloc ( sizeof ( BTCHINALR )); //生成一个结点(1);q->1child = NULL;q->rchild = NULL;(2);if((3);){j=i/2 //j为i的双亲结点if(i%2==0(4) //i为j的左孩子else(5) //i为j的右孩子}printf ( "i,x =" ); scanf ( "%d,%c",i,x ); }return s[1]}

●试题二阅读下列函数说明和C代码,将应填入(n)处的字句写在答题纸的对应栏内。【说明】该程序运行后,输出下面的数字金字塔【程序】includestdio.hmain (){char max,next;int i;for(max=′1′;max=′9′;max++){for(i=1;i=20- (1) ;++i)printf(" ");for(next= (2) ;next= (3) ;next++)printf("%c",next);for(next= (4) ;next= (5) ;next--)printf("%c",next);printf("\n");}}