全部博文(73)
分类: C/C++
2010-06-21 14:08:10
先说纯C的教材
第一本:Brian W.Kernighan和Dennis M.Ritchie 的《C程序设计语言》。
此书简称K&R,由C语言的创建者撰写,是全球销售最多的C语言教材,其品质不容置疑。不过不适合入门,适于在入门之后巩固提高。实体书有原版和译本购买,电子版英文较多。
第二本:谭浩强的《C程序设计》。
优点在于,面向中国学生,语言易于理解,而且全书篇幅小,看过的人多,容易找到人请教。但是各方面的概念不深入,浅尝辄止。因此适合第一次入门学习,例题做完基本就可以抛弃了。有实体书和电子版下载。
第三本:H.M.Deitel和P.J.Deitel的《C程序设计教程》。
作者是父子,从事语言教材的编写合计超过40年,本书被美国众多高校选用为教材,既可入门也可翻阅,甚好。
第四本:王大刚先生的《C语言编程宝典》。
质量不错,与老谭的书处于同一级别。无实体书,只有网络版,在本群论坛有转载:
第五本:无名作者的《C语言初学者入门讲座》
本群论坛转载,作者未知,质量同上一本。
第六本:Kenneth A.Reek 的《C和指针 》
进阶读物,把指针一章演绎为一本书可见其技术精度。指针是C的灵魂,能领会本书中的理念,才能算是真正明白了C指针的奥妙,才算懂得了C。
第七本:Andrew Koenig 的 《C陷阱与缺陷》
进阶读物,在认真读完上面的入门书之前,暂勿阅读。本书畅销14年历久不衰,足证品质。
最后一本:ISO C89规范/C99规范
一切关于C语言的疑问,只有一件东西最权威,那就是ISO的规范。但这不是正式出版物,是类似法律文本的技术说明,而且只有英文版。新手阅读,提防吐血而亡。
再说C++的教材,C++比C复杂的多,所以教材也就纷繁芜杂。既有综合性入门性的,也有专项深入的,阅读要循序渐进,以下分阶段介绍(以下文字有部分引用自他人评介)。
首先是毫无基础的时候,先要初步掌握语法并形成编程的概念
level 0:
仍然是K&R,Brian
W.Kernighan和Dennis M.Ritchie 的《C程序设计语言》。
尽管C++之父亲口说,最好把C++看作一门新语言来学习,但我个人认为,一开始学习C至少有两大好处。相比C++,C还是非常简单的,易于掌握,避免你过早陷入C++的语法泥潭。同时,学C能让你对计算机的底层运行有所认识,建立良好的概念。
H.M.Deitel和P.J.Deitel的《C++程序设计教程》。
又是这对父子。有很多号称C++入门的书,但经我的观察,如果要选择能推荐给毫无编程概念的新手用的书,这本算是佼佼者了。此父子的《C程序设计教程》我已推荐了。
钱能的《C++程序设计教程》
国内C++教材中较好的一本,作者是教师,总结多年教学实践的经验写成的,比较适合国内学生。
PS:老谭也有一本C++教材,在此就不太推荐了,它完全是用C的思维来看C++。
当读者有一定c/c++基础
推荐的阅读顺序:
level 1
从<
以<
C++之父Bjarne Stroustrup的 <
这个阶段
也可以延用前阶段Detiel父子的教材。
level 2
然后从<
接着是<
顺下来就是<
当你读到这里,应该会有一股升级的冲动了
level 3
<
看完上一本之后,这本<
level 4
<
学c++不能不学stl,那么首先是<
<
光用不行,我们还有必要了解stl的工作原理,那么<
level 5
对于c++无非是oo和gp,想进一步提升oo,<
一位stl高手是不能不去了解template的,<
<
和C一样,同样有最后一本书
ISO+IEC+14882-1998
C++规范。这可不是宝典圣经,这就是C++的法律,一切疑问以此为准到此打住。不过,拖个小尾巴,具体情况取决于编译器实现。
光看书似乎不解决问题,难道要做题
当然要做题,而且做题也要循序渐进。
首先是教材正文中的示例,然后是书后的练习题。
第二步可以做国家等级考试二级三级的C语言题。在线上可以找到,大量二级题库。三级题推荐南开的三级100题。此外本群共享文件中也有一些这一难度的题目。
正如前面讲过,当第二步的题目都做完后,语法已经不是问题,应该开始学习数据结构和算法。这个方面的练习题可以去各大OJ。OJ是什么,请看下一节。
OJ是什么
OJ是OnlineJudge的缩写。OnlineJudge是一种在线裁判系统。她可以对程序原代码进行编译和执行,并通过预先设计的测试数据来检验程序原代码的正确性。
首先,他是一个在线的题库,有很多习题,你可以任选其中之一来解答。然后,系统的编译器能够编译执行你所提交的代码。如果编译通过,针对每个题目,系统将使用自带的多组测试数据检验你的程序,如果程序都能得到正确的输出,那么你顺利地解决了这个问题。最后,系统还能对所有参与答题的用户进行统计和排名。
OJ的题目大部分是关于算法的。题目的输入输出通常是命令行方式,而非图形界面。也就是说,要关注的不是平台的兼容性、文件的格式抑或窗口的布置这种无关紧要的细节,而是问题本身的逻辑实现。一个用户提交的程序在Online
Judge系统下执行时将受到比较严格的限制,包括运行时间限制,内存使用限制和安全限制等。用户程序执行的结果将被Online
Judge系统捕捉并保存,然后再转交给一个裁判程序。该裁判程序或者比较用户程序的输出数据和标准输出样例的差别,或者检验用户程序的输出数据是否满足一定的逻辑条件。最后系统返回给用户一个状态,通过、错误、超时、溢出或是无法编译。
Online Judge系统来自ACM和IOI大赛。由美国计算机协会(ACM Association for Computing
Machinery)发起和组织的ACM国际大学生程序设计竞赛(简称ACM/ICPC)是目前世界上规模最大的计算机学科赛事。IOI则是国际信息学奥林匹克竞赛,和数学奥林匹克竞赛一样著名。Online
Judge系统是IOI或ACM的训练题库,同时也是ACM和IOI的评分系统。
哪里有可用的OJ
以下几个OJ都很不错,请随意进入。也可以自行搜索,国内很多学校的OJ正在热火朝天的建设中。
myOJ
建站人员自称是专为中学生OI选手训练使用,由中学生和中学教师共同开发的,也是给中学生和中学教师使用的。优点是题目难度较低,而且题目都是中文版易于阅读。
浙江大学宁波理工学院
也是适合新手的OJ,题目难度由低到高不等。中文题不少。
USACO
全美计算机奥林匹克竞赛(USACO)的训练网站,特点是做完一关才能继续往下做,与前面的OJ不同的是测试数据可以看到,并且做对后可以看标准解答,所以如果大家刚开始的时候在上面那些OJ上总WA却找不到原因的话,可以试着来这里做做,看看测试数据一般是从什么地方阴你的。
以上三个推荐新手前往。
浙江大学的Online Judge
国内最早也是最有名气的OJ,有很多高手在上面做题。特点是数据比较刁钻,经常会有你想不到的边界数据,很能考验思维的全面性。
北京大学的Online Judge
建立较ZOJ晚一些,但题目加得很快,现在题数和ZOJ不相上下,特点是举行在线比赛比较多,数据比ZOJ上的要弱,有时候同样的题同样的程序,在ZOJ上WA(wrong
answer),在POJ上就能AC(accomplished)
西班牙的Universidad de Valladolid
世界上最大最有名的OJ,题目巨多而且巨杂,数据也很刁钻,全世界的顶尖高手都在上面。据说如果你能在UVA上AC一千道题以上,就尽管向IBM、微软什么的发简历吧,绝对不会让你失望的。
俄罗斯乌拉尔大学
也是一个老牌的OJ,题目不多,但题题经典。
哪里有代码示例可看
这个可以自己google或baidu。
如果你已经能够做一些OJ的题了,那么可以考虑看一些开源软件的代码。
是全球最大的开源软件集中地,确定一个应用主题上去找就会有收获。