鱼C论坛

 找回密码
 立即注册
查看: 885|回复: 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 编辑

只改了你的程序两处,程序中有注释:
#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;
    printf("请输入要寻找的数:");   
    scanf("%d",&b);      

    find(a,b,high,low);  // 用数组名作为函数的实参
 
}
void find(int a[],int b,int high,int low)
{  
    int mid;

        while(low <= high)
    {
        mid = (high - low) / 2 + low;
                if(b > a[mid])
            low = mid + 1;
        if(b < a[mid])
            high = mid - 1;
        if(b == a[mid])
            break;      // 找到数后中断循环
        }
        if(b == a[mid])
        {
            printf("we have the %dst number is %d\n",mid,a[mid]);
                    
        }
        else
        printf("we dont have the number\n");

}

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

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-9 21:53:29 | 显示全部楼层
#include <stdio.h>
#include <stdlib.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,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]);
            exit(0);
        }
        else if(b>a[mid])
            low=mid+1;
        else if(b<a[mid])
            high=mid-1;
    }
    printf("we dont have the number");
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

只改了你的程序两处,程序中有注释:
#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;
    printf("请输入要寻找的数:");   
    scanf("%d",&b);      

    find(a,b,high,low);  // 用数组名作为函数的实参
 
}
void find(int a[],int b,int high,int low)
{  
    int mid;

        while(low <= high)
    {
        mid = (high - low) / 2 + low;
                if(b > a[mid])
            low = mid + 1;
        if(b < a[mid])
            high = mid - 1;
        if(b == a[mid])
            break;      // 找到数后中断循环
        }
        if(b == a[mid])
        {
            printf("we have the %dst number is %d\n",mid,a[mid]);
                    
        }
        else
        printf("we dont have the number\n");

}

再次修改程序,如若不然,无论能不能找到数,printf("we dont have the number\n"); 都会输出一次
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-10-10 08:50:19 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

谢谢大佬,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-10 11:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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