线性搜索代码显示我的项目不是 present.Please 帮我更正
Linear Search Code Shows that my item is not present.Please help me make corrections
This is the function for linear search where i am only taking one variable x that is the to search for item variable
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 is present so it should show its index location but it shows -1 for both meaning both are not present true for 2nd test case
b=lsrch(99);
printf("%d",a);
printf("%d",b);
}
您的代码中存在逻辑错误 -
您的代码的以下部分不正确 -
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;
}
问题是你太早跳出了循环。
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
不匹配的数字,它就会 return -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 在循环结束的情况下执行任何操作 - 导致未定义的行为。
解决方案是将 return -1
推迟到 之后 循环耗尽了 arr
.
中的所有值
此外,您的循环在 i == 5
时终止,但您还没有检查 arr
中的最后一个数字。让我们使用一个宏来避免 hard-code 这个值。
#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;
}
用这个就行了
This is the function for linear search where i am only taking one variable x that is the to search for item variable
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 is present so it should show its index location but it shows -1 for both meaning both are not present true for 2nd test case
b=lsrch(99);
printf("%d",a);
printf("%d",b);
}
您的代码中存在逻辑错误 - 您的代码的以下部分不正确 -
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;
}
问题是你太早跳出了循环。
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
不匹配的数字,它就会 return -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 在循环结束的情况下执行任何操作 - 导致未定义的行为。
解决方案是将 return -1
推迟到 之后 循环耗尽了 arr
.
此外,您的循环在 i == 5
时终止,但您还没有检查 arr
中的最后一个数字。让我们使用一个宏来避免 hard-code 这个值。
#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;
}
用这个就行了