关于折半查找的简单c语言程序,急急急,哪里出错了

2025-03-17 08:41:05
推荐回答(2个)
回答1:

#include
main()
{
int s;
int a[10]={1,3,6,8,12,16,19,20,45,89};
scanf("%d",&s);
int o=0,p=9,q;
while(o<=p){
q=(o+p)/2;
    if(s>a[q])
        o=q+1;
    else if(s         p=q-1;
        else if(s==a[q]){
        printf("%d\t%d\n",q,a[q]);
     break;
     }
}
if(o>p)
    printf("NOT FOUND!\n");
}

如图所示,(1)q在定义时不需要赋值,多余了。(2)if语句里,大于,等于,小于三种情况都有了,没有第四种情况了,所以最后的else不会运行了。(3)判断没有的情况是o大于p了,说明都数据都比较完一圈了,还没有结果。

望采纳。。。。。。

回答2:

#include
main(){
    int s;
    int a[10]={1,3,6,8,12,16,19,20,45,89};
    scanf("%d",&s);
    int o=0,p=9,q;
    while(o<=p){
        q=(o+p)/2;
        if(s>a[q])
            o=q+1;
        else if(s            p=q-1;
        else{
            printf("%d\t%d\n",q,a[q]);
            return 0;//已经找到,直接返回
        }
    }
    printf("NOT FOUND!\n");//啥都没找到 输出not found
    return 0;
}