求C语言大神帮忙看看这代码有什么问题呀?

2025-02-24 15:21:54
推荐回答(1个)
回答1:

//(1) 用"折半查找法"之前,数组一般要由小到大排序
//(2) 题目提到"要求查找3个数据",是指用一个循环实现3个不同输入数的查找?

#include
#include
#include
int chazhao(int k[],int t,int d,int c);
void sort_asc(int k[],int m);
int main()
{
    int a,i,j,b=0,c,result;
    int k[100],l[100];
    int t=30,d=80;
    srand(time(NULL));
    printf("产生的%d到%d的随机数为: ",t,d);
    printf("\n");
    for(i=t,j=0;i<=d,j    {
        a=rand()%(d-t+1)+t;//随机数30到80 //原来的代码,产生30到79的随机数 a=rand()%(d-t)+t;
        k[j]=a;
    }
    for(i=0;i<50;i++)
    {
        printf("%d ",k[i]);
        b++;
        if(b==10)
        {
            printf("\n");
            b=0;
        }
    }
    printf("置逆后:");
    printf("\n");
    for(i=0,j=d-t-1;i<=d-t,j>=0;i++,j--)
        l[i]=k[j];
    for(i=0;i    {
        printf("%d ",l[i]);
        b++;
        if(b==10)
        {
            printf("\n");
            b=0;
        }
    }
    //冒泡法排序(从小到大)
    sort_asc(k,50);

    printf("你要查找的数:");
    scanf("%d",&c);

    result=chazhao(k,0,49,c);
    printf("%d\n",result);
    if(result!=-1)
        printf("你要查找的数在此数据中, 为%d",result);
    else
        printf("无此元素");

    getchar();

    return 0;
}

int chazhao(int k[],int x,int y,int c)
{
    int mid,result,midval,n,low=x,high=y;  //int n 没有使用
    while(low<=high)
    {
        mid=(low+high)/2;
        midval=k[mid];
        if(midval            low=mid+1;
        else if(midval>c)
            high=mid-1;
        else
        {
            result=midval;
            break;
        }
    }
    if(low>high)
        result=-1;
    return result;
}
//冒泡法排序(从小到大)
void sort_asc(int k[],int m)
{
    int i,j;
    int temp;
    for(j=0;j<(m-1);j++)
    {
        for(i=0;i<(m-j-1);i++)
        {
            if(k[i]>k[i+1])
            {
                temp=k[i];
                k[i]=k[i+1];
                k[i+1]=temp;
            }
        }
    }
}