鱼C论坛

 找回密码
 立即注册
查看: 1305|回复: 4

[已解决]能不能帮我看看我这为啥不能运行啊。可以编译。就是显示停止工作

[复制链接]
发表于 2020-10-9 21:44:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
int main()
{  void find(int a[],int b,int high,int low);
        int a[15]={15,16,17,18,19,20,21,22,23,24,25,26,27,28,29};
        int b,high=14,low=0;
       
        scanf("%d",&b);
       
        find(a[14],b,high,low);
}
void find(int a[],int b,int high,int low)
{  

        while(low<=high)
        {   int mid;
            mid=(high-low)/2+low;
                if(b==a[mid])
                        printf("we have the %dst number is %d",mid,a[mid]);
                if(b>a[mid])
                        low=mid+1;
                if(b<a[mid])
                        high=mid-1;
        }
        printf("we dont have the number");
}
代码如上,就是二分法查数字,麻烦大家了
最佳答案
2020-10-9 22:27:02
本帖最后由 风过无痕1989 于 2020-10-9 22:56 编辑

只改了你的程序两处,程序中有注释:

  1. #include<stdio.h>
  2. int main()
  3. {      
  4.         void find(int a[],int b,int high,int low);
  5.     int a[15] = {15,16,17,18,19,20,21,22,23,24,25,26,27,28,29};
  6.     int b,high = 14,low = 0;
  7.     printf("请输入要寻找的数:");   
  8.     scanf("%d",&b);      

  9.     find(a,b,high,low);  // 用数组名作为函数的实参

  10. }
  11. void find(int a[],int b,int high,int low)
  12. {  
  13.     int mid;

  14.         while(low <= high)
  15.     {
  16.         mid = (high - low) / 2 + low;
  17.                 if(b > a[mid])
  18.             low = mid + 1;
  19.         if(b < a[mid])
  20.             high = mid - 1;
  21.         if(b == a[mid])
  22.             break;      // 找到数后中断循环
  23.         }
  24.         if(b == a[mid])
  25.         {
  26.             printf("we have the %dst number is %d\n",mid,a[mid]);
  27.                     
  28.         }
  29.         else
  30.         printf("we dont have the number\n");

  31. }
复制代码


再次修改程序,如若不然,无论能不能找到数,printf("we dont have the number\n"); 都会输出一次

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-10-9 21:53:29 | 显示全部楼层
  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. int main()
  4. {  
  5.         void find(int a[],int b,int high,int low);
  6.     int a[15]={15,16,17,18,19,20,21,22,23,24,25,26,27,28,29};
  7.     int b,high=14,low=0;
  8.       
  9.     scanf("%d",&b);
  10.       
  11.     find(a,b,high,low);
  12. }

  13. void find(int a[],int b,int high,int low)
  14. {  

  15.     while(low<=high)
  16.     {   
  17.                 int mid;
  18.         mid=(high-low)/2+low;
  19.         if(b==a[mid])
  20.         {
  21.             printf("we have the %dst number is %d",mid,a[mid]);
  22.             exit(0);
  23.         }
  24.         else if(b>a[mid])
  25.             low=mid+1;
  26.         else if(b<a[mid])
  27.             high=mid-1;
  28.     }
  29.     printf("we dont have the number");
  30. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-10-9 22:27:02 | 显示全部楼层    本楼为最佳答案   
本帖最后由 风过无痕1989 于 2020-10-9 22:56 编辑

只改了你的程序两处,程序中有注释:

  1. #include<stdio.h>
  2. int main()
  3. {      
  4.         void find(int a[],int b,int high,int low);
  5.     int a[15] = {15,16,17,18,19,20,21,22,23,24,25,26,27,28,29};
  6.     int b,high = 14,low = 0;
  7.     printf("请输入要寻找的数:");   
  8.     scanf("%d",&b);      

  9.     find(a,b,high,low);  // 用数组名作为函数的实参

  10. }
  11. void find(int a[],int b,int high,int low)
  12. {  
  13.     int mid;

  14.         while(low <= high)
  15.     {
  16.         mid = (high - low) / 2 + low;
  17.                 if(b > a[mid])
  18.             low = mid + 1;
  19.         if(b < a[mid])
  20.             high = mid - 1;
  21.         if(b == a[mid])
  22.             break;      // 找到数后中断循环
  23.         }
  24.         if(b == a[mid])
  25.         {
  26.             printf("we have the %dst number is %d\n",mid,a[mid]);
  27.                     
  28.         }
  29.         else
  30.         printf("we dont have the number\n");

  31. }
复制代码


再次修改程序,如若不然,无论能不能找到数,printf("we dont have the number\n"); 都会输出一次
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-10-10 08:50:19 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-10 08:52:40 | 显示全部楼层
风过无痕1989 发表于 2020-10-9 22:27
只改了你的程序两处,程序中有注释:

谢谢大佬,
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-6 18:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表