| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 962 人关注过本帖
标题:关于一维数组的问题,求解!
只看楼主 加入收藏
咚呱咚呱
Rank: 1
来 自:武汉
等 级:新手上路
帖 子:29
专家分:2
注 册:2010-4-13
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:9 
关于一维数组的问题,求解!
刚学到一维数组,遇见一个习题,如下:
    用折半查找法在一维有序数组a中查找指定数值x。若找到,输出数组元素的下标;否则,输出提示信息“数组中无此数”。请将下面程序中未实现的部分补充完整。
    (折半查找法的基本思想是将有序数组a的n个元素分成个数大致相同的两半,取a[n/2]与查找的x作比较,如果x=a[n/2],则找到x,算法终止。如果x<a[n/2],则在数组a的左半部分继续搜索x(假设数组元素呈升序排列)。如果x>a[n/2],则在数组a的右半部分继续搜索x。)
#include <stdio.h>
void main()
{
    float a[10],x;
    int i,low,high,mid;
    printf("请依次输入10个数组元素值:\n");
    for(i=0;i<10;i++)
        scanf("%f",&a[i]);
    printf("请输入待查数值:\n");
    scanf("%f",&x);
    low=0;high=9;
    while(low<=high)
    {
    /*请将此处代码补充完整*/
    }
    if(low>high)
    printf{"数组中无此数\n"};
}

希望各位能帮帮忙!!!你的帮助将让我在漫漫编程路上越走越远!!
谢了!!
搜索更多相关主题的帖子: 求解 
2010-05-04 19:40
cnfarer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:179
帖 子:3330
专家分:21157
注 册:2010-1-19
收藏
得分:0 
好像不光是补充的问题吧?

★★★★★为人民服务★★★★★
2010-05-04 19:44
咚呱咚呱
Rank: 1
来 自:武汉
等 级:新手上路
帖 子:29
专家分:2
注 册:2010-4-13
收藏
得分:0 
回复 2楼 cnfarer
其实我也不太清楚诶,刚刚想了很久但很多头绪最后都堵死了~~~
我在线等回复~~~
谢谢你!
2010-05-04 19:53
sunmingchun
Rank: 4
来 自:安徽-滁州
等 级:业余侠客
帖 子:198
专家分:277
注 册:2010-4-2
收藏
得分:20 
#include <stdio.h>
void main()
{
    float a[10],x;
    int i,low,high,mid;
    printf("请依次输入10个数组元素值:\n");
    for(i=0;i<10;i++)
        scanf("%f",&a[i]);
    printf("请输入待查数值:\n");
    scanf("%f",&x);
    low=0;high=9;
       while(low<=high)
      {
      mid=(low+high)/2;
     if(x==a[mid])
     break;
    else if (x>a[mid])
     low=mid+1;
   else
   high=mid-1;

        }
    if(low>high)
    printf("数组中无此数\n");
else
printf("%f为第%d个数\n",x,mid+1);
}


[ 本帖最后由 sunmingchun 于 2010-5-4 21:06 编辑 ]
2010-05-04 21:05
sunmingchun
Rank: 4
来 自:安徽-滁州
等 级:业余侠客
帖 子:198
专家分:277
注 册:2010-4-2
收藏
得分:0 
再你一种你看看
#include <stdio.h>
#include<math.h>
void main()
{
  float a[10],x;
    int i,low,high,mid;
    printf("请依次输入10个数组元素值:\n");
    for(i=0;i<10;i++)
        scanf("%f",&a[i]);
    printf("请输入待查数值:\n");
    scanf("%f",&x);
    low=0;high=9;
       while(low<=high)
      {
      mid=(low+high)/2;
     if(fabs(x-a[mid])<=1e-6)
     break;
    else if ((x-a[mid])>1e-6)
     low=mid+1;
   else
   high=mid-1;

        }
    if(low>high)
    printf("数组中无此数\n");
else
printf("%f为第%d个数\n",x,mid+1);
}
2010-05-04 21:06
guowei3758
Rank: 2
来 自:陕西咸阳
等 级:论坛游民
帖 子:58
专家分:72
注 册:2010-4-9
收藏
得分:0 
如果a[10]中10个数字既不是从大到小也不是从小到大的顺序,还能不能用折半查找法???
2010-05-04 22:00
最近不在
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:5
帖 子:204
专家分:842
注 册:2010-2-28
收藏
得分:0 
应该不行吧,那就加几行代码,排个序不就好了!
2010-05-04 22:29
rxyknight
该用户已被删除
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽
2010-05-05 20:51
guowei3758
Rank: 2
来 自:陕西咸阳
等 级:论坛游民
帖 子:58
专家分:72
注 册:2010-4-9
收藏
得分:0 
应该可以定义另一个数组,把排序后的放入新的数组中,再查找
找出来后,把原数组的下标输出来,
这样应该可以吧
2010-05-05 21:56
咚呱咚呱
Rank: 1
来 自:武汉
等 级:新手上路
帖 子:29
专家分:2
注 册:2010-4-13
收藏
得分:0 
回复 4楼 sunmingchun
谢谢!!!
2010-05-06 13:21
快速回复:关于一维数组的问题,求解!
数据加载中...
 
   



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

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