特定の条件のバイナリ検索プログラムを作成するように求められました。私は下限、上限、配列へのポインタ、および検索要素を渡さなければなりません。私が書いたプログラムは私に警告を与えた。私はプログラムのエラーを修正することができません。私が間違っているところを教えてください。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|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]|
:私はライン*p = a[0];
を削除すると
main.c|38|warning: 'a[0]' is used uninitialized in this function [-Wuninitialized]|
は、その後、私は、次のエラーメッセージを取得します。バイナリ検索機能には制御が移りません。
なぜあなたは 'a'配列を導入しましたか?あなたは 'p'で検索するはずです(それを変更しないでください)。また、 '1'や' -1'ではなく、その位置を返すことになっています。 – molbdnilo
テスト目的でイニシャライザリストを使用します。毎回手動でデータを入力すると、ミスをしたり、ソートされていないデータを入力したり、デバッグを難しくするたびに異なるデータを入力したりするのは簡単です。また、ほとんどの時間を使って情報を入力すると、デバッグが面倒になります。 –
' 'の' bsearch() 'を使うのではなく、自分の' BinarySearch() 'を実装するのには良い理由はありますか? –