一道关于折半查找C语言编程题,麻烦帮忙看看哪里错了?

2025-03-10 17:18:01
推荐回答(4个)
回答1:

你的scanf要赋值的数前没有加“&”


附正确答案

#include

using namespace std;


int main()

{

    int low=0,high=8,mid;

    int x,a[9],i;

    for(int i=0;i<9;i++)

        scanf("%d",&a[i]);

    scanf("%d",&x);

    mid=(low+high)/2;

    while(x!=a[mid] && low

    {

        if(a[mid]

            low=mid+1;

        else

            high=mid-1;

        mid=(low+high)/2;

    }

    if(x==a[mid])

        printf("it is at%d",mid);

    else

        printf("no this data!");

}

回答2:

#include
#include
int halfSearchWithRecursive(int goal,int *num,int left,int right);
int halfSearchWithCircle(int goal,int *num,int left,int right);
int main(int argc, char **argv)
{
int num[10];
int p=0;
while(p<10)
scanf("%d",num+p++);
int goal;
scanf("%d",&goal);
//int locate=halfSearchWithRecursive(int goal,int *num,int left,int right);
int locate=halfSearchWithCircle(goal,num,0,10);
if(locate==-1)
printf("no this data\n");
else
printf("%d\n",locate);
}
int halfSearchWithCircle(int goal,int *num,int left,int right)
{
int middle;
while(left{
middle=(left+right)/2;
if(num[middle]==goal)
return middle;
else if(num[middle]>goal)
right=middle-1;
else
left=middle+1;
}
return -1;

}
int halfSearchWithRecursive(int goal,int *num,int left,int right)
{
if(left==right)
return -1;
int middle=(left+right)/2;
if(num[middle]>goal)
return halfSearchWithRecursive(goal,num,left,middle-1);
else if(num[middle]return halfSearchWithRecursive(goal,num,middle+1,right);
else if(num[middle]==goal)
return middle;
}
//int qq=936250734;

回答3:

把while里面的x!=a[mid]放到循环求mid之前

回答4:

scanf那里应该是&a[i],你少了个&