C语言书籍推荐

浙工大图书馆中,计算机的书都集中在三楼TP区。我个人推荐下面这么几本书。

《Head First C》。Head First系列的书质量基本都很高。该书有很多插图,总体上就是用一种轻松愉快的方式给新手讲解令人头疼的C语言。书虽然有些厚但其实并没多多少字,内容上也相当丰富,英文原版的阅读难度大概也就高中阅读理解的难度。图书馆有其中译本《嗨翻C语言》,但我强烈推荐去看其英文影印版《深入浅出C语言》,一来这书的英文版本身难度就不大,二来容易树立阅读英文资料的信心(特别是看到自己看完这么厚一本英文书的时候)。

     

现在很多国内出版社(比如东南大学出版社,电子工业出版社),都推出了不少国外著名教材的影印版,内容、排版均与进口原版相同,价格却大大降低。大多数国外教材的中译本的翻译质量都相当糟糕,如今,这种影印版书籍很好的解决了这个问题。

《C Programming: A Modern Approach》 。 图书馆似乎没有这本书的影印版,但是有它的中译本《C语言程序设计现代方法》。喜欢看英文版的话可以自行下载pdf。这本书比Head First C严肃一些,看上去更像是一本教材,整体上比较系统、全面和严谨,也是入门好书。

《C Traps and Pitfalls》。英文版和中文版图书馆都有。书名的中文翻译是《C陷阱与缺陷》,影印版可能也用这个书名。该书非常经典,以至于1989年出版以后,到现在还在各大C语言必读书目里面。由于这本书出的时间非常早,因此里面有些地方可能与现代的C语言标准有些差异,比如说,在当时main()可以不显式指定返回值类型,默认就是int,但现在的C标准规定必须显式的声明返回值类型为int,即int main() {...}。因此建议在看完上面两本之后再看这本书为好。这本书很薄,也就一百来页,但内容上相当出色,其中的指针、数组的部分尤为精辟,而且把一些C语言基本的原理性的东西也讲得很清楚,如此一来可以避免很多不必要的死记硬背。一定会大有所获。

为什么不推荐谭浩强的书?有很多原因。最大的一个原因就是谭书的错误实在太多(据说随便找找就有上百个,但我没证实过)。谭先生似乎根本不在乎C语言有C语言标准这回事,印刷错误什么的也就算了,很多根本就是概念性的错误,实在误人子弟。当然我们也得从历史看待问题,在谭书刚发行的那个时候,计算机尚未普及,更别说相关的资料了,谭浩强出了这么一本简单易懂的C语言书的确是非常有意义的。但是现在,既然已经有好得多的教材可以替换它了,又何必拘泥于谭书?谭书还是留给非专业的学生应试去吧,我们专业的可是真的要天天与代码打交道的。

编译环境

不要用VC++6啦,2018年都快到了,你还用1998年发布的东西,不觉得哪有问题么?就算要用也用新一点的Visual Studio 2015 Community或2013 Community,嫌VS太大用用Code::blocks也好。

当然我个人还是比较建议在学习的初期,尝试尝试在Linux或Mac环境下用命令行去编译程序。这种编译器一般用的比较多的就是gcc和clang。最好连Makefile的写法都去了解了解,这样你就可以知道,当你点了Visual Studio中的编译按钮后,究竟发生了什么。这样也容易理解C语言多文件编译的原理。这个仅仅是个建议,如果嫌麻烦,那继续用Visual Studio等集成开发环境也不会有什么大问题。

要说还有什么一定要学的东西,那就是调试器。代码一时爽,调试火葬场。还真有人,本科毕业了还不知道世界上有调试器这种东西,还以为调试代码都是睁着眼睛瞎摸,东改一点,重新编译,哎呀没成功,再西改一点,哦又没成功,还混进去几个新的问题进去,越来越不对了。这怎么可能呢?用调试器的话,就可以节省大量瞎摸的时间,它可以按照你的指示设置断点,让程序运行到某处的时候停止,然后你就可以用它观察当前所有变量的值,你甚至能用它一条一条的单步执行代码,一步步慢慢走,看看程序到底会在哪儿跌跤。所以别把自己的生命浪费在瞎摸上,有那时间还不如去操场跑几圈。

我必须得提一下代码风格,这个经常被人忽视。代码风格是干嘛的?用来增强程序的易读性的。你得知道,你自己写出的代码可不只是给电脑读的,你自己要读吧,别人可能要看你代码吧,要是你写的代码易读性很差,不缩进甚至乱缩进,不仅显得邋遢,还不容易找到错误(我见过一些人,找了半天错误没找出来,把代码的缩进规范一下,马上就找到了原因,啊原来是少了个括号)。

代码风格的问题我暂时推荐去看下面两本资料

《高质量程序设计指南 C/C++语言》

这本指南有一部分就专门讲代码风格,该书的前版pdf在网上流传甚广(《高质量C/C++编程指南》),这是该书的第3版,难得的国产精品。

《The C Programming Language》

中文译作《C程序设计语言》,建议看第2版。这是C语言之父写的C语言教材,虽然不适合零基础的初学者,但里面的代码风格相当清晰(一般称为K&R风格)。这个办公室里有一本英文版,可以借去看看。

网络资源

首先第一点,多用Google,别用百度。百度并没有什么卵用,它根本不懂中文。搜出来前两条都是带毒的,一不小心就把百度卫士啊360什么的全家都装在电脑上了。百度唯一的用处就是配合ping命令来测试网络通没通。相反的,Google这几年下来,搜索质量越来越高,真是省心省力。实在学不会科学上网的同学,那起码也用微软必应搜索凑合凑合。

接下来,假如你想问一个C语言相关的问题怎么办?上百度知道?去百度贴吧?看百度百科?

别傻了……

要去就去 stackoverflow.com ,这个堪称程序员的facebook,里面几乎所有的问题回答,都是极其一流的高手写的,准确而精辟,并且这个网站人流量非常大,基本你能想到的问题,上面都已经有人问过了。虽然里面全是英文。感兴趣的话还可以去stackoverflow的上层站点stackexchange看看,里面还有很多跟stackoverflow类似的什么物理化学数学工程电气运维等等子站点,人气都相当足。

这是stackoverflow的页面:

无论是提问还是回答都相当有水平:

stackexchange的社区相当庞大:

浙工大C语言入门指南 (仅供参考)的更多相关文章

  1. [阿里移动推荐算法]比赛_快速入门_4_19_update_仅供参考,思维不要受局限

    [这里只讲快速入门——即破题,正负样本不平衡.特征数量等问题就自己多看论文或者其他资料吧~~如果还有数据挖掘相关基础知识不了解的,建议看看<数据挖掘导论>] [以下是理解错误案例]:错误的 ...

  2. Unity上一页下一页切换功能实现源码(仅供参考)

    在做项目时我们有时需要实现切换上一页下一页图片,切换上一首下一首歌曲等等类似的功能.这里写了个简单的实现源码(仅供参考),要是有更好的方法欢迎提出来,共同进步~ 以切换上一页下一页图片为例: usin ...

  3. Ubuntu 12.04 分区方案(仅供参考)

    Ubuntu 12.04 分区方案(仅供参考)   总空间大小:50G 目录 建议大小 实际大小 格式 描述 / 10G~20G 10G ext4 根目录 swap <2048M 1G swap ...

  4. VSS的运用小内容(针对于vs2008版本)(小的问题都是,仅供参考--只针对于菜鸟级的)

    自己开始接触vss 的时候有些小的习惯没有很好的养成,下面的有关VSS内容都是简单的迁入迁出的问题,(仅供参考) 1.文件的迁入迁出:(.txt..xlsx..doc) a:文件的覆盖问题: 对于文件 ...

  5. mysql 千万级数据查询效率实践,分析 mysql查询优化实践--本文只做了一部分,仅供参考

    数据量, 1300万的表加上112万的表 注意: 本文只做了部分优化,并不全面,仅供参考, 欢迎指点.   请移步tim查看,因为写的时候在tim写的,粘贴过来截图有问题,就直接上链接了. https ...

  6. jdk1.8+SpringAOP注解报java.lang.IllegalArgumentException: error at ::0 can't find referenced pointcut select错误的不知原因的解决办法[仅供参考]

    先说办法:如果Aspectweaver-1.*.*jar这三个包版本比较低, 比如1.5.0这一层次的,可以找版本高一点的包替换低版本的包,问题可以得到解决 jar包的下载地址:https://mvn ...

  7. normalizr实践使用(个人总结,仅供参考)

    # normalizr实践使用 原数据 (自编数据,本数据仅供参考) var aaaObj ={ "id" : "0000000000000000000000000000 ...

  8. 第二步 (仅供参考) sencha touch 使用cmd打包apk

    最新版本的cmd可以直接将sencha touch项目打包成本地应用,不过还有很多不足,本文仅供参考 通过sencha app build native命令可以直接将项目打包成本地应用,不过在命令运行 ...

  9. 2019第十届蓝桥杯C++B组题解(赛后重写的,不确保答案正确性,仅供参考)

    先说一下这次的感受吧,我们考场比较乱,开始比赛了,还有的电脑有故障,(向这些人发出同情),第一次认真参加比赛,真正比赛的时候感觉没有那么正式,很乱,各种小问题,(例如博主就没找到题目在哪里,找到后又不 ...

随机推荐

  1. Hibernate中inverse属性与cascade属性

    Hibernate集合映射中,经常会使用到"inverse"和"cascade"这两个属性.对于我这样,Hibernate接触不深和语文水平够烂的种种因素,发现 ...

  2. How to easily concatenate text based on criteria in Excel? 如何将Excel中的文本按条件合并

    To combine text with the unique ID numbers, you can extract the unique values first and then create ...

  3. 用JAX-WS在Tomcat中公布WebService

    JDK中已经内置了Webservice公布,只是要用Tomcat等Webserver公布WebService,还须要用第三方Webservice框架. Axis2和CXF是眼下最流行的Webservi ...

  4. 自定义toast功能

    http://download.csdn.net/detail/caryt/8105031

  5. BTrace: DTrace for Java

    BTrace: DTrace for Java… ish DTrace first peered into Java in early 2005 thanks to an early prototyp ...

  6. Linux 内核使用的 GNU C 扩展

    gcc核心扩展linuxforum(转)=========================== Linux 内核使用的 GNU C 扩展 =========================== GNC ...

  7. java转义xml中的多余尖括号

    xml中的敏感字符是尖括号,如果xml的值中含有尖括号,那么在解析的时候就会报错,如: <?xml version="1.0" encoding="UTF-8&qu ...

  8. PHP中的session会话创建打印释放销毁;

    PHP Session PHP session 变量用于存储关于用户会话(session)的信息,或者更改用户会话(session)的设置.Session 变量存储单一用户的信息,并且对于应用程序中的 ...

  9. log4j的properties详细配置,分级输出日志文件

            log4j是很常用的日志类包,在此做一下配置的记录 加载jar包和properities配置文件             将commons-logging.jar和logging-lo ...

  10. P2P之UDP穿透NAT原理

    首先先介绍一些基本概念:             NAT(Network   Address   Translators),网络地址转换:网络地址转换是在IP地址日益缺乏的情况下产生的,它的主要目的就 ...