C语言二分查找代码错误分析及修正
#include 'stdio.h' #include 'stdlib.h'
int main()
{
int n=9,key=5;
int a[ ]={1,2,3,4,5,6,7,8,9};
int low,high,mid,flag; /flag为标志位,为1表示key值在数组中,为0则不存在/
scanf('%d',&key);
flag=0;
low=0;
high=n-1;
while(low<high)
{
mid=(high+low)/2;
if(a[mid]==key)
{
flag=1;
break;
}
else if(a[mid]<key)
{
low=mid+1;
}
else
{
high=mid-1;
}
}
if(flag==1)
printf('找到key值,下标是%d',mid);
else
printf('-1');
return 0;
}
代码中存在两个问题:
- 缺少函数返回类型
在 C 语言中,main 函数必须有返回类型。通常情况下,返回类型为 int。
因此,应该将代码中的 main 函数改为 int main()。
- 输入 key 值的位置不正确
代码中将 key 值的输入放在了 while 循环外面,导致无论输入什么值,都只会在第一次循环中进行判断,之后就不再接收新的输入了。
因此,应该将代码中的 scanf('%d',&key) 放在 while 循环内部,每次循环都接收一个新的 key 值。
修改后的代码如下:
#include 'stdio.h' #include 'stdlib.h'
int main() {
int n=9,key=5;
int a[ ]={1,2,3,4,5,6,7,8,9};
int low,high,mid,flag; /flag为标志位,为1表示key值在数组中,为0则不存在/
flag=0;
low=0;
high=n-1;
while(low<=high)
{
scanf('%d',&key);
mid=(high+low)/2;
if(a[mid]==key)
{
flag=1;
break;
}
else if(a[mid]<key)
{
low=mid+1;
}
else
{
high=mid-1;
}
}
if(flag==1)
printf('找到key值,下标是%d',mid);
else
printf('-1');
return 0;
}
原文地址: https://www.cveoy.top/t/topic/mFCF 著作权归作者所有。请勿转载和采集!