问题:1
在此代码中,如果我搜索不在数组中的数字,则应显示Value not found
,但我不知道它每次显示{{1}时都不显示该消息我不知道为什么会发生这种情况。
Found value in element -5
问题:2
我无法理解
size_t linearSearch(const int array [],int key,size_t size)
功能特别是这些行
#include<stdio.h>
#define SIZE 100
size_t linearSearch(const int array[], int key, size_t size);
int main(void)
{
int a[SIZE];
size_t x;
int searchKey;
size_t element;
for(x=0; x<SIZE; ++x){
a[x] = 2*x;
}
for(x=0; x<SIZE; ++x){
if(x%10 == 0){
puts("");
}
printf("%5d", a[x]);
}
puts("\n\nEnter integer search key:");
scanf("%d", &searchKey);
// attempt to locate searchKey in array a
element = linearSearch(a, searchKey, SIZE);
// display results
if(element != -1){
printf("Found value in element %d", element);
}
else{
puts("Value not found");
}
}
size_t linearSearch(const int array[], int key, size_t size)
{
if(size<0){
return -1;
}
if(key == array[size-1]){
return size-1;
}
return linearSearch(array, key, size-1);
}
答案 0 :(得分:2)
1)主要问题是if(size<0){
。条件表达式始终为false。因为size_t是无符号整数。因此,它返回一个随机位置,其中找到的值(它的未定义行为)偶然变为大数(例如,-5为4294967291为无符号),没有结束(未找到)。
if(size<0){
应为if(size==0){
2)如果键匹配最后一个元素,则返回其位置。如果没有,请重复较短的一个尺寸。如果大小为零,则找不到密钥。
答案 1 :(得分:2)
正如大家都说你有一点错误,你应该写if(size==0)
而不是if(size<0).
让我解释一下linearSearch()
函数
size_t linearSearch(const int array[], int key, size_t size)
{
if(size == 0){
return -1;
}
else
if(key == array[size-1]){
return size-1;
}
else{
return linearSearch(array, key, size-1);
}
}
假设您输入了198
作为searchkey。
当您通过语句
linearSearch()
函数时
element = linearSearch(a, searchKey, SIZE);
您将array[], searchKey 198, and Size 100
的引用作为参数传递。
在linearSearch函数中,首先if语句if(size==0)
检查大小是否等于零,否则if if else语句运行。
in else if if语句If(198 == array[100-1])
条件被选中。
我们看到198
中存在array[99]
所以else if条件为true,因此linearSearch函数返回99作为结果。
现在让我们看一下如果您输入不在数组列表中的55
会发生什么。
如果(size == 0)不为true,程序将跳过它并转到下一个语句。
{} {}将被检查为不正确,然后将调用if(55 == array[100-1]
。将再次检查linearSearch(array, 55, 100-1)
。
在某些时候,大小将变为0.并且第一个if(55==array[99-1])
语句将执行。
答案 2 :(得分:1)
只需将if语句从if(size<0)
更改为if(size==0)
您的代码即可运行。