嵌入式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日
更多技术交流欢迎咨询高老师:3322386182
更多技术交流欢迎咨询高老师: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/
第三种:
/* 检测字符串是否是回文:
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/
第四种:添加并排序
/*
有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
************************************************************************
编程思路:将输入值从左到右开始于数组比较,若小于或等于此数组元素,
则把输入值存到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/
第二种:冒泡法排序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");
}