标题:不知道为什么有一部总被程序忽略,是关于折半法查找的
只看楼主
高威
Rank: 1
等 级:新手上路
帖 子:18
专家分:7
注 册:2016-6-5
结帖率:66.67%
已结贴  问题点数:10 回复次数:3 
不知道为什么有一部总被程序忽略,是关于折半法查找的
有15个数按有小到大顺序存放在一个数组中,输入一个数,要求用折半法查找出这个数是该数组中的第几个元素的值。如果该数不在数组中,则输出"无此数"。
(最后加下划线的几句代码总被忽略)
#include<stdio.h>
#define N 15
int main()
{
    int i,head,tail,mid,a[N],flag=1,sign,number;
    char c;
    printf("Please enter data:\n");
    scanf("%d",&a[0]);
    i=1;
    while(i<N)
    {
        scanf("%d",&a[i]);
        if(a[i]>=a[i-1])
            i++;
        else
            printf("Please enter this data again:\n");
    }
    printf("The array is:\n");
    for(i=0;i<N;i++)
        printf("%3d",a[i]);
    printf("\n");
    while(flag)
    {
        printf("Please enter the number wanted:");
        scanf("%d",&number);
        head=0;
        tail=N-1;
        sign=0;
        if((number<a[0])||(number>a[N-1]))
            printf("The number can't be found.");
        else
        {
            while((!sign)&&(head<=tail))
            {
                mid=(head+tail)/2;
                if(number==a[mid])
                {
                    printf("The number--%d has been found,it's position is %d.",number,mid+1);
                    sign=1;
                }
                else if(number<a[mid])
                    tail=mid-1;
                else if(number>a[mid])
                    head=mid+1;
            }
            if(sign==0)
                printf("The number can't be found.");
        }
        printf("\n");
        printf("continue or not(Y/N)?");
        scanf("%c",&c);
            if(c=='N'||c=='n')
            flag=0;
    }
    printf("\n");
    return 0;
}

搜索更多相关主题的帖子: include number 下划线 元素 
2016-08-14 23:39
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
得分:10 

 getchar();            //这里加一句,取走回车
 printf("continue or not(Y/N)?")
        scanf("%c",&c);           //或者在"%c"里加一个空格:" %c"
            if(c=='N'||c=='n')
            flag=0;
2016-08-15 07:26
高威
Rank: 1
等 级:新手上路
帖 子:18
专家分:7
注 册:2016-6-5
得分:0 
回复 2楼 linlulu001
谢谢解答,但我还有两个地方不懂:
为什么加个getchar()就可以了,scanf不是直接从键盘上输入一个c的值吗?
为什么加个空格也行,我没见过这个原理。求解。
2016-08-16 10:41
yuantkong
Rank: 2
等 级:论坛游民
威 望:3
帖 子:82
专家分:86
注 册:2016-5-17
得分:0 
加 getchar() 是清除之前输入时的缓存
不然最后的 scanf 就会给之前留下的代替不会执行
2016-08-16 16:18



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-467867-1-1.html




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

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