设存在一个元素有序且长度为n的数组

C语言编程求
设存在一个元素有序且长度为n的数组,使用折半查找从键盘输入的数值a是否存在于该数组中,若存在则输出其下标,否则输出没找到。

数组这块学的不行,如果能给我讲下过程和思路就好了,感谢。

''该回答引用ChatGPT''
如对你的问题有帮助,请点击右侧采纳即可
C语言实现的步骤如下:
1.定义一个有序数组;
2.从键盘输入待查找的数字;
3.定义查找范围的左端点和右端点;
4.对查找范围进行折半查找;
5.比较待查找的数字和中间元素的大小;
6.如果相等,输出下标并结束查找;
7.如果小于中间元素,更新右端点的值;
8.如果大于中间元素,更新左端点的值;
9.重复步骤4~8,直到左端点>右端点为止,输出“没找到”。

当某数组从小到大排序时,折半查找法就是相当于通过改变low或high的大小把中间位置指到了key那个数那里,所以mid应该处于循环里面,即mid=(high+low)/2,这时循环条件是height≥low。注意:low,mid,high表示数组下标。

#include<stdio.h>
 void fun(int key,int *a,int n)//key表示要找的数,a表示数组,n表示数组元素个数 
 {
     int i,high,low,mid;
     int count1=0,count=0;
     low=0;
     high=n-1;
     while(high>=low)//保证右下标不小于左下标 
     {    
        count++;
        mid=(high+low)/2;//总的来说变得是中间位置相当于把中间位置移到了key那个数那里,所以mid应该处于循环里面 
         if(key<a[mid])//说明key在a【mid】的左半边 ,那么最右边的high下标就可以在下标mid基础上往左进一个单位了
        high=mid-1;
         else if(key>a[mid])//说明key在a【mid】的右半边 ,那么最左边的low下标就可以在下标mid基础上往右进一个单位了 
         low=mid+1;
        if(key==a[mid])
        {
            printf("元素找到了!!!\n一共查找了%d次\n它处于a[%d]位置上\na[%d]=%d\n",count,mid,mid,key);
            count1++;
            break;
        }
    }
     if(count1==0)
     printf("元素不存在!!!\n");
 }
 int main ()
 {
     int key,n,a[100];
     int i;
     printf("请输入数组元素个数:\n");
     scanf("%d",&n);
     printf("请输入(从小到大)所有数组元素:\n");
     for(i=0;i<n;i++)
     {
         scanf("%d",&a[i]);
     }
     printf("请输入要查找的数:\n");
     scanf("%d",&key);
     fun(key,a,n);
     printf("\n");
     return 0;
 }