huahangyu 发表于 2018-2-17 19:02:48

c语言递归调用数组问题

各位大佬下文这个对分查找为什么会报错
错误类型为:
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,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;

}

int main(void){
        int a={1,2,3,4,5,6,7,8,9,10};
        int b,c;
        printf("请输入你要查找的数字");
        scanf("%d\n",&b);
        c=xh(b,a,0,9);
    printf("位置为%d\n",c);
   
        return 0;
}

奥普瓯江 发表于 2018-2-17 19:02:49

这个是我从新更改的语句并在错误的后面进行了备注,学习时间尚短如有不当之处望指正。
#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={1,2,3,4,5,6,7,8,9,10};
                int b,c;

                printf("请输入你要查找的数字");
                scanf("%d", &b);

                c = xh(b, a, 0, 9);//第一个错误是这里,这里你只需要传进去一个数组的首字母即可,不需要传进去a,至于原因建议在复习一下数组。

                printf("位置为%d\n", c);
                                                                                                          
                return 0;

}

人造人 发表于 2018-2-17 19:36:26

就一个 ld returned 1 exit status
无法确定问题
发截图

1>------ 已启动全部重新生成: 项目: tmp, 配置: Debug Win32 ------
1>main.c
1>c:\visualstudioprojects\tmp\tmp\main.c(9): warning C4047: “函数”:“int *”与“int”的间接级别不同
1>c:\visualstudioprojects\tmp\tmp\main.c(9): warning C4024: “xh”: 形参和实参 2 的类型不同
1>c:\visualstudioprojects\tmp\tmp\main.c(14): warning C4047: “函数”:“int *”与“int”的间接级别不同
1>c:\visualstudioprojects\tmp\tmp\main.c(14): warning C4024: “xh”: 形参和实参 2 的类型不同
1>c:\visualstudioprojects\tmp\tmp\main.c(30): warning C4047: “函数”:“int *”与“int”的间接级别不同
1>c:\visualstudioprojects\tmp\tmp\main.c(30): warning C4024: “xh”: 形参和实参 2 的类型不同
1>c:\visualstudioprojects\tmp\tmp\main.c(29): warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1>c:\program files (x86)\windows kits\10\include\10.0.15063.0\ucrt\stdio.h(1272): note: 参见“scanf”的声明
1>tmp.vcxproj -> C:\VisualStudioProjects\tmp\Debug\tmp.exe
1>已完成生成项目“tmp.vcxproj”的操作。
========== 全部重新生成: 成功 1 个,失败 0 个,跳过 0 个 ==========

huahangyu 发表于 2018-2-18 13:31:11

这是图片

人造人 发表于 2018-2-18 18:03:01

huahangyu 发表于 2018-2-18 13:31
这是图片

图片上的代码和上面发的代码不一样

huahangyu 发表于 2018-2-19 15:38:14

抱歉。。。这个是图片,前面那张是我修改后还是贬义错误的图片

人造人 发表于 2018-2-19 17:48:55

huahangyu 发表于 2018-2-19 15:38
抱歉。。。这个是图片,前面那张是我修改后还是贬义错误的图片

删掉第3行

奥普瓯江 发表于 2018-2-20 02:29:28

对了还有你那个错误提示是提示你的数组地址错误返回,ld returned 1 exit status,这个不是100%确定因为我英文也不是很好
页: [1]
查看完整版本: c语言递归调用数组问题