只需要找出最大值和最小值就可以了,最后的结果是a[0]为最小,a[9]为最大,试了几次,没有问题,不知道这种方法行不行的通,看到网上的冒泡法都要循环更多次,给修改了一下。
void testS(void)
{
unsigned char a[10]={240,208,241,98,100,21,187,237,228,21};
unsigned char t=0,j=0;
for(j=0;j<9;j++) //每趟比较j+1次
if(a[j]>a[j+1]) //从左至右依次比较两个相邻的数,将小数放在前面,大数放在后面
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
for(j=8;j>0;j--) //每趟比较j-1次
if(a[j]<a[j-1]) //从右至左依次比较两个相邻的数,将小数放在前面,大数放在后面
{
t=a[j];
a[j]=a[j-1];
a[j-1]=t;
}
for(t=0;t<10;t++)
{
DISP_BL(t,a[t]); //送至数码管显示
j=20;
while(j)
{
Delay(200); //延时
j--;
}
}
j=20;
while(j)
{
Delay(200); //延时
j--;
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
- //去极值递推滤波
- int filter(int dat)
- {
- bank1 static int _buff[FI_N + 2];
- bank1 static unsigned char i,cont,init = 0;
- bank1 long tmp;
- bank1 int min,max;
-
- //初值
- if(!init)for(i=0;i<(FI_N+2);i++)_buff[i] = dat; init = 1;
- if(++cont >= (FI_N+2)) cont = 0; //计数
- _buff[cont] = dat; //装入
- min = max = _buff[0];
- tmp = 0;
- for(i=0;i<(FI_N+2);i++) {
- tmp += _buff[i]; //累加
- if(min > _buff[i])min = _buff[i];
- if(max < _buff[i])max = _buff[i];
- }
- return (int)((tmp-min-max) / FI_N); //平均
- }
复制代码一周热门 更多>