假设有一组数组,我需要从这组数组中去掉最大值和最小值,然后取中间左右值的平均数,用C语言怎么编写代码
时间: 2024-09-25 16:10:52 浏览: 52
在C语言中,你可以先对数组排序,然后找到中间元素及其相邻的两个元素(如果数组长度为奇数),计算它们的平均值。以下是一个简单的示例代码:
```c
#include <stdio.h>
#include <stdlib.h> // 用于排序函数qsort
#include <time.h>
// 交换两个整数的函数
void swap(int* a, int* b) {
int temp = *a;
*a = *b;
*b = temp;
}
// 计算平均值
double calculate_average(int arr[], int n) {
if (n <= 1)
return -1; // 如果只有一个元素,返回无效
int mid = n / 2;
double sum = arr[mid] + ((n % 2 == 0) ? (arr[mid - 1] + arr[mid + 1]) : arr[mid]); // 取中间值及两边的平均
return sum / 2.0;
}
// 归并排序算法,这里为了简化仅适用于整型数组且无重复值
void qsort(int arr[], int left, int right) {
int i = left, j = right;
int tmp;
while (i < j) {
while (i < j && arr[i] <= arr[left])
i++;
while (i < j && arr[j] > arr[left])
j--;
if (i < j)
swap(&arr[i], &arr[j]);
}
tmp = arr[left];
arr[left] = arr[j];
arr[j] = tmp;
if (left < j - 1)
qsort(arr, left, j - 1);
if (j < right)
qsort(arr, j + 1, right);
}
int main() {
int arr[] = {5, 3, 8, 1, 9, 4}; // 示例数组
int n = sizeof(arr) / sizeof(arr[0]);
// 对数组进行排序
srand(time(0)); // 设置随机种子
qsort(arr, 0, n - 1);
// 计算并打印结果
double result = calculate_average(arr, n);
printf("After removing min and max and taking the average of middle values: %.2f\n", result);
return 0;
}
```
这个程序首先定义了一个快速排序函数 `qsort` 以及一个计算平均值的函数 `calculate_average`。在 `main` 函数里,我们创建了一个数组并对其进行排序,接着调用 `calculate_average` 来计算结果。
注意:这个示例假设数组已去除了重复值。如果你的原始数组允许有重复值,并且你想包括中间两个相同值,那么你需要稍微修改一下 `calculate_average` 函数的计算部分。
阅读全文