有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;
} 展开
#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;
} 展开
展开全部
你这个程序 这句话"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");
}
}
另外,折半查找法。。。我写了一下你的作业。没运行,应该没问题。
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");
}
}
展开全部
#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;
}
#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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询