niusouti.com

N个有序整数数列已放在一维数组中,给定下列程序中,函数fun()的功能是:利用折半查找算法查找整数m在数组中的位置。若找到,则返回其下标值:反之,则返回-1。折半查找的基本算法是:每次查找前先确定数组中待查的范围:low和high(low<high),然后把m与中间位置(mid)中元素的值进行比较。如果m的值大于中间位置元素中的值,则下一次的查找范围放在中间位置之后的元素中;反之,下次查找范围落在中间位置之前的元素中。直到low>high,查找结束。请改正程序中的错误,使它能得出正确的结果。注意:不要改动

题目

N个有序整数数列已放在一维数组中,给定下列程序中,函数fun()的功能是:利用折半查找算法查找整数m在数组中的位置。若找到,则返回其下标值:反之,则返回-1。

折半查找的基本算法是:每次查找前先确定数组中待查的范围:low和high(low<high),然后把m与中间位置(mid)中元素的值进行比较。如果m的值大于中间位置元素中的值,则下一次的查找范围放在中间位置之后的元素中;反之,下次查找范围落在中间位置之前的元素中。直到low>high,查找结束。

请改正程序中的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

试题程序:

include <stdio.h>

define N 10

/*************found*********************/

void fun(int a[],int m)

{ int low--0,high=N-l,mid;

while (low<=high)

{ mid=(low+high)/2;

if(m<a[mid])

high=mid-1;

/*************found*********************/

else if(m>=a [mid])

low=mid+1;

else return(mid);

}

return(-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[i]);

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)错误:void fun(int a[]int m) 正确:int fun(int a[]int m) (2)错误:else if(m>=a[mid]) 正确:else if(m>a[mid])
(1)错误:void fun(int a[],int m) 正确:int fun(int a[],int m) (2)错误:else if(m>=a[mid]) 正确:else if(m>a[mid]) 解析:fun (int a[],int m)函数的返回值为int类型,所以定义函数时,函数的返回类型不能是void,而是int类型。
else if(m>=a[mid]中的m>a[mid]与m=a[mid]两个条件段的结果不一样,所以要分开考虑。
更多“N个有序整数数列已放在一维数组中,给定下列程序中,函数fun()的功能是:利用折半查找算法查找整数m ”相关问题
  • 第1题:

    给定程序中,函数fun的功能是:调用随机函数产生20个互不相同的整数放在形参a所指数组中(此数组在主函数中已置O)。

    请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。

    注意:部分源程序在文件BLANKl.C中。

    不得增行或删行,也不得更改程序的结构!

    试题程序:


    正确答案:
    (1)N或20(2)break(3)n【解题思路】填空l:变量n用于存储数组的下标,要通过while语句对数组进行赋值,数组的容量为20,因此循环条件应为n<20。填空2:通过一个for循环判断X是否与数组中已存的元素重复,若重复则跳出for循环结束。填空3:若for循环是由break语句结束的,则X与数组中的元素重复,此时i必然小于n;若for循环是因为循环变量i递增到某值,而不再满足循环条件结束的,说明X的值与数组中的元素不重复,则此时i的值等于n。

  • 第2题:

    已知有序数组a的前10000个元素是随机整数,现需查找某个整数是否在该数组中。以下方法中,( )的查找效率最高。

    A.二分查找法
    B.顺序查找法
    C.逆序查找法
    D.哈希查找法

    答案:D
    解析:

  • 第3题:

    利用折半查找算法在长为n的有序表R中插入一个元素x,并保持表的有 序性。 void Bisearch (int R[], int n, int x)


    正确

  • 第4题:

    已知有序数组a的前10000个元素是随机整数,现需查找某个整数是否在该数中,以下方法中,()的查找效率最高

    A.二分查找法
    B.顺序查找法
    C.逆序查找法
    D.哈希查找法

    答案:D
    解析:
    在计算机程序中,如果需要在一秒种内查找上千条记录通常使用哈希表(例如拼写检查器)哈希表的速度明显比树快并且,编程实现也相对容易。

  • 第5题:

    以下函数在a[0]到a[n-1]中,用折半查找算法查找关键字等于k的记录,查找成功返回该记录的下标,失败时返回-1,完成程序中的空格。