求助,C语言谭浩强习题6-9关于折半查找法查找一个数是数组中的第几个元素
有15个数按由大到小排序,输入一个数,要求用折半查找法找出改数是数组中第几个元素的值。如果没有,输出“无此数”,并询问是否重新输入。我已经写好了,而且运行正常,代码如下:
#include<stdio.h>
int main()
{
int i,f[15]={15,14,13,12,11,10,9,8,7,6,5,4,3,2,1};
for(i=0;i<15;i++)
printf("%5d",f[i]);
printf("\n");//输出数组中的15个数
int k,mid,min,max,flag;
int c=1;//c=1开始循环
while(c==1)
{
printf("请输入要查找的数:\n");
scanf("%d",&k);
if(k>f[0]||k<f[14]) flag=1;
else
{
min=0,max=14;
while(min<=max)
{
mid=(max+min)/2;
if(k==f[mid]) {flag=0;break;}
else if(k>f[mid]) max=mid-1;
else min=mid+1;
}
if(min>max) flag=1; //min>max意味着一直到min=max都没有k==f[mid]
}
if(flag) { printf("查无此数,继续查找输入1,退出输入2:\n"); scanf("%d",&c);}
else { printf("a[%d]=%d\n",mid+1,f[mid]); c=2; }
}
printf("结束\n");
return 0;
}
运行如下:
[local]1[/local]
但是,当我想把“继续查找输入1,退出输入2”改为“继续查找输入y,退出输入n”,并同时将相应c的值用y和n表达时;
如果第一次没查出来,后面询问“继续查找输入y,退出输入n”时,无论我输入y还是n还是别的;
运行后都会无限循环:
int k,mid,min,max,flag;
int c='y';//c=y开始循环
while(c=='y')
{
printf("请输入要查找的数:\n");
scanf("%d",&k);
if(k>f[0]||k<f[14]) flag=1;
else
{
min=0,max=14;
while(min<=max)
{
mid=(max+min)/2;
if(k==f[mid]) {flag=0;break;}
else if(k>f[mid]) max=mid-1;
else min=mid+1;
}
if(min>max) flag=1; //min>max意味着一直到min=max都没有k==f[mid]
}
if(flag) { printf("查无此数,继续查找输入y,退出输入n:\n"); scanf("%d",&c);}
else { printf("a[%d]=%d\n",mid+1,f[mid]); c='n'; }
}
printf("结束\n");
return 0;
这是为什么啊?