第1个回答 2015-11-08
//参考代码如下:
#include <stdio.h>
int main()
{
int i, j, n, k=0, isFound=0;
int num[15] = {88,86,75,74,61,56,52,43,39,34,31,22,18,16,8}; //测试数组
printf("请输出一个整数:\n");
scanf("%d", &n);
i = (int)15/2; //对折位移量
j = (int)15/2; //取数“指针”
while(k<2)
{
i = (int)i/2;
if(i == 0) k++; //i==0 即折半到无可再折时,仍有最后一次比较,故以k做计数
//若未相等,计算下一循环指针的位置
if(n<num[j])
j = j + (i + 1);
else if(n>num[j])
j = j - (i + 1);
else
{
isFound = 1;
break; //若找到相等数,标记已找到并退出循环
}
}
//输出结果
if(isFound)
printf("该数是数组中第%d个元素的值\n", j);
else
printf("查无此数!\n");
return 0;
}
第2个回答 2010-12-17
// VC运行
//函数10
void f10()
{
int i,j,n=15,m=0;
float a[15],k;
printf("此函数为: 将15数从小到大的顺序输入到一个数组中。\n输入任意一个数,用折半查找法(折半之后再查找)找到在该数组中的位置。\n若不在输出“不在数组中”\n");
printf("请按从小到大依次输入15个数:\n");
for(i=0;i<15;i++)
scanf("%f",&a[i]);
printf("请输入任意一个数:");
scanf("%f",&k);
printf("输出为:\n");
j=n/2;
for(i=1;m==0;i++)
{
if(k<a[0]||k>a[n-1])
{m=1; printf("该数不在其数组中\n");}
else if(j<0||j>(n-1))
{m=1; printf("该数不在其数组中\n");}
else if(k==a[j])
{m=1;printf("该数为在数组中的第%d元素\n",j+1);}
else if(k<a[n/2])
j--;
else if(k>a[n/2])
j++;
}
system("pause...");
}
不好意思,我的是错的本回答被提问者采纳