c语言:判断一个数是否是数组中的成员(用二分法)求流程图和程序设计组成框图

已知数据a中一共有10个已排序的整数(由小到大排列)。现在从键盘上输入一个数,判断这个数是否是数组a中的数,如果是的话,打印出此数在数组a中的位置来,否则打印“找不到“。
(提示:①设待查找的数为x,设三个位置变量l、m、h分别代表查找范围的顶部、中间位置和底部,m=(l+h)/2,把数分成以a[m]为中点的两段范围。②判断x 是否等于a[m],若是,则找到。③若大于a[m],则x必在后半段范围,即在a[m+1]至a[h]。则舍弃前半段,再在后半段重新划分两段范围,定出l、m和h,重复以上步骤,逐步缩小查找范围。)

#include "stdio.h"
int find(int *p,int x,int n){
int l,m,h;
l=0,h=n-1;
while(m=(l+h)>>1,l<h && p[m]-x)
p[m]<x ? l=m+1 : h=m-1;
return p[m]==x ? m : -1;
}
int main(int argc,char *argv[]){
int a[10]={1,2,3,4,5,6,7,8,9,10},x,y;
printf("Input x(int)...\nx=");
scanf("%d",&x);
if((y=find(a,x,10))>=0)
printf("%d is at the [%d].\n",a[y],y);
else
printf("No find...\n");
return 0;
}

运行样例:

追问

有木有源程序清单和执行结果

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-06-30
这么多才给30分,所以《C语言程序设计》谭浩强
相似回答