c - 使用 c 中的函数从排序数组中查找中位数

标签 c arrays function median

我有一个程序,它从数组中获取整数并打印出最大、最小、平均值和排序列表。我需要一个函数的帮助来找到中位数,然后将其打印出来。另外,我的平均值只显示整数,没有数字,正如我在使用 float 时所想的那样。但找到中值函数是重要的部分。

#include <stdio.h>

#define NUMBERS_SIZE 5

int sum(int numbers[], int count)
{

    int sum = 0;

    for (int i = 0; i < count; i++)
        sum += numbers[i];

    return sum;
}


int maximum(int numbers[], int count)
{
    int a;


    int max = numbers[0];


    for (a = 1; a < count; a++)
        if (numbers[a] > max)
            max = numbers[a];

    return max;
}

int minimum(int numbers[], int count)
{
    int a;


    int min = numbers[0];


    for (a = 1; a < count; a++)
        if (numbers[a] < min)
            min = numbers[a];

    return min;
}

int average(int numbers[], int count)
{
    float avg;
    int sum = 0;

    for (int i = 0; i < count; i++)
        sum += numbers[i];

    avg = sum/count;

    return avg;
}

int cmpfunc (const void * a, const void * b) {
    return ( *(int*)a - *(int*)b );
}




int main()
{
    int numbers[NUMBERS_SIZE];

    int n;

    float median=0;

    for (int i = 0; i < NUMBERS_SIZE; i++)
    {
        printf("Enter integer: ");
        scanf("%i", &numbers[i]);
    }

    int result3 = sum(numbers, sizeof(numbers) / sizeof(numbers[0]));
    printf("The sum is: %i\n", result3);



    int count3 = sizeof(numbers)/sizeof(numbers[0]);
    printf("Largest number entered is: %d\n", maximum(numbers, count3));

    int count1 = sizeof(numbers)/sizeof(numbers[0]);
    printf("Smallest number entered is: %d\n", minimum(numbers, count1));

    int count4 = sizeof(numbers)/sizeof(numbers[0]);
    printf("Average is %d\n", average(numbers, count4));



    qsort(numbers, NUMBERS_SIZE, sizeof(int), cmpfunc);

    printf("\nSorted: \n");
    for( n = 0 ; n < NUMBERS_SIZE; n++ ) {
        printf("%d ", numbers[n]);
    }


    return 0;

}

最佳答案

您的平均值四舍五入为整数值,因为 sumcount 都是整数。然后,在 avg = sum/count 行上,它首先计算 sum/count,四舍五入,然后将其转换为 float 并分配给 avg。您可以通过先将值转换为 float ,然后执行除法来轻松解决此问题:

avg = (float) sum / (float) count;

至于中位数,由于输入数组已排序,因此只需找到长度并索引中间值即可。如果长度是偶数,则取中间两个值的平均值。

关于c - 使用 c 中的函数从排序数组中查找中位数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58615490/

相关文章:

multithreading - Node.js 将带有函数定义的对象发送到工作线程

c++ - VkSurfaceKHR 指针的值在函数调用后发生变化,无需任何显式赋值

java - 无法加载二维数组

javascript - 在 ember 中绑定(bind)数据

JavaScript 函数 : Append string to object and return object value

javascript - 将数组转成字符串,用分隔符分隔字符串 - JavaScript

C 显示两者(简单的 if-then)

c++ - 在c后台运行一个进程

c++ - JNA 指针到指针

c++ - 迭代器 - vector::iterator 和 array::iterator 的重载函数