On m'a demandé d'écrire un programme de recherche binaire avec certaines conditions spécifiques. Je dois passer la borne inférieure, la borne supérieure, le pointeur vers le tableau et l'élément de recherche. le programme que j'ai écrit m'a donné des avertissements. Je ne suis pas capable de corriger l'erreur dans le programme. S'il vous plaît pointez-moi où je me trompe.Recherche binaire avec pointeurs en 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;}
}
Je reçois cet avertissement lorsque je compile ceci.
main.c|38|warning: 'a[0]' is used uninitialized in this function [-Wuninitialized]|
lorsque je retire la ligne *p = a[0];
, puis-je obtenir les messages d'erreur suivants:
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]|
quand je lance le programme, le programme prend la valeur de l'élément de recherche et se termine après un certain temps. le contrôle n'est pas transféré à la fonction de recherche binaire.
Pourquoi avez-vous introduit le tableau 'a'? Vous êtes censé chercher dans 'p' (et non le modifier).Vous êtes également censé retourner la position, pas "1" ou "-1". – molbdnilo
Utilisez une liste d'initialisation à des fins de test. Si vous saisissez manuellement les données à chaque fois, il est facile de faire une erreur et d'entrer des données non triées, ou simplement des données différentes à chaque fois, ce qui rend le débogage difficile. En outre, cela rend le débogage ennuyeux lorsque vous passez la plupart de votre temps à entrer des choses. –
Y a-t-il une bonne raison pour laquelle vous implémentez votre propre 'BinarySearch()' au lieu de simplement utiliser 'bsearch()' de ''? –