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. 深入理解Objective-C:优化你的代码

    开篇 只要用到Objective-C,我们每天都会跟方法调用打交道.我们都知道Objective-C的方法决议是动态的,但是在底层一个方法究竟是怎么找到的,方法缓存又是怎么运作的却鲜为人知. 本文主要 ...

  2. final、抽象类、接口、多态、

       final———最终.作为一个修饰符 可以修饰类. 函数. 变量: 被final修饰的类不可以被继承: 被final修饰的方法不可以被重写: 被final修饰的变量只能够被赋值一次,既可以修饰成 ...

  3. 【学习】ABAP OLE 对EXCEL的处理

    原文:http://blog.sina.com.cn/s/blog_7229b9c00100opx2.html -------------------------------------------- ...

  4. (转)自适应网页设计(或称为响应式web设计)(Responsive Web Design)

    随着3G的普及,越来越多的人使用手机上网. 移动设备正超过桌面设备,成为访问互联网的最常见终端.于是,网页设计师不得不面对一个难题:如何才能在不同大小的设备上呈现同样的网页? 手机的屏幕比较小,宽度通 ...

  5. Ajax-$.ajax()方法详解

    jquery中的ajax方法参数总是记不住,这里记录一下. 1.url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. 2.type: 要求为String类型的参数,请求方式(p ...

  6. http://poj.org/problem?id=2253

    floyd的应用求每条路径两点之间最大距离的最小值 #include <iostream> #include <cstdio> #include <algorithm&g ...

  7. mongodb 学习笔记 09 -- shard分片

    概述 shard 分片 就是 把不同的数据分在不同的server 模型 当中:     用户对mongodb的操作都是向mongs请求的     configsvr 用于保存,某条数据保存在哪个sha ...

  8. A Cross-Platform Memory Leak Detector

    Memory leakage has been a permanent annoyance for C/C++ programmers. Under MSVC, one useful feature ...

  9. request对象

    Servlet三大域对象的应用 request.session.application(ServletContext) 请求转发器: public void doGet(HttpServletRequ ...

  10. json <--->List集合,实体类 之间的相互转换

    json所依赖的jar包http://files.cnblogs.com/files/wenjie123/json_jar%E5%8C%85.rar package com.hp.svse; impo ...