谢寻成 2021-07-17 14:15 采纳率: 100%
浏览 41
已采纳

为什么只能输出后半部分数组的数的位置?

#include<stdio.h>
#define N 5
char c;
int i, n;
int  flag = 1, top, bott, mid;
int loca = -1, sign = 0;
void sort(int str[])
{
    
    while (flag)
    {
        printf("input number to research:\n ");
        scanf("%d", &n);
        
        top = 0;
        bott = N-1;
        if (n>str[0] || n<str[N - 1])
        {
            sign = 0;
            loca = -1;
        }
        else
        {
            mid = (top + bott) / 2;
            if ((n < str[mid]) || (n = str[mid]))
            {
                top = mid;
                for (i = top; i < N; i++)
                {
                    if (n == str[i])
                    {
                        sign = 1;
                        loca = i + 1;
                    }


                }
            }
            else
             if(n>str[mid])
            {
                bott = mid;
                for (i = 0; i < bott; i++)
                {
                    if (n == str[i])
                    {
                        loca = i + 1;                 //位置为i
                        sign = 1;
                    }                   //找到
                }
            }
        }
        if ((sign ==1) &&( loca != -1))
            printf("\n%d local is %d\n", n, loca);
        else
        {
            printf("NOT\n");
        }
            printf("是否继续寻找:(Y/N)\n");
            scanf("%c", &c);
            if (c == 'n' || c == 'N')
                flag = 0;
    }

}

int main()
{
    int a[N];
    int i,j,max,temp;
    printf("please enter :\n");
    for (i = 0; i < N; i++)
    {
        scanf("%d", &a[i]);       
    }
    for (i = 0; i < N-1 ; i++)
    {
        max = a[i];
        for (j = i+1; j < N; j++)
        {
        
            if (max < a[j])
            {
                temp = max;
                max = a[j];
                a[j] = temp;
                a[i] = max;
            }
        }
    }
    printf("this is\n");
    for (i = 0; i < N; i++)
        printf("%d ", a[i]);
    sort(a);
    return 0;
}
  • 写回答

1条回答 默认 最新

  • 浪客 2021-07-18 02:01
    关注

    修改的地方都加了//

    #include<stdio.h>
    #define N 5
    
    void sort(int str[])//
    {//
        
    char c;
    int i, n;
    int top, bott, mid;//
    int loca;//
    
        do//while (flag)
        {
           
            loca=-1;//
            
            
            printf("input number to research:\n ");
            scanf("%d", &n);
            //top = 0;
            //bott = N-1;
            /*if (n>str[0] || n<str[N - 1])
            {
                //sign = 0;
                loca = -1;
            }
            else*/
            if (n<=str[0] || n>=str[N - 1])        
            {
                mid =(N-1) / 2;//mid = (top + bott) / 2;
                if ((n <= str[mid])) //if ((n < str[mid]) || (n = str[mid]))
                {
                    top = mid;
                    for (i = top; i < N; i++)
                    {
                        if (n == str[i])
                        {
                            //sign = 1;
                            loca = i + 1;
                            break;//
                        }
     
                    }
                }
                else
                 if(n>str[mid])
                {
                    bott = mid;
                    for (i = 0; i < bott; i++)
                    {
                        if (n == str[i])
                        {
                            loca = i + 1;                 //位置为i
                            //sign = 1;
                            break;//
                        }                   //找到
                    }
                }
               
            }
            if ( loca != -1)//if ((sign ==1) &&( loca != -1))
                printf("\n%d local is %d\n", n, loca);
            else
            {
                printf("NOT\n");
            }
                printf("是否继续寻找:(Y/N)\n");
                getchar();//
                
                scanf("%c", &c);
                //if (c == 'n' || c == 'N')
                //   flag = 0;
        }while(!(c == 'n' || c == 'N'));//
    }
    int main()
    {
        int a[N];
        int i,j,max,temp;
        printf("please enter :\n");
        for (i = 0; i < N; i++)
        {
            scanf("%d", &a[i]);       
        }
        for (i = 0; i < N-1 ; i++)
        {
            //max = a[i];
            for (j = i+1; j < N; j++)
            {
                if (a[i] < a[j])
                {
                    temp = a[i];
                    a[i] = a[j];
                    a[j] = temp;
                    //a[i] = max;
                }
            }
        }
        printf("this is\n");
        for (i = 0; i < N; i++)
            printf("%d ", a[i]);
        printf("\n");
        sort(a);
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 7月18日
  • 创建了问题 7月17日

悬赏问题

  • ¥25 主成分分析中的第一第二主成分分别代表哪些参数
  • ¥15 oracle数据库查询语句问题
  • ¥15 有没有c++绘制算法的佬们吗救孩一下
  • ¥15 android 蓝牙闪退
  • ¥15 绝缘子污秽comsol仿真参数
  • ¥15 Fatal error in Process MEMORY
  • ¥15 labelme生成的json有乱码?
  • ¥30 arduino vector defined in discarded section `.text' of wiring.c.o (symbol from plugin)
  • ¥20 如何训练大模型在复杂因素组成的系统中求得最优解
  • ¥15 关于#r语言#的问题:在进行倾向性评分匹配时,使用“match it"包提示”错误于eval(family$initialize): y值必需满足0 <= y <= 1“请问在进行PSM时