不要秃头zz 2021-12-10 14:30 采纳率: 71.4%
浏览 18
已结题

大一c语言:看看逻辑哪里有错,编译器没有报错

// 题目是数组15个数排序,然后输入一个数看是否在里面,并且用折半法找出该数下标
#include<stdio.h>
#define N 15
int Date(int a[],int n);
int Print(int a[],int n);
int Search(int a[],int b,int c);
int main()
{
int n,x,b,c;
int a[N]={1,56,24,89,63,44,50,87,99,64,25,64,86,45,82};
Date(a,n); //排序
printf("成绩顺序是:\n");
Print(a,n); //打印排序结果
Search(a,b,c);
return 0;
}

int Date(int a[],int n)
{
int i,j,k,temp1;
for(i=0;i<N-1;i++)
{
k=i;
for(j=i+1;j<N;j++)
{
if(a[j]>a[k])
{
k=j;
}
}
if(k!=i)
{
temp1=a[k];a[k]=a[i];a[i]=temp1;
}
}
}

int Print(int a[],int n)
{
int i;
for(i=0;i<N;i++)
{
printf("%101d%4d\n",a[i]);
}
}

int Search(int a[],int b,int c)
{
int low=0,high=N-1,mid,x;
printf("输入一个数:");
scanf("%d",&x);
while(low<=high)
{
mid=(high+low)/2;
if(x>a[mid])
low=mid+1;
else if(x<a[mid])
high=mid-1;
else
return mid;
}
return -1;
}

  • 写回答

1条回答 默认 最新

  • qzjhjxj 2021-12-10 15:06
    关注

    供参考:

    #include <stdio.h>
    #define N 15
    void Date(int a[], int n);     //修改
    void Print(int a[], int n);    //修改
    int  Search(int a[], int n);  //修改
    int main()
    {
        int n, x;  //修改
        int a[] = { 1,56,24,89,63,44,50,87,99,64,25,65,86,45,82 };//修改
        n = sizeof(a) / sizeof(a[0]);  //修改    
        Date(a, n); //排序
        printf("成绩顺序是:\n");
        Print(a, n); //打印排序结果
        x = Search(a, n);  //修改
        if (x >= 0)
            printf("a[%d]=%d", x, a[x]);
        else
            printf("Not Found");
        return 0;
    }
    
    void  Date(int a[], int n)
    {
        int i, j, k, temp1;
        for (i = 0; i < n - 1; i++)  //修改
        {
            k = i;
            for (j = i + 1; j < n; j++)  //修改
            {
                if (a[j] < a[k])   //修改
                {
                    k = j;
                }
            }
            if (k != i)
            {
                temp1 = a[k]; a[k] = a[i]; a[i] = temp1;
            }
        }
    }
    
    void  Print(int a[], int n)
    {
        int i;
        for (i = 0; i < n; i++)    //修改
        {
            printf("%4d", a[i]);  //修改
        }
        printf("\n");             //修改
    }
    
    int Search(int a[], int n)   //修改
    {
        int low = 0, high = n - 1, mid, x;  //修改
        printf("输入一个数:");
        scanf("%d", &x);
        while (low <= high)
        {
            mid = (high + low) / 2;
            if (x > a[mid])
                low = mid + 1;
            else if (x < a[mid])
                high = mid - 1;
            else
                return mid;
        }
        return -1;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月19日
  • 已采纳回答 12月11日
  • 创建了问题 12月10日

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效