当前位置: 代码迷 >> C语言 >> 请师兄们进来帮我看一条题
  详细解决方案

请师兄们进来帮我看一条题

热度:142   发布时间:2007-04-03 19:18:31.0
请师兄们进来帮我看一条题
大家好,小弟是新来的,有一题请教,清高手策教!
题目;有15个数组按由小到大顺序存放到一个数组中,输入一个数,要求用折半查找法出该数是组中第几个元素的值.如果该数不在数组中,打印出"不在表中"
大家帮我看一下我的答案哪里错了,为什么调试不了.
#include<stdio.h>
#define N 15
main()
{
int i=0,min,bott,topp,bacon,flag;
int a[N],c;
scanf("%d",&a[0]);
i=1;
while(i<N)
{ scanf("%d,&a[i]);
if(a[i]>=a[i-1])
i++;
else
printf("输入错误,必须比前一个数大,请重新输入\n");
}
flag=1;
while(flag)
{ printf("输入你要查找的号码");
scanf("%d",&c);
bott=N-1;
bacon=0;
topp=0;
if(c<a[0]&&c>a[N-1])
bacon=-1;
else
while((topp<=bott)&&(bacon==0))
{
min=(bott++topp)/2;
if(c==a[min])
{bacon=1;
printf("%d在表中的第%d位\n",c,min+1);
}
else
if(c<a[min])
bott=min-1;
else
topp=min+1;
}
if(bacon==0||bacon==-1)
printf("输入的数字%d不在表中\n",c);
printf("是否继续输入Y/N?\n");
c=getchar();
if(c=='n'||c=='N')
flag=0;
else
flag=1;

}

}
搜索更多相关的解决方案: 师兄  

----------------解决方案--------------------------------------------------------
注意这一行:
if(c<a[0]&&c>a[N-1])
应该是if(c<a[0]||c>a[N-1])

再看这一行:
min=(bott++topp)/2;
应该是min=(bott+topp)/2;吧

你的变量名我看这不大舒服,耐着性子看了一遍,找到这两处,但没有兴趣到编译器中去检查了

要学会看编译器的出错提示,像第二个这样的语法错误,看错误提示就可以解决

----------------解决方案--------------------------------------------------------
两个错误,第一个是第10行的 scanf("%d,&a[i]); 应该改为scanf("%d,",&a[i]); 这里少了一边双引号。
第二个是第24行的 if(c<a[0]&&c>a[N-1]) 应该改为if(c<a[0]||c>a[N-1])
其他基本上就没什么问题了。

----------------解决方案--------------------------------------------------------
以下是引用百年不亮在2007-4-3 21:45:54的发言:
注意这一行:
if(c<a[0]&&c>a[N-1])
应该是if(c<a[0]||c>a[N-1])

再看这一行:
min=(bott++topp)/2;
应该是min=(bott+topp)/2;吧

你的变量名我看这不大舒服,耐着性子看了一遍,找到这两处,但没有兴趣到编译器中去检查了

要学会看编译器的出错提示,像第二个这样的语法错误,看错误提示就可以解决

还有楼上说的第二个。


----------------解决方案--------------------------------------------------------
谢谢拉,我刚入门,太粗心了
----------------解决方案--------------------------------------------------------
  相关解决方案