#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; }

代码中存在两个问题:

  1. 缺少函数返回类型

在 C 语言中,main 函数必须有返回类型。通常情况下,返回类型为 int。

因此,应该将代码中的 main 函数改为 int main()。

  1. 输入 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; }

C语言二分查找代码错误分析及修正

原文地址: https://www.cveoy.top/t/topic/mFCF 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录