我被要求用一些特定的條件編寫一個二進制搜索程序。我必須傳遞下限,上限,指向數組的指針和搜索元素。我寫的程序給了我警告。我無法糾正程序中的錯誤。請指出我錯在哪裏。用C中的指針進行二進制搜索
#include <stdio.h>
int BinarySearch(int , int , int *, int);
int main()
{
int n, i, a[20], h, l, x, r=0;
int *p;
printf("Enter the number of elements:\n");
scanf("%d",&n);
printf("Enter the elements:\n");
for(i=0 ; i<n ; i++)
{
scanf("%d",&a[i]);
}
p = &a[0];
printf("Enter the element to be searched:\n");
scanf("%d", &x);
l = 0;
h = n-1;
r = BinarySearch(l, h, p, x);
if(r == 1)
printf("The element %d is found in position %d", x, i);
else
printf("The element %d is not present in the array", x);
return 0;
}
int BinarySearch(int l, int h, int *p, int x)
{
int mid, a[20], f =0;
*p = a[0];
mid = (l + h)/2;
while(l <= h)
{
if(a[mid] == x)
{
f=1;
break;
}
else if(a[mid] > x)
{
h = mid-1;
}
else if(a[mid] < x)
{
l = mid+1;
}
}
if(f == 1)
{return 1;}
else
{return -1;}
}
我編譯這個時得到這個警告。
main.c|38|warning: 'a[0]' is used uninitialized in this function [-Wuninitialized]|
當我刪除行*p = a[0];
,然後我得到了以下錯誤消息:
main.c|43|warning: 'a[mid]' may be used uninitialized in this function [-Wmaybe-uninitialized]|
main.c|48|warning: 'a[mid]' may be used uninitialized in this function [-Wmaybe-uninitialized]|
main.c|52|warning: 'a[mid]' may be used uninitialized in this function [-Wmaybe-uninitialized]|
當我運行該程序,該程序在搜索元素的值,並在一段時間後終止。該控件不會傳輸到二分查找功能。
你爲什麼要介紹'a'數組?你應該在'p'中搜索(而不是修改它)。你也應該返回該位置,而不是'1'或'-1'。 – molbdnilo
使用初始化程序列表進行測試。如果每次都手動輸入數據,那麼很容易出錯,輸入未分類的數據,或者每次只輸入不同的數據,從而使調試變得困難。此外,當你花大部分時間進入東西時,它會使調試變得無聊。 –
是不是有一個很好的理由來實現你自己的'BinarySearch()'而不是僅僅使用''中的'bsearch()'? –