1,原理
2,代码
#include<stdio.h>
int main()
{
int a,b,c,d;
int arr[10]={1,2,3,4,5,6,7,8,9,10};
scanf("%d",&a);
b=0;
c=sizeof(arr[10]);
int flag=1;
while(b<=c)//当b>c时,说明全部都找了一遍
{
d=(b+c)/2;
if(arr[d]<a) b=d+1;
else if (arr[d]>a) c=d-1;
else if (arr[d]==a)
{
printf("%d",d+1);
flag=0;
break;
}
}
if(flag==1) printf("没有找到该数字");
}
第二种循环条件
#include<stdio.h>
int main()
{
int a,b,c,d;
int arr[10]={1,2,3,4,5,6,7,8,9,10};
scanf("%d",&a);
b=0;
c=sizeof(arr[10]);
int flag=1;
while(b<=c)//当b>c时,说明全部都找了一遍
{
d=(b+c)/2;
if(arr[d]<a) b=d+1;
else if (arr[d]>a) c=d-1;
else if (arr[d]==a)
{
printf("%d",d+1);
flag=0;
break;
}
}
if(b>c) printf("没有找到该数字");
}
3,错误代没有找到就会死循环
#include<stdio.h>
int main()
{
int a,b,c,d;
int arr[10]={1,2,3,4,5,6,7,8,9,10};
scanf("%d",&a);
b=0;
c=sizeof(arr[10]);
int flag=1;
while(1)//没有找到,会出现死循环
{
d=(b+c)/2;
if(arr[d]<a) b=d+1;
else if (arr[d]>a) c=d-1;
else if (arr[d]==a)
{
printf("%d",d+1);
flag=0;
break;
}
}
if(flag==1) printf("没有找到该数字");
}