C语言题 程序改错

来源:百度知道 编辑:UC知道 时间:2024/05/09 18:54:13
程序改错题
M个有序整数数列已放在一维数组中,给定下列程序中,函数proc的功能是:利用折半查找算法查找整数n在数组中的位置。若找到,则返回其下标值;反之,则返回-1。折半查找算法的基本思想是:每次查找前先确定数组中待查的范围low和high(low<high),然后把n与中间位置(mid)中元素的值进行比较。如果n的值大于中间位置元素中的值,则下一次的查找范围放在中间位置之后的元素中;反之,下次查找范围则在中间位置之前的元素中。直到low>high,查找结束。请修改程序中的错误,使它能得出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序: #include <stdio.h>
#define M 10
/*******found*******/
void proc(int a〔〕,int n)
{ int low=0,high=M-1,mid;
while(low<=high)
{ mid=(low+high)/2;
if(n<a〔mid〕) high=mid-1;
/*******found*******/
else if(n>=a〔mid〕)
low=mid+1;
else
return(mid); }
return(-1); }
void main()
{ int i,a〔M〕={-3,4,7,9,13,24,67,89,100,180},k,n;
printf("a数组中的数据如下:");
for (i=0;i<M;i++)
printf("%d,",a〔i〕);
printf("Enter n: ");
scanf("%d",&n);
k=proc(a,n);
if(k>=0)
printf("n=%d,index=%d\n",n,k);
else p

stdio.h>
#define M 10
/*******found*******/
int proc(int a〔〕,int n) //有返回值,当然不能为void
{ int low=0,high=M-1,mid;
while(low<=high)
{ mid=(low+high)/2;
if(n<a〔mid〕) high=mid-1;
/*******found*******/
else if(n>a〔mid〕) //不能取想等,否则就找到了
low=mid+1;
else
return(mid); }
return(-1); }
void main()
{ int i,a〔M〕={-3,4,7,9,13,24,67,89,100,180},k,n;
printf("a数组中的数据如下:");
for (i=0;i<M;i++)
printf("%d,",a〔i〕);
printf("Enter n: ");
scanf("%d",&n);
k=proc(a,n);
if(k>=0)
printf("n=%d,index=%d\n",n,k);
else printf("Not be found!\n"); }