请各位C语言高手帮忙解决下面的问题。

先从键盘上读入15个数放在一个数组a[15]中,然后再输入一个数,要求用顺序查找或折半查找法出该数是数组中第几个(从0开始计数,若有相同的数,则计首次出现的数)元素a[i]的值。如果该数不在数组中,则打印出相应的提示信息。
  编程可用素材:printf("please input 15 integer numbers:\n")、printf("please input the integer you want to find: ")、printf("\n%d has been found,it is a[%d]\n"...、printf("\n%d has not been found\n"...。

请各位高手将两种方法都写上吧(主函数+查找函数)

第1个回答  2012-08-30
#include <stdio.h>
int binary_find(int * a, int target, int low, int high)
{
if (low > high)
{
return -1;
}
else if (a[(low + high)/2] == target)
{
return (low + high)/2;
}
else if (a[(low + high)/2] > target)
{
return binary_find(a, target, low, (low + high)/2 - 1);
}
else
{
return binary_find(a, target, (low + high)/2 + 1, high);
}
}
int main()
{
int a[15] = {0};
int i = 0;
int ret = 0;
int target = 0;
printf("请输入15个数:\n");
for(i=0; i<15; i++)
{
scanf("%d", a+i);
}
printf("\n请输入要查找的数:\n");
scanf("%d", &target);
ret = binary_find(a, target, 0, 14);
if(-1 != ret)
{
printf("\n%d找到了, 它是a[%d]\n", target, ret);
}
else
{
printf("\n%d没有找到\n", target);
}
getchar();
return 0;
}
第2个回答  2012-08-30
int search(int a[], int want, int len)
{
int i;
for(i = 0; i < len; i++)
{
if(a[i] == want) return(i);
}
return(-1);
}
int main
{
int i;
int want;

int index;
int a[15];

printf("please input 15 integer numbers:\n");

for(i = 0; i < 15; i++) scanf("%d", &a[i]);
printf("please input the integer you want to find: ");
scanf("%d", &want);

index = search(a, want, 15)

if(index != -1)

{

printf("\n%d has been found,it is a[%d]\n", want, index);

}

else

{

printf("\n%d has not been found\n", want);

}

}本回答被提问者采纳

请各位C语言高手帮忙解决下面的问题。
int target = 0;printf("请输入15个数:\\n");for(i=0; i<15; i++){ scanf("%d", a+i);} printf("\\n请输入要查找的数:\\n");scanf("%d", &target);ret = binary_find(a, target, 0, 14);if(-1 != ret){ printf("\\n%d找到了, 它是a[%d]\\n", target, ret);} ...

请C语言高手帮忙解答一下下列各题的标准答案。此题是我的重要复习题,不...
C语言老手为你解答:CBCCC CCAC(C)DDDA 。第1题已确定选C,不必怀疑,(只有新手才会错选D);第10题如果是你无意漏掉了C的分号,那么原题选C,如果原题就没分号,那么原题没有答案;第14题出的不太好,因为这个程序的错误有多种纠正方法(纠正的位置不同),因此关于它出错的地方也可以有多种...

C语言菜鸟,请教各位高手下面的程序哪里出了问题?
你的思路太乱了, 只能在你的程序上改,include<stdio.h> void main(){ long int a;int p,s;int b1,b2,b3,b4,b5;scanf("%ld",&a);if(a>=1000000){ p = (a-1000000)*0.01;a = 999999;} p=0;s=a\/100000;switch(s){ case 9:case 8:case 7:case 6:p += (a-600000)*0...

C语言高手进,帮忙解答一下下列各题的标准答案。此题是我的重要复习题...
50.如果a[i]

请C语言编程高手帮忙帮我看看下面的题目
① 倒填 ② 蛇形填数 ③ 回转填数 这个你应该看的懂吧 你在表中从1数到25就知道怎么填的了 然后再看程序 应该很简单的啊 你得把程序循环得层次弄清楚 例如③ 回转填数 int i,j,k=1,m,mi,mj,a[NUM][NUM],ind[4]={NUM-1,NUM-1,0,1}; \/*i为行号,j为列号,k当前填的数...

C语言问题,求大神解决,谢谢啦,我是小白,最好能够解释下原因..
第三项 第一项的结果不正确。第二项和第四项结果等同都是指向指针的指针操作。可以将二维数组看成一个双重指针,第一个中括号是一个一重指针。比如说a[n][m]中a[0]是一个指向a[0][m]数组首位a[0][0]的指针,而a则是指向指针数组*a[n]的首位a[0]的指针。这样我们来看B选项,*(a+2)...

C语言问题求代码高手来解决啊
printf("%5d %s %c %5d %5.2f\\n",p->id,p->name,p->gender,p->age,p->score);p=p->next;} } void search(int id){ Student *p=s;while(p!=0){ if((p->id)==id) {printf("%5d %s %c %5d %5.2f\\n",p->id,p->name,p->gender,p->age,p->score...

C语言高手帮忙解答一下下列各多选题的标准答案。此题是复习题,不知道的...
B、C、D 汇编程序和C语言源程序也属于应用软件,但汇编语言和C语言不属于应用软件,属于支持软件。下面内容可能对你的帮助:1、计算机软件分类代码表 ●10000 系统软件 11000 操作系统12000 系统实用程序13000 系统扩充程序14000 网络系统软件19900 其他系统软件 ●30000 支持软件 31000 软件开发工具32000 ...

请C语言高手帮忙解决一下
在Windows下这段代码编译运行后会产生错误,阁下那句system("pause");根本得不到运行。另外,楼主已经包含stdlib.h。自动弹出的原因是产生了运行时错误。运行时错误一般是由于指针的使用不当造成的。解决方法:将[char *r1;]改为[char *r1=&m;]解释:r1未初始化。当if(pop(r,r1)!=dequeue(s,s1...

c语言高手帮忙下,看看下面这个程序哪里出错
首先。。。y=3x-1;和y=2x-1;这里,明显是错误的,c语言中的变量不能以数字开头的,3x,2x明显不是变量,应该是想做乘法运算吧,如果是乘法运算的话应该有“*”。其次,else是自动跟上一个没配对掉的if组合,这样的话if(x>=10)y=3x-1;printf("=%d",y);else的写法就不对了,应该在if...

相似回答