优化这段代码:float filter(float input)//两个ADC输入值要滤波,每个ADC值等待10个值后,才能输入另外一个AD值,才不会两个AD值混在一个队列里 { float average=0; float filter_mirror[10]={0},buff=0; static float filter_buf[10]={0}; unsigned char i=0,j=0; for(i=9;i>0;i--)// { filter_buf[i]=filter_buf[i-1];//入队列 printf("-----%.1f\n",filter_buf[i]); } printf("////////////\n"); filter_buf[0]=input;//第一次输入队列的值 for(i=0;i<10;i++) { filter_mirror[i]=filter_buf[i];// printf("*****%.1f\n",filter_mirror[i]); } for(i=0;i<9;i++)//冒泡排序大到小 { for(j=i+1;j<10;j++) { if(filter_mirror[i]<filter_mirror[j]) { buff=filter_mirror[i]; filter_mirror[i]=filter_mirror[j]; filter_mirror[j]=buff; } } } for(i=0;i<10;i++)// { average+=filter_mirror[i]; } return average; //VC6.0不懂为什么返回不了浮点 }
时间: 2024-03-01 08:50:59 浏览: 104
这段代码可以进行以下优化:
1. 减少变量的使用:可以将`filter_mirror`数组和`buff`变量的定义放到for循环之内,避免重复定义。
2. 去除无用代码:可以去掉`printf`语句和注释的代码行。
3. 增加代码的可读性:可以将变量名改为更具有描述性的名称,例如`mirror`、`bubble_sort`等。
4. 修改返回值类型:由于函数返回值为float类型,可以将函数的最后一行代码修改为`return average / 10.0;`。
优化后的代码如下:
```
float filter(float input) {
float average = 0;
static float buffer[10] = {0};
unsigned char i, j;
for (i = 9; i > 0; i--) {
buffer[i] = buffer[i - 1];
}
buffer[0] = input;
for (i = 0; i < 10; i++) {
float mirror[10] = {0};
float bubble_sort;
for (j = 0; j < 10; j++) {
mirror[j] = buffer[j];
}
for (j = 0; j < 9; j++) {
if (mirror[j] < mirror[j + 1]) {
bubble_sort = mirror[j];
mirror[j] = mirror[j + 1];
mirror[j + 1] = bubble_sort;
}
}
for (j = 0; j < 10; j++) {
average += mirror[j];
}
}
return average / 10.0;
}
```
阅读全文