| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 544 人关注过本帖
标题:关于一个数组的问题
只看楼主 加入收藏
aglence
Rank: 1
等 级:新手上路
帖 子:63
专家分:2
注 册:2012-7-6
结帖率:92.31%
收藏
已结贴  问题点数:20 回复次数:8 
关于一个数组的问题
#include<stdio.h>
#include<stdlib.h>

int main()
{
    int f;
    int a[10]={12,13,14,15,16,17,18,19,20,21};  //定义一个数组
    int mid1,low,top;                //定义中间序号,最低序号,最高序号
    low=0;
    top=9;

    printf("请输入查找的数值!\n");
    scanf("%d",&f);

    while(low<=top)           //循环判断
    {
        mid1=(low+top)/2;
        if(f==a[mid1])
        {
            printf("%d\n",mid1);
            exit(0);
        }
        else if(f>a[mid1])
            low=mid1;
        else if(f<a[mid1])
            top=mid1;
    }
    printf("请输入12-21的整数!\n");//为什么当我输入23的时候不出现printf语句呢?
 return 0;
}
搜索更多相关主题的帖子: top include 
2012-07-26 21:33
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
low<=top

为什么用<=

总有那身价贱的人给作业贴回复完整的代码
2012-07-26 21:50
爱闹的娃
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:3
帖 子:265
专家分:975
注 册:2011-10-23
收藏
得分:20 
low<=lop条件是对的,错在于你在给mid1赋值的错.....按照你的赋值,除非选出结果,不然始终会在循环里面,应该改为:if(f>a[mid1]) low=mid1+1; if(f<a[mid1])top=mid1-1;这样就OK了.......
2012-07-26 22:14
aglence
Rank: 1
等 级:新手上路
帖 子:63
专家分:2
注 册:2012-7-6
收藏
得分:0 
之所以用这个主要是为了有个判断语句,但是仔细想了下,这个是个死循环,也就是跳不出来了.....哎,改成f>=a[0]&&f<=a[9]但是发现输入21的时候无效了
2012-07-26 22:29
aglence
Rank: 1
等 级:新手上路
帖 子:63
专家分:2
注 册:2012-7-6
收藏
得分:0 
3楼说的low=mid+1,top=mid-1我试过了,还是输不出printf语句,因为上一个语句f=a[mid]这个已经判断过了,所以后面当f>a[mid]的时候,加一个位或者不加,似乎没有什么意义
2012-07-26 22:37
aglence
Rank: 1
等 级:新手上路
帖 子:63
专家分:2
注 册:2012-7-6
收藏
得分:0 
始终都是low<=top
2012-07-26 22:38
circlemiss
Rank: 2
等 级:论坛游民
帖 子:30
专家分:51
注 册:2012-7-19
收藏
得分:0 
#include<stdio.h>
#include<stdlib.h>

int main()
{
    int f;
    int a[11]={12,13,14,15,16,17,18,19,20,21,22};  //定义一个数组
    int mid1,low,top;                //定义中间序号,最低序号,最高序号
    low=0;
    top=10;

    printf("请输入查找的数值!\n");
    scanf("%d",&f);

    while(low<=top)           //循环判断
    {
        mid1=(low+top)/2;
        if(f==a[mid1])
        {
            printf("%d\n",mid1);
            exit(0);
        }
        else if(f>a[mid1])
        {   
            low=mid1+1;
        }
        else if(f<a[mid1])
        {
            top=mid1-1;
        }
    }
    printf("请输入12-21的整数!\n");//为什么当我输入23的时候不出现printf语句呢?
    return 0;
}
为什么不输出,是你的条件错了当输入23时,第一次,low=4,top=9,mid1=(4+9)/2=6;a[6]=18继续向后查找low=6;mid=(6+9)/2=7;a[7]=19;继续low=7;mid=(7+9)/2=8;a[8]=20;
再继续;low=8;mid1=(8+9)/2=8;a[8]=20;low=8;a[8]=20这下死了,就死在这了;所以low=mid+1;top=mid-1;
2012-07-26 22:52
demonleer
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:10
帖 子:483
专家分:1225
注 册:2012-6-4
收藏
得分:0 
二分法的经典写法就在3楼
2012-07-26 22:52
aglence
Rank: 1
等 级:新手上路
帖 子:63
专家分:2
注 册:2012-7-6
收藏
得分:0 
明白了,+1的话才能保证数值超过数组元素值得时候,跳得出循环,同理-1一样,感谢
2012-07-27 10:57
快速回复:关于一个数组的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.034976 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved