C 线性搜索代码显示我的项目不存在。请帮助我更正
这是用于线性搜索的函数,其中我只取一个变量x,它是用于搜索项目变量的变量C 线性搜索代码显示我的项目不存在。请帮助我更正,c,algorithm,linear-search,C,Algorithm,Linear Search,这是用于线性搜索的函数,其中我只取一个变量x,它是用于搜索项目变量的变量 代码中的逻辑错误- 您代码的以下部分不正确- if(x==arr[i]) { return i } else return -1 在第一次传递时,如果条件计算为false,则返回-1 正确代码- int lsrch(int x) { int i; int arr[6] = {2,4,5,76,2,1}; for(i=0;i<=
代码中的逻辑错误- 您代码的以下部分不正确-
if(x==arr[i])
{
return i
}
else
return -1
在第一次传递时,如果条件计算为false,则返回-1
正确代码-
int lsrch(int x)
{
int i;
int arr[6] = {2,4,5,76,2,1};
for(i=0;i<=5;i++)
{
if(x==arr[i])
{
return i;
}
}
return -1;
}
int main()
{
int a,b;
a=lsrch(76);
return 0;
}
intlsrch(intx)
{
int i;
int-arr[6]={2,4,5,76,2,1};
对于(i=0;i而言,问题在于您过早地脱离了循环
int lsrch(int x)
{
int i;
int arr[6] = {2,4,5,76,2,1};
for(i=0;i<5;i++)
{
if(x==arr[i])
{
return i;
}
else
return -1; // Incorrect
}
}
这意味着,在循环完成的情况下,您不会返回任何内容-导致未定义的行为
解决方案是延迟返回-1
,直到循环耗尽arr
中的所有值
此外,循环在i==5
时终止,但您尚未检查arr
中的最后一个数字。让我们使用宏来避免硬编码此值
#define ARRAY_LEN(x) (sizeof(x) / sizeof(x[0]))
int lsrch(int x)
{
int i;
int arr[] = {2,4,5,76,2,1};
for(i=0; i<ARRAY_LEN(arr); i++)
{
if(x==arr[i])
{
return i;
}
}
return -1; // Nothing left to check
}
#定义数组长度(x)(sizeof(x)/sizeof(x[0]))
整数lsrch(整数x)
{
int i;
int arr[]={2,4,5,76,2,1};
对于(i=0;iintlsrh(intx){
int i,a[6]={2,4,5,76,2,1};
对于(i=0;i使用调试器并单步执行代码,问题应该非常明显。您是否忽略了编译器错误?我得到“a.c:13:5:警告:控件可能会到达非无效函数的结尾[-Wreturn type]”这就指向了错误放置的返回语句的问题。请不要大幅编辑该问题。我已将其回滚到原始问题。如此剧烈地更改该问题会使所有答案无效-尤其是将语言从C更改为Python!。如果您还有其他问题,请问一个新问题。很抱歉,我遇到了错误“我的错误,非常感谢!!与其只发布“修复”代码,不如告诉OP你做了哪些更改?是什么让它起作用了?@一些程序员。我编辑了我的答案。谢谢你的回复。”feedback@BLUEPIXY谢谢。已通过数组\u LEN
修复。
int lsrch(int x)
{
int i;
int arr[6] = {2,4,5,76,2,1};
for(i=0;i<5;i++)
{
if(x==arr[i])
{
return i;
}
else
return -1; // Incorrect
}
}
linsearch.c: In function ‘lsrch’:
linsearch.c:17:1: warning: control reaches end of non-void function [-Wreturn-type]
}
^
#define ARRAY_LEN(x) (sizeof(x) / sizeof(x[0]))
int lsrch(int x)
{
int i;
int arr[] = {2,4,5,76,2,1};
for(i=0; i<ARRAY_LEN(arr); i++)
{
if(x==arr[i])
{
return i;
}
}
return -1; // Nothing left to check
}
int lsrh(int x){
int i,a[6]={2,4,5,76,2,1};
for(i=0;i<6;i++){
if(a[i]==x)
return i;
}
return -1;
}