摘要:
最近在写C代码的过程中,感觉自己在重复一项必不可少的环节,就是自测代码,这使我想起以前在写JAVA时的Junit带来的快捷和方便,于是马上行动,经百度、谷歌几轮后,发现Cunit工具,看名字,就可猜到它与Junit同属一宗。网上的相关内容也都非常雷同,这里不再详述,有兴趣的话,可以直奔官方文档.下面我们结合一个小实例,来体验一下Cunit的便利吧(学编程,最有效的方式还是自己动手) 阅读全文
2012年8月25日
2012年8月18日
摘要:
根据前面几篇关于C语言的抽象类型及模块化开发的知识,一方面总结知识,另一方面通过实例来增加理解,使其真正转化为自己的能力和思想,使强大而又古老的C语言不再枯燥,挖掘它的高级语言特性。我们简单回顾一下相关知识:
重点有:
1)接口定义,只重行为,不重底层实现,给予实现层充分的自由。
2)模块化划分再加上接口层,实现层和客户层,多种形式,使程序易于开发和维护
这里我们主要应用前面几篇博文中提到的关于模块块开发及抽象数据类型的相关知识,结合一个常见的数据结构题目---停车场管理,练习体会一下。 阅读全文
2012年8月15日
摘要:
学习ADT有一周了,从了解到使用,慢慢找到了一点感觉,通过一系列的基础数据类型如堆栈,队伍,扫描器等常见结构模型练习体会它的威力。这些大多都参考自《程序设计抽象思想-C语言描述》,但不是照搬过来了,为了真正提高自己的基本技能,尽力自己独立完成,遇到再去参考大师的思路,这样一方面提高自己的动手能力,另一方面明确了自己的问题,有针对性地学习别人的长处。
ADT在模块化开发中发挥了极其重要的作用,它可使一个复杂程序变得有层次,更模块化,易于开发和重用。首先它将一般程序划分为接口,实现和客户端三层,每层都有自己的职责,应用到实现中可能是三组不同的人员,在一定程序上,使这三层关系分明,如接口是通过一个头文件,定义一个抽象数据类型,及其行为,实现层依照接口定义,实现底层表示和行为的实现代码,而且底层表示和实现是有一定自由的,可根据实际,选择高效的实现方式;而客户端作为接口的使用者,对接口的实现层并不了解,也不需要了解。只需根据接口定义及其说明,来调用相应的行为函数,来完成复杂的任务。 阅读全文
2012年8月14日
摘要:
自从有了抽象数据类型的思想指导,突然有种豁然开朗的感觉,感觉这枯燥繁琐的C语言有了生气,大脑思考问题时,增添了不少灵感和思路。面对一个复杂问题,不再迷茫而不知所措。
根据模块化开发的思想,对于一个复杂问题,一般是根据”逐步求精“的指导精神,将问题分析,按功能将程序分解为多个模块,其中包含main函数的称作主模块,其它模块都可看作是主模块的库,甚至有些模块是相对独立的,可以作为多个应用程序的库,以实现最大限度的代码重用。 阅读全文
2012年8月10日
摘要:
此篇继续前一个博客,以一个火车厢重排问题为例(这里用堆栈形式的缓冲轨),有关此题目,想必大家有所耳闻,我也在网上搜索过,发有大多都是C++版本,而C语言版本只有一版,而且我感觉有点乱,注释少,以至我没有耐心读下去。正好拿这个题目练练手,就当做个大脑体操了,呵呵,步入正题,继续体会抽象数据类型带来的好处。 阅读全文
摘要:
在读了《程序设计抽象思想-C语言描述》第八章后,对此ADT抽象思想感触颇深,而且从中还看到了面向对象编程的影子,不禁感叹这些老外的近二十年前的书的经典,感觉为自己灵活,高效驾驭这古老而又现代的C语言指明了方向,废话少说,步入正题。
ADT相关知识这里简略列了一个图表,以供浏览: 阅读全文
2012年8月6日
摘要:
递归思想运用很灵活,有时可以显而易见,有时却需要深入琢磨,这里我们练习一个题目,题目内容是输出n个字符的所有排列。
利用前面博客中回顾的递归知识,深入分析此题目,
我们先依次取n个字符中的一个作为第一位上的值,问题则转化为求得剩下n-1个字符的所有排列,依此类推,问题越来越简化,简化,最简单情况就是各位置上字符都被确定,排列结束。 阅读全文
2012年8月2日
摘要:
递归思想是“分之治之”的一种重要思维方式,此文章通过总结递归相关概念和思想,通过几个经典例子来体会,因为有太多东西是无法用语言表达出来的。接受它并灵活运用此思想,是一个长期的任务 阅读全文
摘要:
上篇博文已经回顾了内存分配方式的相关知识,特别是动态分配,此处我们以一个查找质数的实例来练习体会一下动态分配的魅力 阅读全文