文章吧-经典好文章在线阅读:《C程序设计(第四版)》的读后感10篇

当前的位置:文章吧 > 经典文章 > 读后感 >

《C程序设计(第四版)》的读后感10篇

2022-05-24 02:06:15 来源:文章吧 阅读:载入中…

《C程序设计(第四版)》的读后感10篇

  《C程序设计(第四版)》是一本由谭浩强著作,清华大学出版社出版的平装图书,本书定价:33.00元,页数:390,文章吧小编精心整理的一些读者的读后感,希望对大家能有帮助。

  《C程序设计(第四版)》读后感(一):转投'Bible'怀抱

  也许是因为这不是入门的第一本书吧,在看了本校使用的人民邮电出版社的教材之后对这本颇有好感,相对而言不是冗长的在罗列各种关键字、标识符,引例中规中矩。但可能真像某大神所说,这本书只是应是教育的产物罢了,手上有林老师传下来的广泛承认的C的“圣经”,虽然没有很多时间去啃但翻了几页之后能明显感觉到这本二百页的小小书的强大。被两本国内教材摧残过,也领教了和高等数学教材烂大街相同处境的程序设计教材与其编者们不得不为了销量而“辛勤耕耘”以致一次又一次地把一群又一群本身使用计算机就有障碍还不得不把教材配套习题一个字母一个字母誊到计算机上按Ctrl+F5被警告 1 error(s)然后拿起教材一个字符一个字符校对在校对了n遍之后编译仍不成功索性把大段的代码扔下回去继续刷微博校内的同学们弄的疯掉。不管怎么说,感谢老谭,我终于可以去看圣经了。

  《C程序设计(第四版)》读后感(二):《C程序设计》(第四版)点评——第1章 程序设计和C语言

  第1章 程序设计和C语言

  首先看一下目录

  【 第1章 程序设计和C语言

  1.1 什么是计算机程序

  1.2 什么是计算机语言

  1.3 C语言的发展及其特点

  1.4 最简单的C程序设计

  1.4.1 最简单的C语言程序举例

  1.4.2 C语言程序的结构

  1.5 运行C程序的步骤和方法

  1.6 程序设计的任务 】

  从这个目录看,内容安排基本是合理的,除了个别标题不通,比如“运行C程序的步骤和方法”,实际上应该是“C程序开发的步骤”,再有“程序设计的任务”则基本上是文不对题 。

  常识性的错误以及信口开河很多,比如:

  【计算机发展的初期,一般计算机的指令长度为16,】

  不晓得作者把什么时代算做“计算机发展的初期”

  【C99建议把main函数指定为int型(整型)】

  其实是C89标准的规定,作者大概是为此书以前版本中充斥的void main自找台阶下

  【1983年,美国国家标准协会(ANSI)成立了一个委员会,根据C语言问世以来各种版本对C语言的发展和扩充,制定了第一个C语言标准草案(‘83 ANSI C)】

  曾经的子虚乌有的“87 ANSI C”不见了,很好。但这个‘83 ANSI C是哪来的呢?

  【C语言的运算符包含的范围很广泛,共有34种运算符(见附录C)。】

  这个恐怕要麻烦作者自己去亲自数数了。34种究竟是怎么数出来的呢?再说附录C也不是关于运算符的啊

  【C 语言把括号、赋值和强制类型转换等都作为运算符处理,从而使C语言的运算类型极其丰富,表达式类型多样化。】

  怎么就“从而使”了呢?哪来的这种因果关系?

  “运算类型极其丰富”应该是“运算种类极其丰富”

  “表达式类型多样化”,不知所云

  【例如,整型量与字符型数据以及逻辑型数据可以通用。】

  这是对初学者很严重的误导。另外“量”与“数据”并列,从小学生作文的角度也是说不过去的

  【C语言……是成功的系统描述语言……】

  请问是描述什么“系统”?如何“描述”?

  【而且C 编译系统在新的系统上运行时,可以直接编译“标准链接库”中的大部分功能,不需要修改源代码,因为标准链接库是用可移植的C语言写的。】

  C编译系统在新的系统上运行:估计作者在linux下成功地运行了他的VC6

  可移植的C语言:说实话,没见过这种C语言

  可以直接编译“标准链接库”中的大部分功能:看不懂这是说什么哪

  【在main函数中,在执行的最后设置一个“return 0;”语句。当主函数正常结束时,得到的函数值为0,当执行main函数过程中出现异常或错误时,函数值为一个非0的整数。】

  写了“return 0;”居然还可能得到“一个非0的整数”?太神奇了吧

  【C语言是完全模块化和结构化的语言。】

  什么叫“完全模块化”?什么叫完全结构化?这两个概念的定义是什么?

  【printf("sum is %dn", sum);……在执行printf函数时,将sum变量的值(以十进制整数表示)取代双撇号中的%d。】

  “执行printf函数”:怎么读怎么别扭,应该是调用printf函数

  “将sum变量的值(以十进制整数表示)取代双撇号中的%d”:变量的“值”是取代不了%d的

  “C语言程序的结构”这一小节下面的小标题是

  【1.4.2 C语言程序的结构

  (1) 一个程序由一个或多个源程序文件组成。

  (2) 函数是C语言的主要组成部分。

  (3) 一个函数包括两个部分

  (4) 程序总是从main函数开始执行的

  (5) 程序中对计算机的操作是由函数中的C语句完成的。

  (6) 在每个数据声明和语句的最后必须有一个分号。

  (7) C语言本身不提供输入输出语句。

  (8) 程序应当包括注释。】

  仔细回味一下,很有喜感。

  即使当作小学生作文,恐怕也不合格吧

  “C语言程序的结构”与“C语言本身”提“不提供输入输出语句”有什么关系呢?完全是八杆子打不着的么

  【1.5 运行C程序的步骤与方法】

  这一小节讲的实际上是用C语言开发程序的过程与步骤(编辑、编译、链接及运行)

  从内容上看,标题文不对题

  这一小节的重大疏失是

  只讲了编译和运行时发现错误应该返回修改源程序

  但对链接时可能也会发生错误却只字未提

  事实上链接错误也是编程最常见的错误之一

  对这样常见的一大类错误怎么可以忽视呢

  语言罗嗦和概念不清的毛病在这一小节同样存在

  譬如

  【(1)上机输入和编辑源程序。通过键盘向计算机输入程序,……】

  什么叫“通过键盘向计算机输入程序”?难道这不属于“编辑”的范畴吗?

  试问作者,“输入“和”编辑”之间的区分到底应该如何界定?

  【1.6 程序设计的任务】

  这是第一章最糟糕的一个小节

  首先是文不对题

  程序设计的任务只能是解决问题,不可能是别的什么

  但这一小节的内容其实是对完整的程序设计过程和步骤的描述

  如果仅仅如此

  问题并不严重

  可是书中对完整的程序设计过程和步骤的描述居然是

  【从确定问题到最后完成任务,一般经历以下几个工作阶段:

  (1)问题分析。……

  (2)设计算法。……

  (3)编写程序。……

  (4)对源程序进行编辑、编译和连接。……

  (5)运行程序,分析结果。……

  (6)编写文档。……】

  这种“谭式”工作流程几乎是置几十年来人类程序设计的经验和思考于不顾,全然自创的

  说实话,我倒更希望作者的这一小节能找本象样的书抄一抄,因为那样至少不会荒谬的如此离谱

  首先,轻飘飘的一句“从确定问题到最后完成任务”

  把确定问题当成了轻而易举的一件事

  事实上除了判断一个正整数是否是素数这样的问题

  “确定问题”的难度常常并不亚于解决问题

  其次,作者的“问题分析”居然是

  【对于接手的任务要进行认真的分析,研究所给定的条件,分析最后应该到达的目标,找出解决问题的规律,选择解题的方法。在此过程中可以忽律一些次要的因素,使问题抽象化,例如用数学式子表示问题的内在特性。这就是建立模型。】

  我的印象,这不过是中学数学解题方法与数据建模方法的一种杂交而已,不伦不类四不象。

  “对于接手的任务要进行认真的分析,研究所给定的条件”:空对空的废话

  “分析最后应该到达的目标”,目标都不明就编程?

  “找出解决问题的规律,选择解题的方法”,耳熟,很有亲切感。后来想起来中学数学老师总这么说

  “在此过程中可以忽律一些次要的因素”:从胆量方面来说不得不赞一个。复杂的东西都退给客户好了

  “使问题抽象化”:不知所云

  “用数学式子表示问题的内在特性”,软件设计解决的问题有几个有数学式子?

  “这就是建立模型”:不打自招,根本就不是在编程

  第三,“设计算法”中只字未提数据结构。作者是强调“算法—程序的灵魂”的,可惜他一点不懂什么叫数据结构。在作者的影响和带动下,经常看到一群整天把算法挂在嘴边但却连最基本的数据类型都搞不懂的家伙,根本就不能指望他们能懂得数据结构,更不能指望他们会程序设计。

  第四,(3)的“编写程序”和(4)的“对源程序进行编辑”到底有什么分别

  第五,(6)编写文档。程序开发完了,终于想起来“文档” 了。任何一个软件工程专业的二年级本科生都能指出为什么这很荒谬。更荒谬的是,在作者那里,“文档”居然不过是“程序说明书”、“帮助(help)”或 “readme”。

  这一章的习题也很糟糕

  【习题 6.编写一个C程序,输入a,b,c三个值,输出其中最大者。】

  这道题不具备程序设计习题的最基本要求,是错误的题目。没有人可以做出这种题目。这反映了作者对软件开发基本上一窍不通!

  《C程序设计(第四版)》读后感(三):根据该书中的大量错误写出的书

  《品悟C——抛弃C程序中的谬误与恶习》

  其中讲解的错误90%以上都来自于这本《C程序设计》

  希望《品悟C》能帮助初学者们摆脱《C程序设计》中的种种谬误及编程恶习。

  《品悟C》分为两部分:上部形而下学讲述的主要是代码方面的错误,下部形而上学讲述的是关于C语言的各种错误概念。

  《品悟C》在当当已经开始预售

  《C程序设计(第四版)》读后感(四):第二章 算法——程序的灵魂

  【第二章 算法——程序的灵魂】

  这一章总的来说就如同阑尾,而且是发炎的阑尾。

  首先映入眼帘让人感到眼前一亮的是

  【著名计算机科学家沃思(Nikiklause Wirth)……】

  又来了。有人做过实验,google Nikiklause Wirth搜来的全是中文网页。不要问我为什么,只有智商约等于0的人才会问这样的问题。

  由此可见,垃圾也是会疯狂地繁殖的。有人总喜欢沾沾自喜地拿“1100万”说事儿, 我倒想问一句,“1100万”个错误是个什么概念,“1100万”堆垃圾又会造成多大的污染。

  对于 Wirth 提出的

  算法+数据结构=程序

  老谭评论道:

  【直到今天,这个公式对于过程化程序来说依然是适用的。】

  没有任何理由和依据,而敢于指责大师的公式具有局限性,不能不承认谭大师很有“勇气”。

  接着,老谭提出

  【实际上,一个过程化的程序除了以上两个主要因素之外,还应当采用结构化程序设计方法进行程序设计,并且用某一种计算机语言表示。因此,算法、数据结构、程序设计方法和语言工具4个方面是一个程序设计人员所应具备的知识,在设计一个程序时要综合运用这几方面的知识。】

  感慨:大师总是一针见骨地道出事物的本质;“伪大师”总是点金成铁狗尾续貂并且把水搅混。不妨再续狗尾:小学数学也是“程序设计人员所应具备的知识”。

  【2.1 什么是算法】

  本小节前半部分介绍什么是算法,后半部分讨论了数值算法与非数值算法。主要毛病在后半部分。

  后半部分实际上毫无必要;“数值运算算法”和“非数值运算算法”属于作者闭门造车自创的不规范用语(估计是不怎么读文献所导致);

  【对各种数值运算都有比较成熟的算法可供使用】

  乃极其武断的信口开河,表明作者对数值计算领域惊人的无知。无知不是过错,但对自己无知的领域随心妄断,是对读者的大不敬

  【2.2 简单的算法举例】

  这一小节读起来犹如嚼棉花的感觉,只好快些扫过。

  【例 2.1】

  …【由于计算机是高速运算的自动机器,实现循环是轻而易举的……】

  脑残是怎样炼成的,这种似是而非的“由于”句型功不可没。“循环”居然是由于“高速”,咄咄怪事。

  【例 2.3】

  …【从图2.1可以看出:“其他”这一部分,包括不能被4整除的年份,以及能被4整除,又能被100整除,但不能被400整除的那些年份(如1900 年),它们都是非闰年。】

  敢问大师有没有亲自看过?要是看过的话,我们可就知道什么叫睁着眼睛胡说了

  【例 2.4】

  其中描述的算法必然导致拖泥带水的代码。

  【例 2.5】……

  【所谓素数(prime),是指除了1和该数本身之外,不能被其他任何整数整除的数】

  厉害!把素数的定义都给改了,数学家们该感到汗颜了吧。

  【判断一个数n(n≥3)是否为素数……】

  【实际上,n不必被2~n-1的整数除,只须被2~n/2间的整数除即可,甚至只须被2~n之间的整数除既可。例如,判断13是否为素数,只须将13被 2,3除即可,如都除不尽,n必为素数。】

  2~n/2 , 2~n 这两个区间到底哪个大啊?怎么后者竟然成了“甚至” 了呢

  【

  2.3 算法的特性

  ……

  (2)确定性。算法中的每一个步骤都应当是确定的,而不不应当是含糊的、模棱两可的。…… 也就是说,算法的含义应当是唯一的,而不应当产生“歧义性”。所谓“歧义性”,是指可以被理解为两种(或多种)的可能含义。

  】

  ====================================

  用老谭自己的矛攻一下他自己的盾

  本章后面的习题

  【4-(3)有3个数a,b,c,要求输出其中最大的数。】

  这个题目本身是否“含糊”,是否具有“歧义性”?

  问题本身就“模棱两可”,又何谈算法的“确定性”呢?

  【

  2.4 怎样表示一个算法

  流程图是用一些图框来表示各种操作。用图形表示算法,直观形象,易于理解。美国国家标准化委员会 ANSI(American National Standard Institute)规定了一些常用的流程图符号(见图2.3),已为世界各国程序工作者普遍采用。

  】

  首先ANSI是 American National Standards Institute.

  其次,老谭把ANSI搬出来是无知的卖弄。理由是:

  这个标准有ISO版本,ANSI采纳了这个ISO标准。而且对应于ISO标准,我国有自己的GB。这些标准的内容是一致的。老谭不谈GB,不谈ISO,却舍近求远地搬出了ANSI,又有什么特殊的理由呢?只能说他自己并不熟悉这些标准及其相互的关系。

  而且书中的流程图根本不符合无论是ISO标准还是GB还是ANSI标准,流线乱窜,甚至全书中压根就没有标准用来表示循环的基本图形。

  既然连这些标准读都没读过,把ANSI搬出来不是唬人又能是什么呢?

  【 2.三种基本结构

  1966年,Bohra和Jacopini提出了以下3种基本结构,用这3种基本结构作为表示一个良好算法的基本单元。】

  首先把Böhm的名字错误地写成了Bohra。

  其次更严重的是Böhm和Jacopini根本就没有提出什么3种基本结构,更没有提出“用这3种基本结构作为表示一个良好算法的基本单元”。3种基本结构在之前的高级语言中普遍存在。

  öhm和 Jacopini仅仅不很严格地证实了向前的goto语句可以用其他语句实现,他们的论文发表的时候,Dijkstra反对goto语句的论文(1968)还没发表呢

  【 2.4.4用N-S流程图表示算法】

  -S图废除了流线,哪里还是什么“流程图”?

  事实上通用的说法是Nassi– Shneiderman diagram (NSD)

  有什么必要自己创造一个不通的概念呢

  【例2.15 ……

  图2.31】

  图2.31的算法其蠢无比

  明明一次循环就可以解决非要用两次循环

  明明一个变量就可以解决非要用一个数组

  而且那个50基本没有用处

  因为可以轻易写出人数为一正整数时的算法

  三鹿往奶粉里掺加大量三聚氰胺使婴儿身体受到摧残而被判刑

  老谭往教科书里掺加的无知、错误和愚蠢使初学者大脑变残为什么不被判刑?

  我看刑法应该参照食品卫生法考虑一下这个问题

  在教科书中传播愚蠢败坏民族的智力难道不是犯罪?

  【2.4.5 用伪代码表示算法】

  两道例题都是用for循环可以很漂亮完成

  却莫名其妙的选择了用罗嗦的while循环描述

  【2.4.6 用计算机语言表示算法

  ……用计算机语言表示的算法是计算机能够执行的算法。】

  胡扯,计算机能够执行只有机器语言。

  【例 2.19……

  double deno=2.0,sum,term;

  while(deno<=100)

  {

  ……

  }

  】

  明显的错误,缺乏最基本的编程素质

  【2.5 结构化程序设计方法

  ……关键是算法,有了正确的算法,用任何语言进行编码都不是什么困难的事情。】

  这种对算法的片面强调是对初学者绝对的误导。误导的结果是,许多初学者往往只会用最拙劣数据结构绞尽脑汁地苦思复杂无比的“算法”。

  这段话另外的一个误导是,有经验的人都知道,即使懂得了算法,学习用另一种语言编程往往也不是那么容易的事,比如C++。

评价:

[匿名评论]登录注册

评论加载中……