注册 登录
编程论坛 C++教室

关于一维数组的问题,求解!

咚呱咚呱 发布于 2010-05-04 19:40, 962 次点击
刚学到一维数组,遇见一个习题,如下:
    用折半查找法在一维有序数组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"};
}

希望各位能帮帮忙!!!你的帮助将让我在漫漫编程路上越走越远!!
谢了!!
9 回复
#2
cnfarer2010-05-04 19:44
好像不光是补充的问题吧?
#3
咚呱咚呱2010-05-04 19:53
回复 2楼 cnfarer
其实我也不太清楚诶,刚刚想了很久但很多头绪最后都堵死了~~~
我在线等回复~~~
谢谢你!
#4
sunmingchun2010-05-04 21:05
#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 编辑 ]
#5
sunmingchun2010-05-04 21:06
再你一种你看看
#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);
}
#6
guowei37582010-05-04 22:00
如果a[10]中10个数字既不是从大到小也不是从小到大的顺序,还能不能用折半查找法???
#7
最近不在2010-05-04 22:29
应该不行吧,那就加几行代码,排个序不就好了!
#8
2010-05-05 20:51
4楼5楼的方法好像只能在数组从小到大排列的情况下才可以啊,无规律的数好像没办法用折半啊。。
#9
guowei37582010-05-05 21:56
应该可以定义另一个数组,把排序后的放入新的数组中,再查找
找出来后,把原数组的下标输出来,
这样应该可以吧
#10
咚呱咚呱2010-05-06 13:21
回复 4楼 sunmingchun
谢谢!!!
1