Chinaunix首页 | 论坛 | 博客
  • 博客访问: 158540
  • 博文数量: 73
  • 博客积分: 3106
  • 博客等级: 中校
  • 技术积分: 730
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-11 22:57
文章分类

全部博文(73)

文章存档

2018年(2)

2016年(1)

2012年(8)

2011年(21)

2010年(41)

我的朋友

分类: 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++能进一步了解其特性
    以<>作字典和课外读物,因为太厚不可能一口气看完
    C++之父Bjarne Stroustrup的 <>,简称BS的TCPL,全面而深入的书,缺点也是太厚。
    这个阶段 也可以延用前阶段Detiel父子的教材。

    level 2
    然后从<>开始转职,这是圣经,请遵守10诫,要经常看,没事就拿来翻翻
    接着是<>,个人认为Herb Sutter主席大人的语言表达能力不及Scott Meyers总是在教育第一线的好
    顺下来就是<>和<>,请熟读并牢记各条款
    当你读到这里,应该会有一股升级的冲动了

    level 3
    <>看过后如一缕清风扫去一直以来你对语言的疑惑,你终于能明白compiler到底都背着你做了些什么了,这本书要细细回味,比较难啃,最好反复看几遍,加深印象
    看完上一本之后,这本<>会重演一次当年C++他爹在设计整个语言过程中的历程

    level 4
    <>是stl的字典,要什么都可以查得到
    学c++不能不学stl,那么首先是<>,它和圣经一样是你日常行为的规范
    <>让你从oo向gp转变
    光用不行,我们还有必要了解stl的工作原理,那么<>会解决你所有的困惑

    level 5
    对于c++无非是oo和gp,想进一步提升oo,<>是一本主席这么多年的经验之谈,是很长esp的
    一位stl高手是不能不去了解template的,<>是一本百科全书,足够你看完后对于gp游刃有余
    <>是太过聪明的人写给明眼人看的

    和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的题了,那么可以考虑看一些开源软件的代码。 是全球最大的开源软件集中地,确定一个应用主题上去找就会有收获。

阅读(1002) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-09-27 15:26:27

good