|
3鱼币
各位大佬下文这个对分查找为什么会报错
错误类型为:
[Error] ld returned 1 exit status
正文:
#include<stdio.h>
int xh(int,int,int,int);
int xh(int b,int a[],int b1,int b2){
int c;
if(b>a[(b1+b2)/2]){
b1=(b1+b2)/2;
xh(b,a[10],b1,b2);
}
else if(b<a[(b1+b2)/2]){
b2=(b1+b2)/2;
xh(b,a[10],b1,b2);
}
else if(b=a[(b1+b2)/2]){
c=(b1+b2)/2;
}
return c;
}
int main(void){
int a[10]={1,2,3,4,5,6,7,8,9,10};
int b,c;
printf("请输入你要查找的数字");
scanf("%d\n",&b);
c=xh(b,a[10],0,9);
printf("位置为%d\n",c);
return 0;
}
这个是我从新更改的语句并在错误的后面进行了备注,学习时间尚短如有不当之处望指正。 #include<stdio.h>
int xh(int, int *, int, int);
int xh(int b, int a[], int b1, int b2)
{
int c;
if(b > a[(b1+b2)/2])
{
b1 = (b1+b2)/2;
xh(b, a, b1, b2);
}
else if(b < a[(b1+b2)/2])
{
b2 = (b1+b2)/2;
xh(b, a, b1, b2);
}
else if(b == a[(b1+b2)/2])
{
c = (b1+b2)/2;
return c; //返回值应该放在这里,因为你上边进行了第归运算,b =于a[]数组后即可返回并不在执行下面的语句
}
/*return c; */ //如果你放在这里他就会默认的执行第归语句,因为第归执行的顺序是在return c之前,为第归的执行规律是先输入在输出(这句话可能形容的有点问题,你自己理解吧),输入多少便输出就是多少便,当他从新输出的时候b1和b2的值就产生了变化,所以就出现了错误。
}
int main(void)
{
int a[10]={1,2,3,4,5,6,7,8,9,10};
int b,c;
printf("请输入你要查找的数字");
scanf("%d", &b);
c = xh(b, a, 0, 9); //第一个错误是这里,这里你只需要传进去一个数组的首字母即可,不需要传进去a[10],至于原因建议在复习一下数组。
printf("位置为%d\n", c);
return 0;
}
|
最佳答案
查看完整内容
这个是我从新更改的语句并在错误的后面进行了备注,学习时间尚短如有不当之处望指正。
|