山东潍坊风筝博物馆:关于C语言编程的问题??

来源:百度文库 编辑:神马品牌网 时间:2024/04/29 07:55:47
有15个数字存放在一个数组中,输入一个数,要求用折半查找法找出该组中第几个元素的值。如果该数不在数组中,则输出“无此数”。15个数用赋值的方法在程序中给出。要找的数用函数输入。
请给编写出程序:

下面的程序,如果输入数字的时候没有按升序排列,那么会提示没找到。
/*
二分法查找升序长度为len的数组a中的target元素
查找成功则返回下标
否则,返回-1
*/
int bsearch(int *a,int len,int target)
{
int d=0,u=len,mid,i;
/*检查数组是否已排序*/
for(i=0;i<len;i++)
if (*(a+i)>*(a+i+1)) return -1;
/*查找开始*/
while(d<=u)
{
mid=(d+u)/2;
if (*(a+mid)==target)
return mid;
else if (*(a+mid)<target) d=mid+1;
else u=mid-1;
}
return -1;
}

main()
{
int a[15];
int i, key;
int found;
for (i=0;i<15;i++)
{
scanf("%d",a+i);
}
printf("Input the NUM to search:");
scanf("%d",&key);
found = bsearch(a,15,key);
if (-1==found) printf("没找到\n");
else printf("%d在第%d个\n",key,found);
return 0;
}

#include <stdio.h>

int BinarySearch(int a[],const int x,const int n)
{
int left=0,right=n-1,middle;
while(left<=right){
middle=(left+right)/2;
if (x==a[middle]) return middle;
if (x>a[middle]) left=middle+1;
else right=middle-1;
}
return -1;
}

int main()
{
int n,res;
int array[15]={1,3,5,7,9,11,13,15,17,19,21,23,25,27,29};
/*注意数组元素必须按照从小到大的顺序排列*/
scanf("%d",&n);
res=BinarySearch(array,n,15);
if(res==-1) printf("未找到\n");
else printf("%d",res);
return 0;
}

i=0;
while(i<15)
{
scanf("%d",&x);
a[i++]=x;
}

scanf("%d",&x);
for(i=0;i<15;i++)
if(a[i]==x){ j=i; printf("%d",j);}
else printf("none");

#include "stdio.h"
main()
{int a[15];
int k,i;
int t=0;
printf("\nPlease Input values in the array:\n");
for (i=0;i<15;i++)
scanf("%d",&a[i]);
printf("\nPlease Input A Number:\n");
scanf("%d",&k);
for (i=0;i<15;i++)
if (k==a[i])
{printf("zhe shi di% d ge yuan shu,gai zhi shi %d",i+1,a[i]);
break;}
else t++;
if (t==15)
printf("wu ci shu!");
}