我有一个程序,它从数组中获取整数并打印出最大、最小、平均值和排序列表。我需要一个函数的帮助来找到中位数,然后将其打印出来。另外,我的平均值只显示整数,没有数字,正如我在使用 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;
}
最佳答案
您的平均值四舍五入为整数值,因为 sum
和 count
都是整数。然后,在 avg = sum/count
行上,它首先计算 sum/count
,四舍五入,然后将其转换为 float 并分配给 avg。您可以通过先将值转换为 float ,然后执行除法来轻松解决此问题:
avg = (float) sum / (float) count;
至于中位数,由于输入数组已排序,因此只需找到长度并索引中间值即可。如果长度是偶数,则取中间两个值的平均值。
关于c - 使用 c 中的函数从排序数组中查找中位数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58615490/