嵌入式C语言常用18种算法范例

2016年03月29日 11:13    发布者:missARM
第一种:冒泡排序法

/*
将uchar niu={1,28,8,4,100,79,89,11};  AD
    采用冒泡法进行排序;(两个for循环嵌套);
****************************************************
编程思路:用最后一个数与前一个数比较,若比前一个数小
则交换位置,然后再与前一个数比较,若比前一个数小再交换
位置,知道比前一个数大或者已经在最前面!如此循环8次就可以排好循序!
*/
#include

#define uchar unsigned char

uchar niu={8,28,6,4,100,79,102,11};

main()
{
        uchar a,b,c,j,k;

        for(j=0;j<8;j++)           //设置循环次数为8
        {
                for(k=7;k>j;k--)                //从最后一个数开始与前一个数比较                               
                {
                        if(niu                         {       
                                c=niu;
                                niu=niu;
                                niu=c;
                        }       
                }
        }
        for(j=0;j<8;j++)
        {
            printf("%d\t",niu);          //输出排好的数列
        }
        printf("\n");

}
更多技术交流欢迎咨询高老师:3322386182

网友评论

missARM 2016年03月29日
第二种:冒泡法排序2函数调用-地址传递

/*
将uchar niu={1,28,8,4,100,79,89,11};
该算法用途:AD采样时采样20次,选一个中间值作为最终采样的值,可以采取该算法。
    采用冒泡法进行排序;(两个for循环嵌套);
****************************************************
编程思路:用最后一个数与前一个数比较,若比前一个数小
则交换位置,然后再与前一个数比较,若比前一个数小再交换
位置,知道比前一个数大或者已经在最前面!如此循环8次就可以排好循序!
*/
#include

#define uchar unsigned char

uchar a,b,c,j,k;
uchar nsd={8,28,6,4,100,79,102,11};

uchar maopao(uchar niu);

uchar maopao(uchar niu)
{
        for(j=0;j<8;j++)           //设置循环次数为8
        {
                for(k=7;k>j;k--)                //从最后一个数开始与前一个数比较                               
                {
                        if(niu                         {       
                                c=niu;
                                niu=niu;
                                niu=c;
                        }       
                }
        }
        return  0;//这条可以不要,空的
}

void main()
{
    maopao(nsd);
        for(j=0;j<8;j++)
    {
            printf("%d\t",nsd);          //输出排好的数列
    }
            printf("\n");

}
missARM 2016年03月29日
更多技术交流欢迎咨询高老师:3322386182
missARM 2016年04月02日
第三种:
/*  检测字符串是否是回文:
    abcba. 如果是返回1.如果不是:0
***************************************************************************
编程思路:用输入的字符串中的第一个字符与最后一个字符比较,若不相同则跳出比较
当比较的次数与输入的字符个数的一半相等时 则认为是回文!
*/

#include

#define uchar unsigned char

uchar hw;

void main()
{
        uchar i,j;

        printf("请连续输入字符串,按回车结束输入!\n");
        for(i=0;i<20;i++)                                    //设置输入 并记录输入个数为i
        {
                scanf("%c",&hw);   
                if(hw=='\n')                                  //输入回车时  结束输入   
                {
                        break;
                }   
        }

        for(j=0;j         {
                if(hw!=hw) //比较相对应的字符 若不相等 就跳出循环
                                         //并记录相同的个数为j
                {
                        break;
                }
        }

        if(j==i/2)               //比较输入个数与匹配次数从而判断是否为回文
    {
                printf("您输入的字符串是回文\n");
        }
        else
        {
                printf("您输入的字符串不是回文\n");
        }
}
想学习技术参加培训(包括模电/数电,单片机,PCBlayout,FPGA,嵌入式ARM,STM32,linux,android等技术培训课程,有初级,中级,高级课程)可以联系高老师Q:3322386182
更多学习视频等你免费学习,欢迎免费注册信盈达网校http://www.edu118.cn/
missARM 2016年04月02日
第四种:添加并排序
/*
有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
************************************************************************
编程思路:将输入值从左到右开始于数组比较,若小于或等于此数组元素,
  则把输入值存到B数组的相应位置,再把A数组后面的元素传递到B数组相应的位置,
  若输入值大于它则把A数组元素传递到B数组元素
  相应位置,
*/

#include

#define uchar unsigned char
#define uint unsigned int

uchar a={4,6,8,11,28,66,79,100,102},b;

main()
{       
        uint m;
        uchar i=0,j,k;

        printf("请输入一个数字!回车结束!\n");
        scanf("%d",&m);                           //输入值存m
        for(j=0;j<9;j++)                          //从数组左侧开始判断
        {
                if(m<=a)                                  //若输入值小于或等于此处数组元素 则把m赋值到b数组相应的位置 再跳出循环
                {       
                        b=m;
                        break;
                }
                else                                 //若输入值大于此处的数组元素 则把a数组中的元素传递到b的相对位置
                        b=a;
                        i=i+1;                                                         //设置标志位
        }
        if(i==9)                                 //若输入值小于数组最大值 则把m赋值到第10个元素
                b=m;
        else
        {
                for(k=0;k<(9-j);k++)                                //数组元素从a传递到b数组
                {
                        b=a;
                }
        }
        for(k=0;k<10;k++)                       //输出数组b
                printf("%d\t",b);
}
想学习技术参加培训(包括模电/数电,单片机,PCBlayout,FPGA,嵌入式ARM,STM32,linux,android等技术培训课程,有初级,中级,高级课程)可以联系高老师Q3322386182更多学习视频等你免费学习,欢迎免费注册信盈达网校http://www.edu118.cn/