请大家帮帮忙,这是我写的一个在数组中查找元素的 C程序。

2025-01-04 02:22:11
推荐回答(3个)
回答1:

#include
#define M 10
int s[M] = { -48, -1, 0, 45, 78, 99, 148, 256, 250, 655};
int binsearch2(int s[M],int key,int low,int high)
{ int mid,k;
if (low>high) return -1; /*检索不成功的出口条件*/
else
{ mid=(low+high)/2; /*二分*/
if (s[mid]==key) return mid; /*检索成功返回*/
if (s[mid]>key)
return binsearch2(s,key,low,mid - 1); /*递归地在前半部分检索*/
else return binsearch2(s,key,mid + 1,high); /*递归地在后半部分检索*/
}
}

int main(int argc, char *argv[])
{
int key,high,low,n,i;
low = 0 ;
high = M -1 ;
printf("请输入你要查找的数:\n");
while(scanf("%d", &key) == 1)
{
n = binsearch2(s,key,low,high);
if(n == -1)
printf("无此数字\n");
else
{
printf("这是第%d个数字",n + 1);
return 0;
}
}
}

回答2:

goto语句我不会,但是看起来你的lo是不是应该往上挪一行,放在n = scanf("%d", &found);
那一行呢?

另外,你好像没有判断数组里根本就没有要查询的元素的情况
那样会造成死循环的
所以建议你把二分查找部分最外面的那个for的循环条件改成low!=high一类的,然后去判一下找到的那个东西是不是你要找的,如果不是,那么就可以认为这个数组里没有你要找的那个东西

还有,我不认为goto是一个好语句,有了它的程序总是显得有点混乱,我们老师也是这么认为的,所以大家都不爱用它(当然也有可能是我的思维太乱)。如果你喜欢的话可以继续用,但是我真的不认为goto是个好东西,while比它好用多了~

回答3:

while(n == 1)
if( n == 0)