题目是:从键盘中输入一个整数,在整型一维数组a[20]中用折半查找法找出该数是第几个元素的值。检查我的程序发现,b=1时候,i的值到1之后就不再减小,陷入了死循环。该怎么用最简便的方法输出正确的呢?
#include
int main()
{int a[20]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
int max=19,min=0,i,b;
scanf("%d",&b);
i=(max+min)/2;
while(i>=0&&i<=20)
{if(b==a[i])
{printf("这是第%d个元素",i+1);break;
}
else if(b2;
}
else
min=a[i];
i=(max+min)/2;
}
}
给你个参考示例:
#include <stdio.h>
int serach(int a[], int len, int n)
{
int low=1, high= len;
while(low<=high)
{
int mid=(low+high)/2;
if(n==a[mid])
return mid;
else if(n < a[mid])
high=mid-1;
else
low=mid+1;
}
return -1;
}
int main(void)
{
int a[20]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20}, n;
printf("请输入您要查找的数: ");
scanf("%d",&n);
int len = sizeof(a) / sizeof(a[0]);
int result = serach(a, len, n);
if (result!=-1)
printf("%d是数组a中的第%d个元素",n, result + 1);
else
printf("Not Found");
return 0;
}