选择什么教材来学习C语言?

上一篇文章我们讲到C语言的发明人丹尼斯·里奇(Dennis Ritchie),他于1972年左右发明了C语言,C语言里的时间/日期计算起点,有个unix timestamp(unix 时间戳)是 Jan 1, 1970 UTC。即 1970年1月1日,是UNIX元年。

C原因发明至今接近50年了,达到了知天命的年龄了。大家想想,你10年前使用的产品到现在还在用的能有多少呢?在高速发展的计算机领域,发展速度更是惊人,你之前经常浏览的网站、玩过的游戏能坚持10年的有多少呢?大家回头再看看C语言,在2019年7月的计算机语言排行榜上,50岁的C语言高居第2名!

时间、流行度已经充分证明了C语言的生命力!大学大一新生一般都开设C语言的课程,选用的教材一般是谭浩强先生的,见下图:

红色的书皮、1400万册的发行量充分证明了它的使用率。但大家在知乎等上搜索这本教材,会发现怨言颇多(这里并没有对谭浩强先生表示不敬的意思),吐槽书中表述和程序错误颇多,最主要大家认为该书过于讲授语言的知识,而不是编程的快乐,以及用编程来解决实际问题的能力!

那如果让我来推荐一本学习C语言的教材,我会推荐本文要介绍的人物布莱恩·克尼汉和C语言发明人丹尼斯·里奇共同撰写的《C程序设计语言》!这里绝不是打广告。

首先这本书很短小,288页而已,不会有太大的心理负担。抛掉不用的chapter 1和8,另外有时chapter 6 structures因为课时问题也会不讲,最多也就120-140来页,一点阅读负担都没有。另外,两位作者都善于写“教科书”,语言简洁清爽,解释却很清楚和规范。作为C的创造者和同时拥有丰富的开发经历(他们也是Unix的开发者),他们给出的建议和选择的风格,都是非常有指导性。作为初学者,学规范的东西无疑是最为正确的选择。这里的规范,不仅仅是基本的代码形式上的规范。学了坏习惯再改总是一件困难的事情。

K&R

起初,C语言没有官方标准。1978年贝尔实验室正式发表了C语言。布莱恩·克尼汉(Brian Kernighan)和丹尼斯·里奇(Dennis Ritchie)出版了《The C Programming Language》。这本书被 C语言开发者们称为K&R,很多年来被当作 C语言的非正式的标准说明。人们称这个版本的 C语言为K&R C。至此,布莱恩·克尼汉(Brian Kernighan)和丹尼斯·里奇(Dennis Ritchie)两人简称K&R。

布莱恩·克尼汉

布莱恩·克尼汉在1942年出生在加拿大多伦多,他在普林斯顿大学取得了电气工程的博士学位,2000年之后取得普林斯顿大学计算机科学的教授教职。

他与Shen Lin合作共同完成了两个知名的NP-complete优化问题的解决方案:图划分问题和旅行推销员问题。旅行推销员问题(Travelling Salesman Problem, 又称为旅行商问题、货郎担问题、TSP问题)是一个多局部最优的最优化问题:有n个城市,一个推销员要从其中某一个城市出发,唯一走遍所有的城市,再回到他出发的城市,求最短的路线。

布莱恩·克尼汉除了和丹尼斯·里奇撰写了《C程序设计语言》之外,还撰写了《UNIX编程环境》,这本书对UNIX操作系统的编程环境做了详细而深入的讨论,内容包括UNIX的文件系统、Shell、过滤程序、I/O编程、系统调用等,并对UNIX中的程序开发方法做了有针对性的指导。

布莱恩·克尼汉在普林斯顿大学为非计算机专业学生开设了一门介绍计算机技术基础的课程,根据课程讲义编写《D is for digital》——中文译名《世界是数字的》。书中解释了当今计算和通信领域的工作方式,包括硬件、软件、因特网等,讨论了新技术带来的社会、政治和法律问题。

AWK

awk是由Alfred Aho 、Peter Weinberger和Brian Kernighan这三个人创造的,awk由这个三个人的姓氏的首个字母组成。

awk早期是在unix上实现的,所以,我们现在在linux的所使用的awk其实是gawk,也就是GNU awk,简称为gawk,awk还有一个版本,New awk,简称为nawk,但是linux中最常用的还是gawk。

awk其实是一门编程语言,它支持条件判断、数组、循环等功能。所以,我们也可以把awk理解成一个脚本语言解释器。可以利用awk命令,将一些文本整理成我们想要的样子,比如把一些文本整理成“表”的样子,然后再展示出来。

grep 、sed、awk被称为linux中的“三剑客”。总结一下这三个“剑客”的特长:

grep:更适合单纯的查找或匹配文本

sed:更适合编辑匹配到的文本

awk:更适合格式化文本,对文本进行较复杂格式处理

以下就是awk程序的示例:

c语言编译器 控制unix 故事,互联网发展史人物篇:布莱恩·克尼汉(Brian Kernighan)——Unix和C语言背后的巨人...相关推荐

  1. 克尼汉的c程序设计语言,c程序设计语言 英文版

    ????<经典原版书库:C程序设计语言>(英文版)(第2版)第1版中介绍的C语言成为后来广泛使用的C语言版本--标准C的基础.人们熟知的"hello,World\\\程序就是由& ...

  2. win7c语言编译器死机,win7 死机_电脑在装win7的时候,到了选择语言这里会死机呢?......

    win7系统电脑经常卡死死机怎么样解决 1.在出现卡屏死机时按下Ctrl+Alt+Delete三个键; 2.在弹出的界面中点击"任务管理器"; 3.点击"文件" ...

  3. c程序设计语言克尼汉,《C程序设计语言(第2版新版)典藏版》 —3.4 switch语句...

    3.4   switch语句 switch语句是一种多路判定语句,它测试表达式是否与一些常量整数值中的某一个值匹配,并执行相应的分支动作. switch(表达式){ case 常量表达式:语句序列 c ...

  4. 初学者-C语言基础练习(一)——安装C语言编译器

    C语言是国际上广泛流行的计算机高级语言. C语言又是一种用途广泛.功能强大.使用灵活的过程性编程语言,既可用于编写应用软件,又能用于编写系统软件. 废话不多说,直接开始今天的主题 初学者我这里还是建议 ...

  5. 啊哈c语言编译器v3.0

    一款用于c语言编译的应用软件,啊哈c语言编译器电脑版支持语法高亮.代码折叠.编译错误提示等功能,啊哈c语言编译器还可以支持代码字体大小调节.换肤等功能,非常适合C语言学习入门使用. http://kk ...

  6. 计算机大佬Brian Kernighan的新书《UNIX传奇》带你了解UNIX的前世今生

    UNIX传奇:历史与回忆 UNIX诞生的见证者 Brian W. Kernighan 带你看懂UNIX操作系统发展史 探寻9项诺贝尔奖+4项图灵奖的传奇起源 50年历史文化,120位天才人物 写给对U ...

  7. Unix波澜壮阔的发展史

    先前的一个理想 UNIX系统自 1969 年 Ken ThompsonKen Thompson 与 Dennis RitchieDennis Ritchie 在美国贝尔电话实验室(Bell Telep ...

  8. 网络安全04_互联网发展史_网线+网卡+协议栈_中继器_集线器_网桥_路由器_AC/AP_防火墙_流控_家庭网络_小型创业公司网络_园区网_政务网络_数据中心网络拓扑_电信网/互联网_Mac地址

    互联网发展史 如何将两个主机连接起来? 在网络诞生之前,电脑都是单机运行,没有网卡,没有网线,没有协议栈,数据传输主要靠软盘.光盘等介质. 网线+网卡+协议栈 网线:物理介质,承载比特流/电信号(类似 ...

  9. python微控制器编程从零开始-单片机可以使用Python语言来控制了!

    告诉广大Python爱好者一个好消息,单片机可以使用Python语言来控制了. Arudino虽然在开源硬件领域非常流行,但是对于不懂C/C++编程语言的玩家来说,还是需要一段学习时间. Damien ...

最新文章

  1. Java 根据comboBox选择结果显示JTable
  2. python删除空文件夹
  3. [原创]SQL 表值函数:获取从今天计算起往前自定义天数
  4. JavaScript Dom编程艺术
  5. 计算机的网络与结构,计算机结构与组成29-网络.ppt
  6. Ant 简单示例+环境变量配置说明
  7. python截图直接在内存里调用_Python-按块上传FTP中的内存文件(由API调用生...
  8. java xml binding_JAXB(Java Architecture for XML Binding)
  9. 机器学习:用梯度下降法实现线性回归
  10. 做数据分析已经会Excel了,还要学Python吗?
  11. AMQ学习笔记 - 16. 确认机制的测试
  12. Springboot2.X + screw数据库快速开发文档
  13. 联想服务器查看运行状态,服务器硬件批量监控工具
  14. 如何真正理解三极管饱和 放大的含义 (必收藏)
  15. 怎样在LaTeX中方便输入带圆圈的数字
  16. fiddler抓包教程
  17. D3js-中国各主要大城市经纬度数据
  18. 弹性地基梁板的计算理论_弹性地基梁的计算方法是什么?
  19. ROS订阅/cmd_vel话题,转化成移动机器人左右轮的转速
  20. mysql 取top 10_我的mysql如何分组取top10?

热门文章

  1. BAPI创建CLASS和CHARACTERISTICS
  2. 华润MMX链上云的简介
  3. 来不及细说,毕业三天靠Python兼职赚了两千
  4. 按键精灵使用乐玩插件
  5. 杭电2017单人排位赛2-B魔法宝石
  6. Socket中send()函数和recv()函数详解
  7. No matching version found for @soda/friendly-errors-webpack-plugin@1.8.0.
  8. 采药(c语言贪心算法)
  9. 网上下的--ARM入门笔记
  10. 天高任鸟飞,在你还苦闷Android出路时,总有人在系统钻研为高级开发做准备