C程序找中间数

时间:2014-11-21 20:38:12

标签: c

嗨,这是我的代码,找到三个中间数,但当我给a = 3 b = 2和c = 1时输出错误。我怎样才能找到正确的中间数?是否有任何数组方式? 谢谢

#include<stdio.h>

int main()

{

    int a,b,c;

    int min,mid,max,i=1;

    printf("Enter number: ");
    scanf("%d",&a);
    printf("\nEnter number: ");
    scanf("%d",&b);
    printf("\nEnter number: ");
    scanf("%d",&c);

    if(((a<b)&&(b<c)) || ((a>b)&&(a<c)))
    {
        min=a;
        mid=b;
        max=c;
    }
    if(((b<a)&&(a>c)) || ((a>b)&&(a<c)))
    {
        min=c;
        mid=a;
        max=b;
    }
    if(((c<a)&&(c>b)) || ((c>a)&&(c<b)))
    {
        min=b;
        mid=c;
        max=a;
    }
    printf("\nMid is %d",mid);



    for(i=min;i<=max;i++)
    {


        if(i==mid)
            continue;
        printf("\n%d",i);
    }

    getchar();
    getchar();

}

5 个答案:

答案 0 :(得分:1)

为了让您的生活更轻松,请编写一个名为min的函数。它需要两个整数并返回一个较小的整数。现在使用这个函数:

int min = min(min(a,b),c);

与max。相似

要获得中间值,只需进行此计算:

int mid = a + b + c - max - min;

答案 1 :(得分:1)

如果你有一个排序数组:

int nums[N];

然后:

  • 对于N甚至中位数为:(nums[N/2] + nums[(N/2)-1])/2

  • 对于N奇数,中位数为:nums[(N-1)/2]

如果您的数组未排序,请检查Median of Medians

答案 2 :(得分:0)

如果您能够找到最大值和最小值,您可以找到如下的中间值:

int a = 1, b = 2, c = 3;
int minVal = min(a, b);
int maxVal = max(maxVal, c);

int midVal = a + b + c - maxVal - minVal;

midVal应包含这3个数字的中间值。

答案 3 :(得分:0)

使用数组排序非常简单:

#include<stdio.h>
#include<errno.h>
#include<string.h>
#include<stdlib.h>

int compar( const void *a, const void *b)
{
        return *(int*)a > *(int*)b;
}

void die(const char *msg)
{
        if( errno )
                fprintf(stderr, "%s: %s\n", strerror(errno), msg);
        else
                fprintf(stderr, "%s\n", msg);
        exit(EXIT_FAILURE);
}

int get_input(void)
{
        int ret;
        errno = 0;
        if( scanf("%d", &ret ) != 1 )
                die("invalid input");
        return ret;
}

void * xmalloc(size_t s)
{
        void *ret;
        ret = malloc(s);
        if(ret == NULL)
                die("malloc");
        return ret;
}

int main(int argc, char **argv)
{
        int *a;
        int *b;
        int count;
        count = get_input();
        a = b = xmalloc( count * sizeof *a);
        while(count-- > 0)
                *b++ = get_input();

        qsort(a, b - a, sizeof *a, compar);
        printf("sorted:");
        while(a != b)
                printf(" %d", *a++);
        putchar('\n');
        return EXIT_SUCCESS;
}

答案 4 :(得分:0)

int a,b,c;
if(b>a && a>c || c>a && a>b) 
    printf("The middle number is a");
else if(a>b && b>c || c>b && b>a) 
    printf("The middle number is b"); 
else
    printf("The middle number is c");