C语言进阶学习有哪些经典书籍

Python017

C语言进阶学习有哪些经典书籍,第1张

《C语言程序设计》

作者:郭有强 编

出 版 社:清华大学出版社

评价:书很利索,该有的都有,如果你还没有一本满意的C语言课本,买它没错。(也可以阅读外国的经典C语言书籍)

《C和指针》

POINTERS ON C Kenneth A.Reek、

徐波 人民邮电出版社

评价:不算厚的书,纠正对指针的错误理解,这是必读经典,相信会带给你很多思考。(单单一本还不够,继续往后看)

《C陷阱与缺陷》

Andrew Koenig、 高巍

人民邮电出版社

评价:172页,应当1-2天看完,读完豁然开朗,对C语言常见的陷阱进行剖析,必须经典。

《C专家编程》

Expert C Programming Deep C Secrets Peter Van

Der Linden 人民邮电出版社 (2008-02出版)

评价:200多页,应当2天左右看完,本书读起来很舒坦,不可多得的好书,带你领略语法之外的奥秘,必读经典。

②数据结构与算法:

《清华大学计算机系列教材•数据结构(C语言版)(附光盘1张)》

吴伟民、 严蔚敏

清华大学出版社

评价:数据结构都是类C的伪代码描述,初次接触编程的同学可能理解不了,我也一样。我是看严蔚敏视频学会的数据结构,希望这个办法对你们也同样有效。

《计算机算法设计与分析(第3版)》

王晓东

电子工业出版社

评价:这是我们的课本,不过的确是学习它才把数据结构和算法入门了,为后面进阶做了铺垫。

《算法艺术与信息学竞赛•算法竞赛入门经典》

刘汝佳

清华大学出版社

评价:了解数据结构怎么用,常用算法与思想,书不厚,但很给力。初学可能有障碍,但这的确是入门经典书籍,请不要放弃。

《算法导论(原书第2版)》

科曼(Cormen T.H.)、等、 潘金贵

机械工业出版社 (2006-09出版)

评价:经典中的经典,无需多说,不要问我看哪些内容,负责任的说:有能力就多看点,其实都能看懂,书中的内容与思想将会终身受用。

《编程之美:微软技术面试心得 》

《编程之美》小组

电子工业出版社

评价:微软出品,像是一本小故事集,将数学和编程之美展露无疑,学起来很轻松,反复回顾收获颇丰。

《编程珠玑(第2版)》

Jon Bentley、黄倩、 钱丽艳

人民邮电出版社

评价:主要是数据结构和算法,都是常用的内容,不过作者思维新奇,跟随作者一起思考会碰撞出不少火花,评价非常高的一本书,本人没有顺序阅读,感兴趣的内容翻了翻。

《算法艺术与信息学竞赛 》

刘汝佳

清华大学出版社

评价:放在最后,因为此书的确很专业,我这点智商也驾驭不了,信息学竞赛必备。

《程序员面试宝典(第3版)》

欧立奇、刘洋、 段韬

电子工业出版社

评价:这本书很神奇,大二下学期的时候我就买了并看完了,等到大三找工作的时候发现里边的提到的陷阱题目还是有点意思的,C语言掌握的怎么样拿这本书验一验就知道了。

《数学之美》

(《浪潮之巅》作者吴军最新力作,李开复作序推荐,Google黑板报百万点击)

01

开发软件不等于编码

写程序时会有"编码-->测试-->调试"的习惯.很不幸,这是开发软件的错误方法.专业的程序员会使用策略来预防、检测及消除软件bug.编码不是在开发软件.编码的意思是在文本编辑器中输入语句.编码只是开发软件的小部分.开发软件需要编程前、编程中、编程后的许多步骤.下面分着讲解.

02

编程前

1、了解需求.

2、考虑可能的输入和期望的输出.

3、识别出有效但非期望的输入和正确的输出.这是对于开发可靠的软件而言是一个关键点.

4、识别出无效输入并找到检测它们的方法.要注意即使输入无效的数据时,程序也不能奔溃.

5、想出解决办法,并记录.

6、设计程序,可以节省大量的时间.

03

编程中

1、若想正确且更快的完成程序, 就写更多的代码.为了满足一个要求而把代码放到一个更大的程序之前,写一个小程序来测试你的解决方案.即单元测试.

2、使用自动缩进的文本编辑器可以帮你检查代码是否对齐,可以节省宝贵的时间.

3、在运行之前一行一行的读代码.可以帮你找到通过测试很难发现的问题.

4、自己想一些测试例子. 若自己不知道自己写的代码,则计算机也不知道.

5、尽量使用函数来重构代码,避免复制代码.

6、要用版本控制系统(这不是废话吗).

7、编译时,警告信息也不要放过.

04

编程后

不要依赖测试,测试只会告诉你程序没有正常工作,不会告诉你程序真的在正常运行.很可能测试用例没有涵盖所有可能的方案.通过测试用例涵盖所有可能的方案是很困难的.

05

常见错误

未初始化变量: 一些人认为所有的变量都会自动初始化为0,C语言中不会初始化.通过测试很难测试出来.

错误数据类型: 需要理解并正确地使用类型,编程语言的趋势是让数据类型更有限制性,防止犯意外的错误.

06

后执行式和交互式调试

调试一个程序分为几个阶段, 举个列子:

1、从一个文件中读取一些整数

2、把整数排序

3、把排好序的整数存到另一个文件中

单元测试: 在上面三部整合之前测试每一部分叫作单元测试.

对于单元测试,经常需要写一些额外的代码,作为单独部分的"驱动".调试可能是交互式或后执行式的.若程序会花费几个小时,你就不会想要用交互式来调试这个程序了.相反,你会想要程序打印出调试信息,即日志.

对交互式调试而言打印调试信息存在多个问题:

1、需要插入代码来打印调试信息.多数情况下,调试信息必须在随后被移除,因为此信息不应该出现在最终的代码和它的输出中.

2、如果有很少的信息,那么就会缺少足够的信息帮助你判断哪里错了.

3、如果信息太多,可以忽略不相关的信息,获得好信息是很困难的.

4、最糟糕的是,问题可能会出现在意想不到的地方,而那里却并未插入调试信息.结果就是添加越来越多的调试信息.这是很耗时的.

07

生产代码与测试代码分离

自己应该能检测出自身bug的程序.编写程序之前就应该考虑编写测试代码.这是普遍的做法,这个称为 测试驱动的开发. 开发的时候需要将测试代码和开发代码分开,这样可以随意删除测试代码.