鱼C论坛

 找回密码
 立即注册
查看: 3047|回复: 7

[已解决]c语言递归调用数组问题

[复制链接]
发表于 2018-2-17 19:02:48 | 显示全部楼层 |阅读模式
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;
}

最佳答案
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[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;

}

最佳答案

查看完整内容

这个是我从新更改的语句并在错误的后面进行了备注,学习时间尚短如有不当之处望指正。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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[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;

}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-2-17 19:36:26 | 显示全部楼层
就一个 [Error] 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 个 ==========
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-2-18 13:31:11 From FishC Mobile | 显示全部楼层
这是图片
IMG_20180217_184126.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-2-18 18:03:01 | 显示全部楼层

图片上的代码和上面发的代码不一样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-2-19 15:38:14 | 显示全部楼层
抱歉。。。这个是图片,前面那张是我修改后还是贬义错误的图片
QQ图片20180219153108.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-2-19 17:48:55 | 显示全部楼层
huahangyu 发表于 2018-2-19 15:38
抱歉。。。这个是图片,前面那张是我修改后还是贬义错误的图片

删掉第3行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-2-20 02:29:28 | 显示全部楼层
对了还有你那个错误提示是提示你的数组地址错误返回,ld returned 1 exit status,这个不是100%确定因为我英文也不是很好
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-6 07:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表