今天开始着手学习C语言常用算法.
常规单片机寄存器的配置,基本已经掌握,现在感觉自己的技术停滞了,主要卡在单片机编程中常见的算法类程序,不知道从何下手,这一帖重点学习C语言算法类的编程.
今天开始着手学习C语言常用算法.
常规单片机寄存器的配置,基本已经掌握,现在感觉自己的技术停滞了,主要卡在单片机编程中常见的算法类程序,不知道从何下手,这一帖重点学习C语言算法类的编程.
本人断断续续学习C语言也有3,4年了,市面上常见的经典的C语言书籍,几乎都有,虽然常用的语法很了解,但总感觉没有真正理解C语言.
本人一直从事硬件开发,工作中基本上都是和二极管,三极管,变压器,运放,电容这些常见的元器件打交道,几乎用不到单片机这一块,可是单片机一直没有真正的突破,心里上总感觉有一道坎没有跨过去.今年年初,我决心克服自己的惰性以及畏惧,拿下单片机这一块,打通心里上的这道坎.
每天处理好手头上大量的工作后,我便埋头苦学,虽然很累,但感觉很充实.
想起钟道隆将军的那句名言:何以解忧,唯有学习.
每天精进是我的追求,和志同道合者共勉.
接着编写了一个阶乘的代码.
刚开始准备搞定100以内的数据的阶乘,怎知计算至12的阶乘,数据便开始溢出.
这应该算是第一个小小的计算类的编程吧.
思路其实很简单;
2!=2,3!=2!*3,4!=3!*4,5!=4!*5,以此类推.公式为n!=(n-1)!*n,n>=2;
编程的思路是什么,很简单,命名一个数据,该数据通过循环实现累加,再命名一个数据用于将前面的数据累积.
源代码
一定要注意,此处我写的100的阶乘,实际上会出现数据溢出,而且貌似VC++6.0不支持unsigned long long型数据.
另外100的阶乘应该是非常庞大的一个数值,搞不好会死机,大家可以试一试.
这段时间一直埋头学习C语言基础,慢慢发现计算机语言的发明真的很牛B.
大家知道不管什么高级语言其实一般就三种结构,循序结构,循环结构,选择结构.通过这三种结构的自由组合,就能实现各种功能,不得不服.
每天不断的敲着代码,模仿别人的代码,理解别人的思路,慢慢的,对于编程的思路我也开始有一点了,至少不在像过去那样迷茫,摸不着头绪.每天进步一点,不断坚持,技术上必将有重大突破.
虽然很累,但一直努力学习,埋头苦学,只管耕耘,不问收获,和志同道合者共勉.
最后一段代码是判断闰年的代码,根据输入的日期求出某月份某一天的总天数.
源代码
算法思路:第一个是判断闰年的思路,if(a%4==0&&a%100!=0||a%400==0),这是判断闰年的思路.接下来是根据闰年非闰年求取具体某一天的总天数.
算法思路:直接插入排序是由两层嵌套循环组成。第一层循环用于确定待比较的数值。第二层循环将两数值进行比较排序。
直接插入排序是将待比较的数值与它的前一个数值进行比较,所以第一层循环是从第二个数值开始的,当前一数值比后一数值大,则循环比较,直到找到比待比较数值小的数值则束该次循环.
个人觉得直接比较排序的速度其实是最慢的一种,后面还有各种经典的排序方法介绍,当然程序的理解难度也加深,我个人也有很多疑问,希望和大家共同探讨.
直接排序在数据量比较小的时候可能问题还不大,但是如果有100个数字,10K数字,1000K数字的时候呢,随着数据量的增加,直接排序的速度会成倍的下降,此时不得不考虑优化算法.
希尔排序的算法思路:
先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)
接着将若干子序列分别进行直接插入排序,然后依次缩减增量再进行排序
待整个序列中的元素基本有序时,再对全体元素进行一次直接插入排序
因为直接插入排序在元素基本有序的情况下,效率很高
希尔排序在时间效率上比直接排序有较大提高
http://blog.csdn.net/morewindows/article/details/6668714
看到<增广贤文>中的一段经典名句,共享给大家
未曾清贫难成人
不经打击老天真
自古英雄出炼狱
从来富贵入凡尘
醉生梦死谁成器
拓马长枪定乾坤
挥军千里山河在
立名扬威传后人
注:现金红包仅限当日领取
活动介绍:http://www.dianyuan.com/bbs/1531738.html