51单片机1、随机生成N个整数 2、去掉最大、最小值,求取平均值 3、显示原始数据和平均值,平均值带2个小数点
时间: 2024-12-04 20:28:28 浏览: 27
在51单片机上实现这个功能需要编写一些特定的C语言程序,因为硬件限制和内存管理不同于高级编程环境。下面是一个简化的步骤描述:
1. **生成随机数**:首先,你需要使用内部的RNG(随机数生成器)API或外部中断配合计数器来获取随机整数。例如,你可以利用定时器溢出引发中断,每次中断处理函数里产生一个随机数。
```c
void generate_random(int arr[], int N) {
// 使用特定API或技巧生成N个随机整数并存入数组arr
}
```
2. **统计并排序**:生成所有随机数后,遍历数组找到最大和最小值,并将它们移除。然后对剩下的N-2个数求和。
```c
void remove_extremes(int arr[], int N, int *min, int *max, int sum) {
int i = 0;
for (i = 0; i < N; i++) {
if (arr[i] > *max || (arr[i] == *max && i != N - 1)) {
*max = arr[i];
}
if (arr[i] < *min || (arr[i] == *min && i != 0)) {
*min = arr[i];
}
}
// 留下的元素相加得到sum
for (i = 0; i < N - 2; i++) {
sum += arr[i];
}
}
```
3. **计算平均值**:最后,通过总和除以剩余数目的90%(因为要去掉两个极端值)来计算平均值,并四舍五入到两位小数。
```c
float calculate_average(int sum, int N) {
return round((float)sum / (N - 2) * 100) / 100.0;
}
```
4. **显示结果**:使用串行通信或者其他合适的输出手段,如LCD显示屏,将原始数据和计算后的平均值显示出来。
```c
void display_data(int arr[], float average) {
// 显示原始数据
for (int i = 0; i < N - 2; i++) {
printf("%d ", arr[i]);
}
printf("Average: %.2f\n", average);
}
```
阅读全文