wuta 发表于 2019-2-7 16:42:14

新人求助呀

// 6.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "stdio.h"
#include "math.h"
void main()
{
        int a,i,j,t,m,d,x,b,k;
        printf("input 9 counts:\n");
        for(i=0;i<9;i++)
        {
                scanf("%d",&a);
        }
        for(i=0;i<8;i++)
        {
                m=i;
                for(j=i+1;j<9;j++)
                {
                        if(a<a)        m=j;
                        if(i!=m)        {t=a;a=a;a=t;}
                }
        }

        for(i=0;i<9;i++)
                printf("%4d",a);
        printf("\n");
        printf("find number is:\n");
        scanf("%d",&x);
        b=0;d=8;
        while(b<=d)
        {
                m=(b+d)/2;
                if(x=a) break;
                if(x>a) b=m+1;
                else d=m-1;
        }
        if(b<=d)
                printf("要查找的数据是第%d个\n",(m+1));
        else printf("errro!");

}





结果为什么要查找的数据都是第5个??

枫还 发表于 2019-2-7 19:43:09

if(x=a) break;
判断语句应该是==双等号,你弄成赋值了,直接跳出循环,m=4,结果就是第五个了

wuta 发表于 2019-2-7 22:01:53

枫还 发表于 2019-2-7 19:43
if(x=a) break;
判断语句应该是==双等号,你弄成赋值了,直接跳出循环,m=4,结果就是第五个了

我改成==双等号了,太是没显示啦,直接结束。

枫还 发表于 2019-2-8 08:33:59

本帖最后由 枫还 于 2019-2-8 08:44 编辑

wuta 发表于 2019-2-7 22:01
我改成==双等号了,太是没显示啦,直接结束。

你这排序有问题,你想排成从大到小吗?
冒泡排序是排成从小到大,否则你应该从a开始向a判断,不然会出问题,比如第一次a<a,交换之后,第二次循环就略过了a,而a并不一定是最大的
而且你下面的while又是默认数组已经从小到大排好了,你理下思路先
页: [1]
查看完整版本: 新人求助呀