C语言的折半查找问题

来源:百度知道 编辑:UC知道 时间:2024/06/18 03:27:55
就是从15个数中用折半法查找一个数。本人刚开始学C,还什么都不会。写完了以后没有语法错误,就是最后结果总是莫名其妙的数。
好像错误是for循环那里的问题,也许可能是别的地方错了。

#include <Stdio.h>
void main()
{
int a[15]={16,15,14,13,12,11,10,9,7,6,5,4,3,2,1},i,j,m,t,start=0,end=14;
m=(start+end)/2;
scanf("%d",&t);
if(t<a[14]||t>a[0])
printf("no num\n");
if(t==a[m])
j=m; //当t等于中间的那个数时
else
{
if(t>a[m])
for(i=m-1;i=0;i--)
{if(a[i]==t)
j=i;
break;}
if(t<a[m])
for(i=m+1;i=14;i++)
{if(a[i]==t)
j=i;
break;}
}
printf("%d\n",j);
getch();
}

#include <Stdio.h>
void main()
{
int a[15]={16,15,14,13,12,11,10,9,7,6,5,4,3,2,1},i,j,m,t,start=0,end=14;
m=(start+end)/2;
scanf("%d",&t);
if(t<a[14]||t>a[0])
printf("no num\n");
if(t==a[m])
j=m; //当t等于中间的那个数时
else
{
if(t>a[m])
for(i=m-1;i>=0;i--) //这里应该是i>=0
{if(a[i]==t)
j=i;
//break;不需要break语句
}
if(t<a[m])
for(i=m+1;i<=14;i++) //这里应该是i<=14估计你笔误
{if(a[i]==t)
j=i;
//break;
//这里的break用的是有问题的,break用来从循环体内跳出循环体,即提前结束循环,继续执行循环下面的语句
}
}
printf("%d\n",j);
//getch(); //这个事干什么的?
}

呵呵,你粗心了:

for(i=m+1;i=14;i++)
改为:
for(i=m+1;i<=14;i++)

原因就不用讲了吧:)