C语言学习二分法;一行代码放在while外就运行不了,放在while里面就能正常运行。
#define M 10
#include
void main()
{
static int a[M]={-12,0,6,16,23,56,80,100,110,115};
int low,mid,high,n,found;
low=0;
high=M-1;
found=0;
mid=(low+high)/2;
printf("输入想要找的数字:");
scanf("%d",&n);
while(low<=high)
{
if(n==a[mid])
{
found=1;
break;
}
else if(n<=a[mid])
{
high=mid-1;
}
else
{
low=mid+1;
}
}
if(1==found)
{
printf("所找的数字%d,在第%d位\n",n,mid);
}
else
{
printf("数字%d不在序列上\n");
}
}
循环过程中,需要不断修正这个mid值的啊,不是初始化一下就完了
每次循环的开始,都需要重新计算这个mid值,否则mid值都是固定的,程序就成死循环了
循环计算mid:
#define M 10
#include<stdio.h>
void main()
{
static int a[M]={-12,0,6,16,23,56,80,100,110,115};
int low,mid,high,n,found;
low=0;
high=M-1;
found=0;
printf("输入想要找的数字:");
scanf("%d",&n);
while(low<=high)
{
mid=(low+high)/2;
if(n==a[mid])
{
found=1;
break;
}
else if(n<=a[mid])
{
high=mid-1;
}
else
{
low=mid+1;
}
}
if(1==found)
{
printf("所找的数字%d,在第%d位\n",n,mid);
}
else
{
printf("数字%d不在序列上\n");
}
}