有15个整数(已排序)存放在一个数组中,输入一个数,要求用折半查找法找出该数在数组中的下标值,
#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-->m域宽,打印出来以后,在控制台上,显示m位;
如果我们要打印的数的位数如果超过我们设定m则原样输出;
如果我们要打印的数的位数如果小于我们设定的位数,则补空白,具体如下:
如果m为正数,则左对齐(左侧补空白);
如果m为负数,则右对齐(右侧补空白)。
2、转义字符
如果想输出字符"%",则应该在“格式控制”字符串中用连续两个%表示。
如:printf("%f%%",1.0/3);输出结果:0.333333%。
#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;
}
#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);
}
#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);
}