这是线性搜索的功能,我只使用一个变量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);
}
答案 0 :(得分:2)
代码中的逻辑错误 - 你的代码的相应部分是不正确的 -
if(x==arr[i])
{
return i
}
else
return -1
在第一次传递时,如果condition的计算结果为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;
}
答案 1 :(得分:2)
问题是你过早地摆脱了循环。
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
}
答案 2 :(得分:0)
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;
}
使用它会起作用