有15个数按由大到小顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值

有15个数按由大到小顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则输出“无此数”。自己编了个简单程序c++6.0... 有15个数按由大到小顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则输出“无此数”。自己编了个简单程序c++6.0上检测没有错误和警告,但是和题中要求不符,请问我编的错在哪里?不符之处在于当我输入一个不在该数组中的值时,它的结果总是显示是第1个数。
#include <stdio.h>
int main()
{
int a[15]={98,64,58,53,51,46,43,38,31,29,25,10,5,-8,-12};
int i,n;
printf("数组中数据如下: \n");
for(i=0;i<15;i++)
printf("%5d",a[i]);
printf("\n");
printf("你想要查找的数字为: ");
scanf("%d",&n);
if(a[14]<=n<=a[0])
{
if (n==a[7])
i=8;
else if(n<a[7])
{
if(n==a[11])
i=12;
else if(n<a[11])
{
if(n==a[13])
i=14;
else if(n<a[13])
i=15;
else i=13;
}
else
{
if(n==a[9])
i=10;
else if(n<a[9])
i=11;
else i=9;
}
}
else
{
if(n==a[3])
i=4;
else if(n<a[3])
{
if(n==a[5])
i=6;
else if(n<a[5])
i=7;
else i=5;
}
else
{
if(n==a[1])
i=2;
else if(n<a[1])
i=3;
else i=1;
}
}
printf("\n");
printf("%d是此数组中第%d个元素的值",n,i);
printf("\n");
}
else printf("data error!");
return 0;
}
展开
 我来答
jia00203
2014-11-28
知道答主
回答量:6
采纳率:0%
帮助的人:7.3万
展开全部
你这个程序 这句话"if(a[14]<=n<=a[0])" 只是限定了 你要输入的数的大小范围,也就是说你这个数 只要出现在 -12~98 的范围之内,他就默认为你这个数可以进的你的第一个if里面。然后在里面 他又找不到你合适的数 就直接else到最后一个分支了。
另外,折半查找法。。。我写了一下你的作业。没运行,应该没问题。

void main()
{
int a[15]={98,64,58,53,51,46,43,38,31,29,25,10,5,-8,-12};
int i,n,mid,high,low;
int temp,flag;
flag = 1;

printf("数组中数据如下: \n");
for(i=0;i<15;i++)
{
printf("%5d",a[i]);
}
printf("\n");
printf("你想要查找的数字为: ");
scanf("%d",&n);
low = 0; high = 15;

while(low<=high)
{
mid = (low+high)/2;
if(a[mid]==n)
{
temp = mid;
flag = 0;

}
else if(a[mid]>n)
{
high = mid - 1;

}else
{
low = mid + 1;

}

}
if(flag == 0)
{
printf("\n");
printf("%d是此数组中第%d个元素的值",n,temp+1);
printf("\n");
}else
{
printf("查无此数据\n");

}

}
可破解66
2019-03-12 · TA获得超过108个赞
知道答主
回答量:28
采纳率:0%
帮助的人:9585
展开全部
#include<stdio.h>
#define N 15
int main()
{
int a[N]={15,14,13,12,11,10,9,8,7,6,5,4,3,2,1},i,l,h,m,n,f=1;
scanf("%d",&n);
l=0;
h=N-1;
while(l<=h)
{
m=(l+h)/2;
if(n>a[m])
h=m-1;
else if(n<a[m])
l=m+1;
else if(n==a[m])
{
f=0;
printf("%d : %d\n",m+1,n);
break;
}
}
if(f)printf("不存在此数\n");
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式