线性搜索代码显示我的项目不存在。请帮助我进行更正
Posted
技术标签:
【中文标题】线性搜索代码显示我的项目不存在。请帮助我进行更正【英文标题】:Linear Search Code Shows that my item is not present.Please help me make corrections 【发布时间】:2017-01-30 13:43:18 【问题描述】:这是线性搜索的函数,我只取一个变量 x 来搜索项目变量
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;
int main()
int a,b;
a=lsrch(76);
76 存在,所以它应该显示它的索引位置,但它显示 -1 表示两者都不存在,对于第二个测试用例来说都是真的
b=lsrch(99);
printf("%d",a);
printf("%d",b);
【问题讨论】:
使用调试器并单步执行代码,问题应该很快就会很明显。 您是否忽略了编译器错误?我得到“a.c:13:5: warning: control may reach end of non-void function [-Wreturn-type]”,这表明返回语句放错位置的问题。 请不要彻底编辑问题。我已将其退回到原来的问题。如此戏剧性地改变问题会使所有答案都无效 - 尤其是将语言从 C 更改为 Python!。如果您还有其他问题,请提出新问题。 对不起,我弄错了,非常感谢!! 【参考方案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;
else
return -1; // Incorrect
正如所写,一旦您的代码发现与x
不匹配的数字,它将返回-1。它永远不会继续检查arr
中的其余数字。
如果你用gcc -Wall -Werror
编译,编译器会指出你犯了一个错误:
linsearch.c: In function ‘lsrch’:
linsearch.c:17:1: warning: control reaches end of non-void function [-Wreturn-type]
^
这意味着在循环结束的情况下您不会返回任何内容 - 导致未定义的行为。
解决方案是将return -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
【讨论】:
@BLUEPIXY 谢谢。用ARRAY_LEN
修复。【参考方案2】:
代码中的逻辑错误 - 您的代码的以下部分不正确 -
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;
【讨论】:
不只是发布“固定”代码,也许您可以告诉 OP 您更改了什么?是什么让这项工作奏效? @Some 程序员老兄。我编辑了我的答案。感谢您的反馈【参考方案3】: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;
使用它会起作用
【讨论】:
以上是关于线性搜索代码显示我的项目不存在。请帮助我进行更正的主要内容,如果未能解决你的问题,请参考以下文章