填空题
【说明2.1】
以下C语言函数用二分插入法实现对整型数组a中n个数的排序功能。
【函数2.1】
void fun1 (int a[])
{ int i,j,k,r,x,m;
for(i=2;i<=n;i++)
{ {{U}} (1) {{/U}};
k=1;r=i-1;
while(k<=r)
{ m=(k+r)/2;
if(x<a[m])r=m-1;
else{{U}} (2) {{/U}};
}
for(j=i-1;j>=k;j--)
a[j+l]=a[j];
{{U}} (3) {{/U}};
}
}
【说明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]={{U}} (4) {{/U}};
i++; n=n/base;
} while(n!=0);
printf("transmite new base:/n");
for(--i;i>=0;--i)
{ d=c[i];
printf("%c",{{U}} (5) {{/U}});
}
}
【正确答案】
1、x=a[i] (2)a[k]=x (3)k=m+1 (4) n% base
【答案解析】(5)b[d]
[解析] 函数3.1的思想是依次将数组中的每一个元素插入到有序段中,使有序段的长度不断地扩大。对于待插入元素,先用二分查找法找出应该插入的位置。然后将元素插入。对数组来说,就是将该位置以后的元素依次后移,然后将待插入元素放到移出来的空位中。
程序3.2用的思想是除base(base在二~十六进制之间)取余法求得相应进制数,然后再转换输出。