• 回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

【获得20元现金红包】单片机学习之C语言常用算法

    今天开始着手学习C语言常用算法.

    常规单片机寄存器的配置,基本已经掌握,现在感觉自己的技术停滞了,主要卡在单片机编程中常见的算法类程序,不知道从何下手,这一帖重点学习C语言算法类的编程.

全部回复(117)
正序查看
倒序查看
2016-08-31 16:32

    使用的编译软件为大家常用的VC++6.0.

    书籍两本:

第一本是经典教材,C primer Plus,第五版

第二本书是C语言经典编程282例



0
回复
2016-08-31 16:44
@hello-no1
  使用的编译软件为大家常用的VC++6.0.  书籍两本:第一本是经典教材,CprimerPlus,第五版第二本书是C语言经典编程282例[图片][图片]

    本人断断续续学习C语言也有3,4年了,市面上常见的经典的C语言书籍,几乎都有,虽然常用的语法很了解,但总感觉没有真正理解C语言.

    本人一直从事硬件开发,工作中基本上都是和二极管,三极管,变压器,运放,电容这些常见的元器件打交道,几乎用不到单片机这一块,可是单片机一直没有真正的突破,心里上总感觉有一道坎没有跨过去.今年年初,我决心克服自己的惰性以及畏惧,拿下单片机这一块,打通心里上的这道坎.

    每天处理好手头上大量的工作后,我便埋头苦学,虽然很累,但感觉很充实.

    想起钟道隆将军的那句名言:何以解忧,唯有学习.

    每天精进是我的追求,和志同道合者共勉.

    

0
回复
2016-08-31 16:47
@hello-no1
  本人断断续续学习C语言也有3,4年了,市面上常见的经典的C语言书籍,几乎都有,虽然常用的语法很了解,但总感觉没有真正理解C语言.  本人一直从事硬件开发,工作中基本上都是和二极管,三极管,变压器,运放,电容这些常见的元器件打交道,几乎用不到单片机这一块,可是单片机一直没有真正的突破,心里上总感觉有一道坎没有跨过去.今年年初,我决心克服自己的惰性以及畏惧,拿下单片机这一块,打通心里上的这道坎.  每天处理好手头上大量的工作后,我便埋头苦学,虽然很累,但感觉很充实.  想起钟道隆将军的那句名言:何以解忧,唯有学习.  每天精进是我的追求,和志同道合者共勉.    

    今天更新第一帖,经典的hello world程序.

源代码

1_hello_world.rar

0
回复
a20105319
LV.2
5
2016-09-01 15:47
@hello-no1
  今天更新第一帖,经典的helloworld程序.源代码1_hello_world.rar
跟着师长学习一下 只怪读书的时候不认真啊
0
回复
2016-09-01 17:13
@a20105319
跟着师长学习一下只怪读书的时候不认真啊

    今天抽时间编写了几个小例程.

    刚开始的几个例程都比较简单,用于帮助大家熟悉VC++6.0的编译环境.

源代码

2_two_num_add.rar

3_名言警句.rar

5_正方形周长计算.rar

6_星星组成正方形.rar

这几个例程当作开胃菜可也,很简单.

0
回复
2016-09-01 17:19
@hello-no1
  今天抽时间编写了几个小例程.  刚开始的几个例程都比较简单,用于帮助大家熟悉VC++6.0的编译环境.源代码2_two_num_add.rar3_名言警句.rar5_正方形周长计算.rar6_星星组成正方形.rar这几个例程当作开胃菜可也,很简单.

    接着编写了一个阶乘的代码.

刚开始准备搞定100以内的数据的阶乘,怎知计算至12的阶乘,数据便开始溢出.

这应该算是第一个小小的计算类的编程吧.

思路其实很简单;

2!=2,3!=2!*3,4!=3!*4,5!=4!*5,以此类推.公式为n!=(n-1)!*n,n>=2;

编程的思路是什么,很简单,命名一个数据,该数据通过循环实现累加,再命名一个数据用于将前面的数据累积.

源代码

9_求100的阶乘.rar




0
回复
2016-09-01 17:21
@hello-no1
  接着编写了一个阶乘的代码.刚开始准备搞定100以内的数据的阶乘,怎知计算至12的阶乘,数据便开始溢出.这应该算是第一个小小的计算类的编程吧.思路其实很简单;2!=2,3!=2!*3,4!=3!*4,5!=4!*5,以此类推.公式为n!=(n-1)!*n,n>=2;编程的思路是什么,很简单,命名一个数据,该数据通过循环实现累加,再命名一个数据用于将前面的数据累积.源代码9_求100的阶乘.rar

    一定要注意,此处我写的100的阶乘,实际上会出现数据溢出,而且貌似VC++6.0不支持unsigned long long型数据.

    另外100的阶乘应该是非常庞大的一个数值,搞不好会死机,大家可以试一试.

0
回复
2016-09-02 15:52
@hello-no1
  一定要注意,此处我写的100的阶乘,实际上会出现数据溢出,而且貌似VC++6.0不支持unsignedlonglong型数据.  另外100的阶乘应该是非常庞大的一个数值,搞不好会死机,大家可以试一试.

    搞定幂函数计算程序.该程序适用于实数的整数次幂计算

    思路算法很简单,当需要求解一个实数的整数次幂时,只需要将该实数通过循环需求的整数次即可.

    算法实现:n^p=n循环自乘P次数即可.

源代码

幂函数.rar

0
回复
2016-09-05 16:01

    继续更新.

今天搞定了三种常见的C语言算法问题.

第一个猴子吃桃子问题

源代码

猴子吃桃问题.rar

算法思想其实很简单.

就是每天的桃子个数*2+1,然后在循环累积即可.

0
回复
2016-09-05 16:05
@hello-no1
  继续更新.今天搞定了三种常见的C语言算法问题.第一个猴子吃桃子问题源代码猴子吃桃问题.rar算法思想其实很简单.就是每天的桃子个数*2+1,然后在循环累积即可.

    接着是数值比较大小并按照从小到大的顺序排列.

源代码

3数值排序.rar

算法思路:比较三个数值的大小,先将两个数值进行排序,通过比较,先将二者数值实现从小到大排序,以此类推.

0
回复
2016-09-05 16:08
@hello-no1
  接着是数值比较大小并按照从小到大的顺序排列.源代码3数值排序.rar算法思路:比较三个数值的大小,先将两个数值进行排序,通过比较,先将二者数值实现从小到大排序,以此类推.

    接下来是买苹果问题

源代码

买苹果问题.rar

思路算法:将每天的苹果个数循环累积,当达到某一数值,则停止循环,接着求其平均值.


0
回复
2016-09-05 16:13
@hello-no1
  接下来是买苹果问题源代码买苹果问题.rar思路算法:将每天的苹果个数循环累积,当达到某一数值,则停止循环,接着求其平均值.

    这段时间一直埋头学习C语言基础,慢慢发现计算机语言的发明真的很牛B.

    大家知道不管什么高级语言其实一般就三种结构,循序结构,循环结构,选择结构.通过这三种结构的自由组合,就能实现各种功能,不得不服.

    每天不断的敲着代码,模仿别人的代码,理解别人的思路,慢慢的,对于编程的思路我也开始有一点了,至少不在像过去那样迷茫,摸不着头绪.每天进步一点,不断坚持,技术上必将有重大突破.

    虽然很累,但一直努力学习,埋头苦学,只管耕耘,不问收获,和志同道合者共勉.

0
回复
2016-09-06 16:57
@hello-no1
  这段时间一直埋头学习C语言基础,慢慢发现计算机语言的发明真的很牛B.  大家知道不管什么高级语言其实一般就三种结构,循序结构,循环结构,选择结构.通过这三种结构的自由组合,就能实现各种功能,不得不服.  每天不断的敲着代码,模仿别人的代码,理解别人的思路,慢慢的,对于编程的思路我也开始有一点了,至少不在像过去那样迷茫,摸不着头绪.每天进步一点,不断坚持,技术上必将有重大突破.  虽然很累,但一直努力学习,埋头苦学,只管耕耘,不问收获,和志同道合者共勉.

    继续更新.

    第一个算法程序,求余数.

源代码

求余数.rar

算法思路:通过对输入数值取余,然后输出其最后的两位数值.该程序主要是为了加深对%符号的理解.

0
回复
2016-09-06 17:01
@hello-no1
  继续更新.  第一个算法程序,求余数.源代码求余数.rar算法思路:通过对输入数值取余,然后输出其最后的两位数值.该程序主要是为了加深对%符号的理解.

    判断输入的数值是否为素数,如果不是素数则将其所有的约数均打印出来.

源代码

素数判断.rar

算法思路:其实很简单,只需要知道素数的概念就知道如何下手,素数是指除了1和它本身以外,不能被任何整数整除的数.根据素数的概念需要排除1,然后再通过(素数%2是否等于0)来判断.

这段代码我纠结了大半天,不过还是搞定了.

0
回复
2016-09-06 17:04
@hello-no1
  判断输入的数值是否为素数,如果不是素数则将其所有的约数均打印出来.源代码素数判断.rar算法思路:其实很简单,只需要知道素数的概念就知道如何下手,素数是指除了1和它本身以外,不能被任何整数整除的数.根据素数的概念需要排除1,然后再通过(素数%2是否等于0)来判断.这段代码我纠结了大半天,不过还是搞定了.

    最后一段代码是判断闰年的代码,根据输入的日期求出某月份某一天的总天数.

源代码

闰年及总天数判断.rar

算法思路:第一个是判断闰年的思路,if(a%4==0&&a%100!=0||a%400==0),这是判断闰年的思路.接下来是根据闰年非闰年求取具体某一天的总天数.


0
回复
2016-09-07 16:18
@hello-no1
  最后一段代码是判断闰年的代码,根据输入的日期求出某月份某一天的总天数.源代码闰年及总天数判断.rar算法思路:第一个是判断闰年的思路,if(a%4==0&&a%100!=0||a%400==0),这是判断闰年的思路.接下来是根据闰年非闰年求取具体某一天的总天数.

    继续更新

搞定婚礼谎言程序

源代码

婚礼谎言.rar

思路算法:通过条件约束来判断谁与谁结婚,本质是通过穷举法实现逻辑判断.

0
回复
2016-09-07 16:19
@hello-no1
  继续更新搞定婚礼谎言程序源代码婚礼谎言.rar思路算法:通过条件约束来判断谁与谁结婚,本质是通过穷举法实现逻辑判断.

    百钱买百鸡问题

这是一个经典的编程算法问题,本质其实还是条件约束加穷举法实现

源代码

百钱买百鸡.rar

0
回复
2016-09-08 15:40

    继续更新.

    打渔晒网问题

源代码

打渔晒网问题.rar

算法思路:渔夫连续三天打渔,接着连续两天晒网,5天循环一个周期.输入一个日期,该日期%5,余数为1,2,3则表示打渔,否则表示晒网.这就是他的核心思路.

0
回复
2016-09-08 15:47
@hello-no1
  继续更新.  打渔晒网问题源代码打渔晒网问题.rar算法思路:渔夫连续三天打渔,接着连续两天晒网,5天循环一个周期.输入一个日期,该日期%5,余数为1,2,3则表示打渔,否则表示晒网.这就是他的核心思路.

    三角形类型判断程序

源代码

三角形判断.rar

算法思路:首先判断三条边两两相加是否大于第三边,这是普通三角形判断的首要条件,接着判断三条边之间的关系,相等或者平方相等等等.

其实就是等边三角形,等腰三角形,直角三角形,等腰直角三角形等条件判断而已.

0
回复
2016-09-09 15:31
@hello-no1
  三角形类型判断程序源代码三角形判断.rar算法思路:首先判断三条边两两相加是否大于第三边,这是普通三角形判断的首要条件,接着判断三条边之间的关系,相等或者平方相等等等.其实就是等边三角形,等腰三角形,直角三角形,等腰直角三角形等条件判断而已.

    搞定直接插入排序算法,该算法其实和三个数排序的思想类似,不过直接插入排序算法需要的数据多了而已

源代码

直接插入排序.rar

代码界面

运行界面

0
回复
2016-09-09 15:38
@hello-no1
  搞定直接插入排序算法,该算法其实和三个数排序的思想类似,不过直接插入排序算法需要的数据多了而已源代码直接插入排序.rar代码界面[图片]运行界面[图片]

    算法思路:直接插入排序是由两层嵌套循环组成。第一层循环用于确定待比较的数值。第二层循环将两数值进行比较排序。

    直接插入排序是将待比较的数值与它的前一个数值进行比较,所以第一层循环是从第二个数值开始的,当前一数值比后一数值大,则循环比较,直到找到比待比较数值小的数值则束该次循环.

    个人觉得直接比较排序的速度其实是最慢的一种,后面还有各种经典的排序方法介绍,当然程序的理解难度也加深,我个人也有很多疑问,希望和大家共同探讨.


0
回复
2016-09-09 16:35
@hello-no1
  算法思路:直接插入排序是由两层嵌套循环组成。第一层循环用于确定待比较的数值。第二层循环将两数值进行比较排序。    直接插入排序是将待比较的数值与它的前一个数值进行比较,所以第一层循环是从第二个数值开始的,当前一数值比后一数值大,则循环比较,直到找到比待比较数值小的数值则束该次循环.  个人觉得直接比较排序的速度其实是最慢的一种,后面还有各种经典的排序方法介绍,当然程序的理解难度也加深,我个人也有很多疑问,希望和大家共同探讨.

    接着改进直接排序的算法,希尔排序

源代码

希尔排序.rar

代码界面

运行界面

0
回复
2016-09-09 16:42
@hello-no1
  接着改进直接排序的算法,希尔排序源代码希尔排序.rar代码界面[图片]运行界面[图片]

    直接排序在数据量比较小的时候可能问题还不大,但是如果有100个数字,10K数字,1000K数字的时候呢,随着数据量的增加,直接排序的速度会成倍的下降,此时不得不考虑优化算法.

    希尔排序的算法思路:

    先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)

    接着将若干子序列分别进行直接插入排序,然后依次缩减增量再进行排序

    待整个序列中的元素基本有序时,再对全体元素进行一次直接插入排序

    因为直接插入排序在元素基本有序的情况下,效率很高
    希尔排序在时间效率上比直接排序有较大提高

    一书关于排序问题的代码很难阅读理解,针对排序问题我参考的是网络上一牛人的博客,在此把他的博客链接发给大家

    http://blog.csdn.net/morewindows/article/details/6668714

0
回复
2016-09-09 16:48
@hello-no1
  直接排序在数据量比较小的时候可能问题还不大,但是如果有100个数字,10K数字,1000K数字的时候呢,随着数据量的增加,直接排序的速度会成倍的下降,此时不得不考虑优化算法.  希尔排序的算法思路:    先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)    接着将若干子序列分别进行直接插入排序,然后依次缩减增量再进行排序  待整个序列中的元素基本有序时,再对全体元素进行一次直接插入排序    因为直接插入排序在元素基本有序的情况下,效率很高    希尔排序在时间效率上比直接排序有较大提高  一书关于排序问题的代码很难阅读理解,针对排序问题我参考的是网络上一牛人的博客,在此把他的博客链接发给大家    http://blog.csdn.net/morewindows/article/details/6668714

        看到<增广贤文>中的一段经典名句,共享给大家

                              未曾清贫难成人
                        不经打击老天真
                        自古英雄出炼狱
                        从来富贵入凡尘
                        醉生梦死谁成器
                        拓马长枪定乾坤
                        挥军千里山河在
                        立名扬威传后人

0
回复
2016-09-12 11:27
帖子已被设置为头条,恭喜楼主可添加电源网私人官网微信(dianyuan_com)为好友,领取现金红包(备注信息:头条红包)

      注:现金红包仅限当日领取

      活动介绍:http://www.dianyuan.com/bbs/1531738.html

     

0
回复
2016-09-12 14:29
@电源网-fqd
帖子已被设置为头条,恭喜楼主可添加电源网私人官网微信(dianyuan_com)为好友,领取现金红包(备注信息:头条红包)     注:现金红包仅限当日领取     活动介绍:http://www.dianyuan.com/bbs/1531738.html     [图片]

    继续更新

    搞定经典算法之冒泡排序

源代码

冒泡排序.rar

代码界面

运行界面

0
回复
2016-09-12 14:31
@hello-no1
  继续更新  搞定经典算法之冒泡排序源代码冒泡排序.rar代码界面[图片]运行界面[图片]

    算法思路:

第一步比较相邻的前后两数据,如果前面数据大于后面的数据,就将这两个数据交换。
第二步对数组的第0个数据到N-1个数据进行一次遍历后,最大的一个数据就“沉”到数组第N-1个位置,也就是所谓的冒泡的思路.
第三步N=N-1,如果N不为0就重复前面二步,否则排序完成。

0
回复
2016-09-12 15:08
@hello-no1
  算法思路:第一步比较相邻的前后两数据,如果前面数据大于后面的数据,就将这两个数据交换。第二步对数组的第0个数据到N-1个数据进行一次遍历后,最大的一个数据就“沉”到数组第N-1个位置,也就是所谓的冒泡的思路.第三步N=N-1,如果N不为0就重复前面二步,否则排序完成。

    改进型冒泡排序

源代码

改进型冒泡排序.rar

代码界面

运行界面

0
回复
2016-09-12 15:09
@hello-no1
  改进型冒泡排序源代码改进型冒泡排序.rar代码界面[图片]运行界面[图片]
    冒泡排序本质上是一种效率较低的排序方法,在数据规模很小时,可以采用。数据规模比较大时,最好用其它排序方法。不过它的效率相对于直接排序还是高了一些.
0
回复
2016-09-13 15:24
@hello-no1
    冒泡排序本质上是一种效率较低的排序方法,在数据规模很小时,可以采用。数据规模比较大时,最好用其它排序方法。不过它的效率相对于直接排序还是高了一些.

    搞定快速排序

源代码

快速排序.rar

代码界面

运行界面

0
回复