C语言将10个float型数据放入RAM缓存区,并将这10个数据分别去掉最大的和最小的3个数据,剩下的4个数据求平均值用串口发送出来
时间: 2023-11-22 20:55:26 浏览: 74
好的,下面是代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#define BUFFER_SIZE 10
// 比较两个float数大小
int cmp_float(const void* a, const void* b) {
float arg1 = *(const float*)a;
float arg2 = *(const float*)b;
if (arg1 < arg2) return -1;
if (arg1 > arg2) return 1;
return 0;
}
int main() {
float buffer[BUFFER_SIZE] = {1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9, 10.0};
int i, j;
float sum = 0.0;
float average = 0.0;
// 排序
qsort(buffer, BUFFER_SIZE, sizeof(float), cmp_float);
// 去掉最大和最小的3个数
for (i = 3; i < BUFFER_SIZE - 3; i++) {
sum += buffer[i];
}
// 求平均值
average = sum / 4.0;
// 通过串口发送出去
printf("Average value: %.2f\n", average);
return 0;
}
```
这段代码中,我们首先定义了一个大小为10的float类型数组`buffer`,并初始化了它。然后使用`qsort`函数进行排序,将数组按照从小到大的顺序排列。
随后,我们遍历数组`buffer`,从第四个元素开始累加,累加到倒数第四个元素结束。这样就去掉了最大和最小的3个数,剩下的4个数的和就是`sum`。
最后,我们计算平均值`average`,通过串口发送出去即可。
阅读全文