N个有序整数数列已放在一维数组中,给定下列程序中,函数fun()的功能是:利用折半查找法查找整数m在数组中的位置。若找到,则返回其下标值;反之,则返回“Not be found!”。 折半查找法的基本算法是:每次查找前先确定数组中待确定的范围:lo

admin2017-01-11  45

问题 N个有序整数数列已放在一维数组中,给定下列程序中,函数fun()的功能是:利用折半查找法查找整数m在数组中的位置。若找到,则返回其下标值;反之,则返回“Not be found!”。
    折半查找法的基本算法是:每次查找前先确定数组中待确定的范围:low和high(low<high),然后把m与中间位置(mid)中元素的值进行比较。如果m的值大于中间位置元素中的值,则下一次的查找范围放在中间位置之后的元素中;反之,下次查找范围落在中间位置之前的元素中。直到low>high,查找结束。
  注意:
  请勿改动主函数main和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。
【试题源程序】
#include
#define N 10
int fun(int a[],int m)
{
  int low=0,high=N-1,mid;
  while(low<=high)
  {
  mid=【1】
  if(m<a[mid])
    high:【2】
    else
    if(m>a[mid])
    low=mid+1:
    else
    return(mid);
  }
  【3】(-1);
}
main()
{
int i,a[N]={-3,4,7,9,13,24,67,89,100,180},k,m;
printf("a数组中的数据如下:");
for(i=0;i<N;i++)
printf("%d",a);
printf("Enter m:");
scanf("%d",&m);
k=fun(a,m);
if(k>=0)
  printf("m=%d,index=%d\n",m,k);
  else
    printf("Not be found\n");
}

选项

答案【1】(10w+high)/2 【2】mid-1 【3】return

解析 填空【1】:此处要确定折半查找的中间位置,所以应该填(10w+high)/2,这个式子的运算结果为整型数据。
填空【2】:由折半查找的算法可得,中间的元素值大,则应该选择前半段进行查找,所以此处应该把mid前一位的下标赋值给high。
填空【3】:由算法可以看出,此处应该是执行完毕,仍然没有找到满足条件的元素,此时应当返回-1,所以使用关键字“return”。
转载请注明原文地址:https://kaotiyun.com/show/6rID777K
0

最新回复(0)