【发布时间】:2020-02-25 04:03:27
【问题描述】:
我有一个程序,它从数组中获取整数并打印出最大、最小、平均值和排序列表。我需要一个函数来找到中位数,然后打印出来。此外,我的平均值只显示整数,没有数字,就像我使用浮点数时所认为的那样。但找到一个中值函数是重要的部分。
#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;
}
【问题讨论】:
-
计算平均值为
avg = (float)sum/count以将sum转换为浮点数。否则,C 将首先进行整数除法,然后将该整数结果分配给avg。 -
请解释计算中位数的确切问题以及您尝试的方法。