F.hacker 2021-08-06 16:40 采纳率: 60%
浏览 37
已结题

代码运行后查找出无效值,求纠错一下



```c
#include<stdio.h>
#include<malloc.h>
 int binary_search(int p[],int k,int sz)
      {
          
          int left=0;
          
          int right=sz-1;
             
             while(left<=right)
             {
                 
                 int mid=(left+right)/2;
                 if(p[mid]<k)
                 {
                     left=mid+1;
                     //return(-1);
                 }
                 else if(p[mid]>k)
                 {
                     right=mid-1;
                     //return(-1);
                 }
                 else if(p[mid]=k)
                 {
                     return(mid);
                 }
             }
          return(-1);
          
      }
     
      
          
      
      int main(void)
      {
          int len,i,k;
          int *p;
          while(1){
          
              printf("请输入你要存放的元素个数。\n");
         scanf("%d",&len); 
         p=(int*)malloc(sizeof(int)*len);
         printf("注意:数组为有序数组.\n");
         printf("请输入你要存储的元素值。\n");
         for(i=0;i<len;++i)
         {         
         scanf(" %d",&p[i]);    
      }
      fflush(stdin);
          //int sz=sizeof(p)/sizeof(p[0]);
      printf("请输入要查找的元素值.\n");
          scanf("%d",&k);
              int sz=sizeof(p)/sizeof(p[0]);
          int binary_search(int p[],int k,int sz);
           int ret=binary_search(p,k,sz);
          
          if(ret==-1)
          {
              printf("找不到指定数字\n");
          }
          else
          {
              printf("找到了,下标是 %d\n",ret);
              
          }
    }
          return 0;
      }

```

  • 写回答

2条回答 默认 最新

  • 八云黧 2021-08-06 17:01
    关注

    代码有些问题
    1.binary_search内第三个代码段的判断条件应该使用两个等号else if (p[mid] == k)
    2.sz无法正常计算数组长度,指针不保存长度信息,只有数组变量才可以用sizeof求长度,请使用int ret = binary_search(p, k, len);

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 8月14日
  • 已采纳回答 8月6日
  • 创建了问题 8月6日

悬赏问题

  • ¥15 怎么把多于硬盘空间放到根目录下
  • ¥15 Matlab问题解答有两个问题
  • ¥50 Oracle Kubernetes服务器集群主节点无法访问,工作节点可以访问
  • ¥15 LCD12864中文显示
  • ¥15 在使用CH341SER.EXE时不小心把所有驱动文件删除了怎么解决
  • ¥15 gsoap生成onvif框架
  • ¥15 有关sql server business intellige安装,包括SSDT、SSMS。
  • ¥15 stm32的can接口不能收发数据
  • ¥15 目标检测算法移植到arm开发板
  • ¥15 利用JD51设计温度报警系统