有15个整数(已排序)存放在一个数组中,输入一个数,要求用折半查找法找出该数在数组中的下标值,

如果该数不在数组中,则输出“无此数”。这15个数用赋初值的方法在程序中给出。要找的数用scanf函数输入。... 如果该数不在数组中,则输出“无此数”。这15个数用赋初值的方法在程序中给出。要找的数用scanf函数输入。 展开
 我来答
问明6E
高粉答主

2019-06-21 · 每个回答都超有意思的
知道答主
回答量:279
采纳率:100%
帮助的人:13万
展开全部

#include <stdio.h>

int main()

{

int a[15] = {99, 97, 87, 76, 65, 63, 59, 58, 51, 43, 32, 31, 28, 15, 6};

int x, low, high, mid, n;

n = 15;

low = 0;

high = n - 1;

scanf("%d", &x);

while (low <= high){

mid = (low + high) / 2;

if (x > a[mid])

high = mid - 1;

else if (x < a[mid])

low = mid + 1;

else if (x == a[mid]){

printf("%d is %dth number!\n", x, mid+1);

break;

}

}

if (x != a[mid])

printf("No match!\n");

return 0;

}

扩展资料:

printf函数使用注意事项

1、域宽

%d:按整型数据的实际长度输出。

如果想输出指定宽度可以指定域宽,%md--&gt;m域宽,打印出来以后,在控制台上,显示m位;

如果我们要打印的数的位数如果超过我们设定m则原样输出;

如果我们要打印的数的位数如果小于我们设定的位数,则补空白,具体如下:

如果m为正数,则左对齐(左侧补空白);

如果m为负数,则右对齐(右侧补空白)。

2、转义字符

如果想输出字符"%",则应该在“格式控制”字符串中用连续两个%表示。

如:printf("%f%%",1.0/3);输出结果:0.333333%。

1997排长
高粉答主

2016-01-13 · 说的都是干货,快来关注
知道大有可为答主
回答量:1.1万
采纳率:0%
帮助的人:815万
展开全部
//稍稍改了一点
#include <stdio.h>
int main()
{
int a[15]={15,14,13,12,11,10,9,8,7,6,5,4,3,2,1};
int l=0,h=14,x,m;
printf("输入数字:");
scanf("%d",&x);
while(l<h)
{
m=(l+h)/2;
if(x==a[m]) break;
if(x>a[m])
h=m;
else
l=m;
if ((l==h) && x!=a[h]) {
printf("无此数");
return 0;
}
}
printf("是第%d个元素",m+1);
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Dream81318578
2015-12-29 · TA获得超过326个赞
知道小有建树答主
回答量:190
采纳率:50%
帮助的人:36.4万
展开全部
//希望对你又帮助,这题的方法很多,只有自己多去思考。祝你有所进步!
#include<stdio.h>
void main()
{
int a[10]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
int low=0,mid,high=15,b,i=-1;
printf("请输入你要查找到数: ");
scanf("%d",&b);

do{if(b==a[15])
{
i=14;break;
}
mid=(low+high)/2;

if(b<a[mid])
high=mid;
else
if(b>a[mid])
low=mid;
else
i=mid;
}while(b!=a[mid]);
if(i==-1)
printf("该数不在数组中\n");
else
printf("该数在数组中的位置为%d",i+1);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
林易木创建者
推荐于2017-09-11 · TA获得超过189个赞
知道答主
回答量:31
采纳率:0%
帮助的人:24.8万
展开全部
//希望对你又帮助,这题的方法很多,只有自己多去思考。祝你有所进步!
#include<stdio.h>
void main()
{
int a[10]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
int low=0,mid,high=15,b,i=-1;
printf("请输入你要查找到数: ");
scanf("%d",&b);

do{if(b==a[15])
{
i=14;break;
}
mid=(low+high)/2;

if(b<a[mid])
high=mid;
else
if(b>a[mid])
low=mid;
else
i=mid;
}while(b!=a[mid]);
if(i==-1)
printf("该数不在数组中\n");
else
printf("该数在数组中的位置为%d",i+1);
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式