踢爆IT劣书出版黑幕——由清华大学出版社之《C语言入门很简单》想到的(2)

前文连接:踢爆IT劣书出版黑幕——由清华大学出版社之《C语言入门很简单》想到的(1)html

目录

  只凭前言评价一本书,想必难以服人。程序员

  所以,讲完前言中的“做者”的奥秘,下面再从技术角度来说一下这本书的目录。算法

  目录是一本书的骨架,基本能肯定一本书的好坏。目录好,书通常怎么也不会写得太差,差也是细节的问题;目录差,一本书不管如何也写很差。这就跟盖房子的道理同样,你搭了一个猪圈的架子,永远不可能建起一座别墅。编程

  《C语言入门很简单》这本书的目录以下:数组

第1篇 一切从基础开始
   第1章 概述
      1.1 c语言简介
         1.1.1 c语言的位置
         1.1.2 c语言的优缺点
         1.1.3 c适合什么开发
      1.2 c语言的开发环境
         1.2.1 编辑器、编译器和连接器
         1.2.2 集成开发环境
      1.3 visual studio使用简介
         1.3.1 visual studio版本
         1.3.2 visual studio的安装
         1.3.3 新建项目
         1.3.4 编写代码
         1.3.5 编译连接
         1.3.6 运行可执行程序
      1.4 如何学好c语言
      1.5 小结
      1.6 习题
   第2章 开始c语言之旅
      2.1 为何要写代码
         2.1.1 为何要写程序
         2.1.2 从本书开始学编程
         2.1.3 从一个现实的例子开始
      2.2 编程的核心——数据
         2.2.1 数据从哪里来
         2.2.2 数据的表示
         2.2.3 数据类型面面观——精度和范围
         2.2.4 c语言基本数据类型
         2.2.5 数据的变与不变——变量、常量
      2.3 使用变量和常量
         2.3.1 变量的使用
         2.3.2 命名的方式
         2.3.3 关键字
         2.3.4 常量的使用
      2.4 小结
      2.5 习题
第2篇 简单程序的构建
   第3章 简单数学运算
      3.1 什么是赋值
         3.1.1 赋值的做用——把数据存起来
         3.1.2 赋值运算的形式
         3.1.3 赋值表达式
         3.1.4 机动灵活的赋值——scanf()
         3.1.5 看看咱们的劳动成果——printf()
         3.1.6 赋值的重要性
      3.2 开始赋值——整型赋值
         3.2.1 整数在计算机中的表示——二进制
         3.2.2 更先进的表示方法——八进制和十六进制
         3.2.3 进制之间的转化——以二进制为桥梁
         3.2.4 给整型赋值
      3.3 浮点型赋值
         3.3.1 小数在计算机的表示
         3.3.2 给浮点型赋值
      3.4 字符型赋值
         3.4.1 字符在计算机中的表示——ascii
         3.4.2 给字符赋值
      3.5 类型转化
         3.5.1 什么是类型转换
         3.5.2 类型转换的利弊
         3.5.3 隐式类型转化和显示类型转换
         3.5.4 赋值中的类型转换
      3.6 基本数学运算
         3.6.1 数学运算和数学表达式
         3.6.2 商与余数
         3.6.3 位运算
         3.6.4 优先级的奥秘
         3.6.5 数学运算中的类型转换
      3.7 复合赋值运算
         3.7.1 复合赋值运算
         3.7.2 自增自减运算——特殊的复合赋值
         3.7.3 自增自减的使用
      3.8 小结
      3.9 习题
   第4章 程序结构
      4.1 语句和语句块
         4.1.1 简单语句
         4.1.2 语句块
      4.2 变量的做用域
         4.2.1 局部变量的声明定义位置规则
         4.2.2 局部变量的做用域规则
         4.2.3 嵌套语句块的同名变量做用域规则
      4.3 最多见的语句执行顺序——顺序结构
      4.4 判断结构
         4.4.1 判断的基础——逻辑真假
         4.4.2 基础的判断——关系运算
         4.4.3 复杂的判断——逻辑运算
      4.5 if判断结构
         4.5.1 基本if结构
         4.5.2 ifelse…结构
         4.5.3 另类的条件判断——?运算符的使用
         4.5.4 ifelse if…else结构
         4.5.5 嵌套的if结构
      4.6 switch判断结构
         4.6.1 switch基本结构
         4.6.2 果断结束——break的使用
      4.7 循环结构
         4.7.1 while循环结构
         4.7.2 for循环结构
         4.7.3 goto语句
         4.7.4 循环嵌套
         4.7.5 break和continue
      4.8 真正的程序——三种结构的揉和
      4.9 小结
      4.10 习题
第3篇 复杂数据的表示
   第5章 数组
      5.1 数组简介
         5.1.1 数组的用途
         5.1.2 数组变量的定义
      5.2 数组变量初始化和赋值
         5.2.1 数组的初始化
         5.2.2 数组的下标
         5.2.3 给数组赋值
         5.2.4 数组元素的引用
      5.3 二维数组
         5.3.1 数组的维
         5.3.2 二维数组表示和含义
         5.3.3 二维数组的初始化
         5.3.4 二维数组的赋值
         5.3.5 二维数组的引用
      5.4 多维数组
      5.4 小结
      5.5 习题
   第6章 字符的数组——字符串
      6.1 字符数组
         6.1.1 字符数组的表示
         6.1.2 字符数组的初始化
         6.1.3 字符数组的赋值和引用
      6.2 字符串
         6.2.1 字符串的c语言表示
         6.2.2 使用字符串为字符数组初始化
         6.2.3 字符串的保存形式
      6.3 字符串的输入输出——scanf和printf字符串
         6.3.1 输入输出字符串的c语言表示
         6.3.2 scanf()函数对字符串的特殊处理
      6.4 小结
      6.5 习题
   第7章 指针
      7.1 地址的概念
         7.1.1 地址的含义
         7.1.2 为何要用地址
         7.1.3 地址的表示与取址运算
      7.2 指针和指针变量
         7.2.1 指针的含义和用途
         7.2.2 指针类型
         7.2.3 指针变量的定义和使用
         7.2.4 void指针
      7.3 指针运算
         7.3.1 取指针元素
         7.3.2 指针的自加自减
         7.3.3 指针的类型转换
      7.4 数组和指针
         7.4.1 数组名也是指针
         7.4.2 数组名是指针常量
         7.4.3 使用数组名访问数组元素
         7.4.4 三种访问数组元素的方法
         7.4.5 数组指针和指针数组
      7.5 多重指针和多维数组
         7.5.1 多重指针
         7.5.2 取多重指针元素运算
         7.5.3 多维数组名和各维元素
         7.5.4 使用指针访问多维数组
      7.6 字符串和指针
         7.6.1 字符指针
         7.6.2 字符指针和字符串
         7.6.3 scanf()、printf()函数和字符指针
      7.7 小结
      7.8 习题
   第8章 结构体
      8.1 结构体的含义
      8.2 结构体类型的表示
         8.2.1 结构体类型的通常格式
         8.2.2 结构体的成员变量
         8.2.3 复杂的结构体
      8.3 结构体变量
         8.3.1 结构体变量的声明定义
         8.3.2 结构体变量初始化
         8.3.3 取结构体成员运算
      8.4 结构体数组
      8.5 结构体指针
         8.5.1 一重结构体指针
         8.5.2 使用结构体指针取结构体数据
         8.5.3 结构体指针例子
      8.6 回到问题
      8.7 小结
      8.8 习题
   第9章 共同体类型
      9.1 共同体的含义与表示
         9.1.1 共同体的用途
         9.1.2 共同体的表示
         9.1.3 复杂的共同体
      9.2 共同体变量
         9.2.1 共同体变量
         9.2.2 共同体成员变量的相互覆盖
         9.2.3 使用共同体变量
      9.3 共同体数组
      9.4 共同体的指针
         9.4.1 一重共同体指针类型
         9.4.2 共同体指针变量
         9.4.3 完整的例子
      9.5 小结
      9.6 习题
   第10章 枚举类型
      10.1 枚举类型的含义与表示
         10.1.1 枚举类型的含义
         10.1.2 枚举类型的表示
      10.2 枚举常量和枚举变量
         10.2.1 枚举常量
         10.2.2 枚举变量的定义
         10.2.3 枚举变量的使用
      10.3 枚举数组和指针
         10.3.1 枚举数组
         10.3.2 枚举指针
         10.3.3 用枚举指针来访问枚举数组
      10.4 typedef类型定义符
         10.5 小结
         10.6 习题
第4篇 复杂功能的实现
   第11章 函数
      11.1 函数的意义
      11.2 函数的形式
         11.2.1 函数的通常形式
         11.2.2 函数的参数列表
         11.2.3 函数的返回值类型
      11.3 函数声明和定义
         11.3.1 函数的声明
         11.3.2 函数的定义形式
         11.3.3 函数的形参
         11.3.4 return返回值语句
      11.4 本身动手写一个函数——加法函数
         11.4.1 肯定加法函数的样子
         11.4.2 实现加法函数体
         11.4.3 完整的加法函数定义
      11.5 函数调用
         11.5.1 函数的调用做用
         11.5.2 函数调用表达式
         11.5.3 函数的实参
         11.5.4 简单函数的调用
      11.6 复杂参数
         11.6.1 数组参数
         11.6.2 指针参数
         11.6.3 结构体、共同体和枚举参数
      11.7 小结
      11.8 习题
   第12章 特殊的函数——main()函数
      12.1 main()函数的做用
      12.2 main()函数的声明定义
         12.2.1 main()函数的声明形式
         12.2.2 main()函数的参数
         12.2.3 main()函数的返回值
      12.3 小结
      12.4 习题
   第13章 局部变量和全局变量
      13.1 变量的做用域和生命周期
      13.2 函数内的局部变量
         13.2.1 局部变量的做用域
         13.2.2 局部变量的生命周期
         13.2.3 局部变量的覆盖做用
      13.3 函数外的全局变量
         13.3.1 全局变量的做用域
         13.3.2 全局变量的生命周期
         13.3.3 局部变量对全局变量的覆盖做用
      13.4 变量修饰符
         13.4.1 使用修饰符改变变量的做用域和生命周期
         13.4.2 c语言中经常使用变量修饰符的做用
      13.5 小结
      13.6 习题
第5篇 c语言的高级内容
   第14章 预处理命令、文件包含
      14.1 预处理命令的做用
         14.1.1 程序预处理
         14.1.2 预处理命令
         14.1.3 c语言的几类预处理命令
      14.2 c语言中的宏定义
         14.2.1 c语言的宏定义形式
         14.2.2 不带参宏定义
         14.2.3 带参数的宏定义
      14.3 预编译控制
         14.3.1 c语言预编译控制
         14.3.2 三种预编译控制组合形式
         14.3.3 一个简单的例子
      14.4 文件包含
         14.4.1 头文件和源文件的文件名
         14.4.2 头文件和源文件的内容
      14.5 include包含头文件
         14.5.1 自定义头文件和系统头文件
         14.5.2 文件包含的两种形式
         14.5.3 完整的circle例子
         14.5.4 c语言中的标准头文件
      14.6 小结
      14.7 习题
   第15章 文件操做
      15.1 文件
         15.1.1 从新认识文件
         15.1.2 计算机眼里的文件
         15.1.3 开发人员能对文件干些什么
      15.2 文件的打开关闭
         15.2.1 文件指针
         15.2.2 文件打开函数
         15.2.3 文件关闭函数
      15.3 文件读写
         15.3.1 读写一个字符
         15.3.2 读写一个字符串
         15.3.3 读写一个数据块
      15.4 文件的其余操做
         15.4.1 随机读写文件
         15.4.2 出错检验
      15.5 小结
      15.6 习题
《C语言入门很简单》目录

  这个目录安排得如此的海立云垂、奇诡无比,绝对算得上是C语言书籍中荒诞派的表明做。其荒谬绝伦的程度使人惨不忍睹,有屎以来,前无来者。读过以后,顿感虎躯一震,三观俱覆。数据结构

  最奇葩之处就在于它在接近全书结束的第4篇的第11章才开始讲“函数”,而在此以前却在第8章已经早早地把结构体讲完了。dom

  初学者不可能知道这样有什么不妥,可是任何一个懂得程序设计(不必定是C语言)的人看到这些马上就会明白,这个做者绝对是一个外行,这样写给初学者的书绝对是在坑爹。编辑器

  为何呢?由于这不符合C语言的基本特色,也违背了程序设计的基本原则。你见太小学数学先讲小数再讲整数的吗?你见过没学过代数直接上微积分的吗?《C语言入门很简单》就是这种荒唐透顶的本末倒置的C语言版。谭浩强的书都不敢这么写。ide

  为何不能把函数放在结构体后面讲呢?由于在C语言中,若是不懂得函数的基本理论并能熟练构造、使用函数,结构体这种东西根本就没用!你必定要用,那就跟在炕上用挠炕席的方法学游泳同样。只有谭浩强那样的“大师”才会在程序中只写一个main()函数,同时又使用结构体。(参见 用驴子拖宝马——怎样滥用结构体 )仅此一点,就足以说明《C语言入门很简单》做者的编程水平连学得比较好的大一学生都不如,搞很差他的C编程就是跟老谭学出来的。函数

  函数必定要放在结构体前面讲,并且应该尽量地早讲。缘由是它很是重要。它是实现结构化程序设计思想最重要的手段,是组织代码最重要的利器(对不起,不是指针,指针是用来组织数据的)。

  Dijkstra当年说过,“一个有过 BASIC 编程经历的人是很难学会好的编程习惯的。做为一个潜在的程序员,他们已经被脑残而且没法修复。”(It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration.)

  Dijkstra为何要这样说?就是由于BASIC(当时的)根本就没有像样的现代意义的函数,函数调用是经过滥用全局变量实现的,整个程序是用一种傻逼精神完成的。Dijkstra实在看不下去这帮脑残的代码了,不得不跳出来大声疾呼。自此,人们才开始懂得什么叫作结构化程序设计。

  可是,由清华大学出版社在90年代初出版且至今仍在出版发行的的谭浩强的《C程序设计》及《习题解答》中,那种傻逼风格的代码却比比皆是。在谭浩强的书里即便在函数讲完以后,也处处都是一main()到底(参见 将main()进行到底  )或使用不合格的残疾函数的代码(参见 半身不遂和粗中有细 )。使这种傻逼风格如同中世纪的僵尸同样在天朝的教科书中满血复活,用一种“巨擘”和“大师”的装逼姿态,炫耀着呆逼的智商。缘由很简单,谭浩强根本不懂编程,他只会玩他那套BASIC垃圾写法(谭最先出名是他的BASIC书)。所为我曾说过,谭浩强的C根本不是ANSI-C而是BASI-C。

  让我惊奇万分的是这本《C语言入门很简单》居然能将这种傻逼风格的代码弄出了一个新的高潮——这货竟然把函数放在了几乎是最后才讲。真是长江后浪推前浪,一代更比一代翔啊!

  来看看正经人是如何写C语言书的。这里我用手边经常翻用的几本C语言书为例:

  先来看大师的经典——Brian W. KernighanDennis M. Ritchie《The C Programming Language》

Chapter 1. A Tutorial Introduction 
   1.1 Getting Started 
   1.2 Variables and Arithmetic Expressions 
   1.3 The For Statement 
   1.4 Symbolic Constants 
   1.5 Character Input and Output 
   1.6 Arrays 
   1.7 Functions 
   1.8 Arguments--Call by Value 
   1.9 Character Arrays 
   1.10 External Variables and Scope
Chapter 2. Types, Operators, and Expressions 
   2.1 Variable Names 
   2.2 Data Types and Sizes 
   2.3 Constants 
   2.4 Declarations 
   2.5 Arithmetic Operators 
   2.6 Relational and Logical Operators 
   2.7 Type Conversions 
   2.8 Increment and Decrement Operators 
   2.9 Bitwise Operators 
   2.10 Assignment Operators and Expressions 
   2.11 Conditional Expressions 
   2.12 Precedence and Order of Evaluation 
Chapter 3. Control Flow 
   3.1 Statements and Blocks 
   3.2 If-Else 
   3.3 Else-If 
   3.4 Switch 
   3.5 Loops--While and For 
   3.6 Loops-Do-while 
   3.7 Break and Continue 
   3.8 Goto and LabelsChapter 
4. Functions and Program Structure 
   4.1 Basics of Functions 
   4.2 Functions Returning Non-integers 
   4.3 External Variables 
   4.4 Scope Rules 
   4.5 Header Files 
   4.6 Static Variables 
   4.7 Register Variables 
   4.8 Block Structure 
   4.9 Initialization 
   4.10 Recursion 
   4.11 The C PreprocessorChapter 
5. Pointers and Arrays 
   5.1 Pointers and Addresses 
   5.2 Pointers and Function Arguments 
   5.3 Pointers and Arrays 
   5.4 Address Arithmetic 
   5.5 Character Pointers and Functions 
   5.6 Pointer Arrays; Pointers to Pointers 
   5.7 Multi-dimensional Arrays 
   5.8 Initialization of Pointer Arrays 
   5.9 Pointers vs. Multi-dimensional Arrays 
   5.10 Command-line Arguments 
   5.11 Pointers to Functions 
   5.12 Complicated DeclarationsChapter 
6. Structures 
   6.1 Basics of Structures 
   6.2 Structures and Functions 
   6.3 Arrays of Structures 
   6.4 Pointers to Structures 
   6.5 Self-referential Structures 
   6.6 Table Lookup 
   6.7 Typedef 
   6.8 Unions 
   6.9 Bit-fieldsChapter 
7. Input and Output 
   7.1 Standard Input and Output 
   7.2 Formatted Output--Printf 
   7.3 Variable-length Argument Lists 
   7.4 Formatted Input-Scanf 
   7.5 File Access 
   7.6 Error Handling--Stderr and Exit 
   7.7 Line Input and Output 
   7.8 Miscellaneous FunctionsChapter 
8. The UNIX System Interface 
   8.1 File Descriptors 
   8.2 Low Level I/O-Read and Write 
   8.3 Open, Creat, Close, Unlink 
   8.4 Random Access--Lscek 
   8.5 Example--An Implementation of Fopen and Getc 
   8.6 Example--Listing Directories 
   8.7 Example--A Storage Allocator
Appendix 
   A. Reference Marital 
   B. Standard Library 
《The C Programming Language》目录

  第一章就简略地提到了Functions,在讲完“Types, Operators, and Expressions”和“Control Flow”以后,马上就开始在第4章详细讲解“Functions”而且同时开始讲“Program Structure”。Structures是在后面的第6章才讲到。

  再看K. N. King《C Programming: A Modern Approach 》

《C Programming: A Modern Approach 》目录
1 INTRODUCING C 1
2 C Fundamentals 9 
3 Formatted Input/Output 37 
4 Expressions 53 
5 Selection Statements 73 
6 Loops 99 
7 Basic Types 125 
8 Arrays 161 
9 Functions 183 
10 Program Organization 219 
Advanced Features of C 
11 Pointers 241 
12 Pointers and Arrays 257 
13 Strings 277 
14 The Preprocessor 315 
15 Writing Large Programs 349 
16 Structures, Unions, and Enumerations 377 
17 Advanced Uses of Pointers 413 
18 Declarations 457 
19 Program Design 483 
20 Low-Level Programming 509 The Standard C Library 
21 The Standard Library 529 
22 Input/Output 539 
23 Library Support for Numbers and Character Data 589 
24 Error Handling 627 
25 International Features 641 
26 Miscellaneous Library Functions 677 
27 Additional C99 Support for Mathematics 705

  刚讲完Arrays就在第9章开始介绍Functions。而Structures是在后面的第16章才讲到。

  Kenneth A.Reek 《Pointers on C》  

 1 A Quick Start. 
 2 Basic Concepts. 
 3 Data. 
 4 Statements. 
 5 Operators and Expressions. 
 6 Pointers. 
 7 Function. 
 8 Arrays. 
 9 Strings, Characters, and Bytes. 
10 Structures and Unions. 
11 Dynamic Memory Allocation. 
12 Using Structures and Pointers. 
13 Advanced Pointer Topics. 
14 The Preprocessor. 
15 Input/Output Functions. 
16 Standard Library. 
17 Classic Abstract Data Types. 
《Pointers on C》目录

   刚讲完Pointers就在第7章开始讲Function。而Structures是在后面的第10章才讲到。

  再来看两本国内做者写的书。

  键盘农夫《狂人C:程序员入门必备》 

第1篇 理解程序设计 1

   第1章 基础知识 2
      1.1 什么是编程 3
      1.2 怎样用C语言编程 7
      1.3 printf()函数初步 13
      1.4 C语言的“字母”和“单词” 14
   
   第2章 数据类型 23
      2.1 什么是数据类型 24
      2.2 让程序记住计算结果——变量 31
      2.3 int类型——总结与补充 35
      2.4 对数据类型的进一步讨论 39
      2.5 莫名其妙的“整型” 45
      2.6 浮点类型 51
      2.7 数据类型与算法 57
      2.8 算法的特性 61
   
   第3章 运算符、表达式及语句 66
      3.1 C的“动词”及“动词”的“宾语” 67
      3.2 表达式——C语言的“词组” 67
      3.3 谁是谁的谁 71
      3.4 右值的类型转换 74
      3.5 语句的概念 81
      3.6 例题 84
      3.7 算法和数据结构初窥 88
      3.8 在程序运行时提供数据 90
   
   第4章 选择语句 95
      4.1 关系运算 96
      4.2 if语句 97
      4.3 判等运算 104
      4.4 表达复杂的条件 106
      4.5 if-else语句 107
      4.6 鸡肋——_Bool类型(C99) 109
      4.6 鸡肋——_B4.7判断三角形种类 111
      4.8 显得颇有学问的运算符 117
      4.9 大师如是说goto 118
      4.10 给程序更多选项——switch语句 119
      4.11 程序开发的过程 124
   
   第5章 从循环到穷举 130
      5.1 造句:当……就…… 131
      5.2 do-while语句 138
      5.3 for语句 140
      5.4 不规则的循环及对循环的修整 150
      5.5 循环的嵌套与穷举法 151
   
第2篇 结构化程序设计与简单的数据结构 161
   
   第6章 最复杂的运算符——“()” 162
      6.1 什么是函数 163
      6.2 步骤1:函数的声明 163
      6.3 步骤2:函数的定义 165
      6.4 步骤3:函数的调用 167
      6.5 程序的执行过程 168
      6.6 例题——为何使用函数 170
      6.7 使用函数小结 171
      6.8 函数与结构化程序设计 174
      6.9 变量的做用域 181
      6.10 递归 182
      6.11 对局部变量的进一步修饰 190
      6.12 使用库函数 193
      6.13 inline关键字(C99) 195
   
   第7章 做为类型说明符和运算符的“[]” 199
      7.1 使用数组 200
      7.2 深刻理解数组 202
      7.3 熟练应用一维数组 205
      7.4 数组名作实参 209
      7.5 多维数组 216
   
   第8章 结构体、共用体与位运算 228
      8.1 结构体 229
      8.2 C语言中复数类型的历史和现状 237
      8.3 共用体union 240
      8.4 位运算 242
      8.5 “小的变量”——位段 251
   
   第9章 指针 258
      9.1 指针是什么 259
      9.2 指向数据对象的指针 260
      9.3 指针的应用与误用 266
      9.4 指针与一维数组 270
      9.5 指针的应用(二) 279
      9.6 高维数组名 281
      9.7 变量长度数组——VLA(C99) 287
      9.8 数组类型的字面量(C99) 291
      9.9 指针与结构体 292
      9.10 指针与函数 294
      9.11 指向虚无的指针 298
      9.12 参数不肯定的函数 299
   
   第10章 字符串、字符数组及指向字符的指针 306
      10.1 字符串文字量 307
      10.2 字符串的输入与存储 309
      10.3 例题 310
      10.4 形参说明符“[]”里的修饰符(C99) 316
      10.5 经常使用的字符串函数 317
      10.6 main()的参数 320
      10.7 体现代码优美的数据类型——枚举类型 323
   
第3篇 复杂的数据结构、算法及其余话题 328
   
   第11章 复杂的数据类型与算法 329
      11.1 2 2 2 2 = 0 330
      11.2 复杂数据类型的构造和解读 331
      11.3 递归、穷举、回溯、排列 344
      11.4 更自由地使用内存 356
      11.5 typedef 364
   
   第12章 程序的输入与输出 369
      12.1 面向文件的输入与输出 370
      12.2 文卷、流、“FILE”及“FILE *” 380
      12.3 二进制文卷的读写 384
      12.4 定位问题 388
      12.5 制做素数表 389
   
   第13章 程序组织与编译预处理 394
      13.1 简介 395
      13.2 文件包含 396
      13.3 Tic-Tac-Toe游戏 397
      13.4 从新开始 409
      13.5 宏定义与宏替换 416
      13.6 使用外部变量 423
      13.7 走棋 427
      13.8 预处理命令的其余话题 439
   
   第14章 标准库简介 446
      14.1 使用标准库的一些常识 447
      14.2 对语言的补充 449
      14.3 stdio.h 452
      14.4 通用函数:stdlib.h 454
      14.5 inttypes.h(C99) 460
      14.6 string.h 462
      14.7 数值计算 462
      14.8 错误处理:errno.h 466
      14.9 断言与调试:assert.h 468
      14.10 非本地跳转setjmp.h 468
      14.11 信号处理signal.h 470
      14.12 time.h 471
      14.13 国际化问题 475
《狂人C:程序员入门必备》目录

   刚讲完语句在第二篇一开始的第6章立刻就讲解函数,而且刻意地强调了()是一种运算符。结构体到第8章才讲。 

  裘宗燕《从问题到程序:程序设计与C语言引论》

第一章,程序设计与C 语言。介绍程序与程序语言的概念,C 语言的发展及其特色。用
一个小例子介绍C 程序形式,其加工和执行。最后介绍程序设计与开发过程。

第二章,数据对象与计算。讨论程序语言的许多最基本概念,包括:字符集、标识符和
关键字,数据与类型,数据表示,运算符、表达式与计算过程,数学函数库的使用等。

第三章,变量、函数和控制结构。讨论程序设计的一些基本问题,包括语句与复合结构,
变量及其使用,简单函数定义,逻辑条件的描述与使用等。最后介绍了几种基本控制结构。

第四章,基本程序设计技术。首先分析循环程序设计的基本问题,经过一系列程序实例
分析了循环的构造过程。此后介绍了C 语言其余控制结构及其使用。

第五章,C 语言程序结构。讨论C 语言许多具备通常性的重要问题,主要是C 程序结
构,函数概念及有关的问题,预处理命令和预处理过程,递归的概念等。

第六章,数据对象的顺序组合:数组。介绍数组概念、定义和使用,数组与函数的关系,
两维和多维数组等。

第七章,指针。指针概念和指针变量的使用,C 语言中指针与数组的关系,多维数组做
为参数的通用函数。然后讨论了动态存储管理,类型定义,指向函数的指针等一系列问题。

第八章,输入输出与文件。讨论了文件概念,与输入输出有关的各类问题,标准库的输
入输出功能,以及输入输出的程序设计问题。

第九章,结构及其余数据机制。介绍结构(struct)、联合(union)、枚举(enum)等数
据定义机制的意义及在程序中的使用。随后简单介绍了连接结构的概念。

第十章,程序开发。讨论程序设计和开发中的许多通常性问题和技术。包括C 程序的
分块开发问题等。

第十一章,标准库函数。介绍标准库提供的各方面功能及其相关知识。
最后有几个附录和一个比较详细的索引。
《从问题到程序:程序设计与C语言引论》目录

  为了尽早讲解函数,特地把函数部分拆成了两部分,能讲的部分,早早地在第三章刚介绍完变量就开讲了,其他部分放在了后面第五章讲。第九章才讲结构。

  什么叫境界?什么叫水平?什么叫懂得C语言?什么叫懂得编程?什么叫懂得写书?

  这些做者们,他们知道编程中最重要的是什么,知道C语言是什么,知道什么叫按部就班。他们在用有形的文字、无声的语言,在告诉你,在熏陶你,在启发你,在引导你渐渐地懂得C语言的精髓和编程的真谛。他们让你懂得,饭碗是用来盛饭的,便盆是用来小便的。

  但是《C语言入门很简单》这本书或老谭那本书呢?纯粹是教人用便盆当饭碗!这会教出不少二逼,你若告诉他这样写不对,他会振振有词:

  做为一名第一次接触C语言的小白,我很感谢这本书在很短的时间内让我对C语言产生了兴趣而且能作简单的应用。这本书即便有这样那样的纰漏,可是做为“领进门的师傅”,已经很尽责了~特别是书配套的视频,对初学者帮助真的很大!!!函数调到后面我以为也很合理,让咱们这些怕语言的小白很好接受!

  这特么跟坚持“便盆也能盛饭,饭碗也能小便”有什么区别?!

  不怕不识货,就怕货比货。不过写到这里,我忽然感到一阵疚惭,把《The C Programming Language》、《C Programming: A Modern Approach 》、《Pointers on C》、《狂人C:程序员入门必备》、《从问题到程序:程序设计与C语言引论》这几本书和《C语言入门很简单》写在同一篇博文里实在是一种亵渎。我真的感受对不住前面那些书的做者们。在此我向Brian W. Kernighan、Dennis M. Ritchie、K. N. King、Kenneth A.Reek、键盘农夫、裘宗燕等几位做者鞠躬致歉。对不起,万般无奈,势不得已,实在是箭在弦上,想收都收不住了。

  从以上种种,咱们不难看出,《C语言入门很简单》做者的C语言和编程水平其渣无比。这一样证实了这本书的责任编辑根本不称职,要么无知,水平与做者一样其渣无比,要么无良。对于一名编辑来讲,即便你不得懂编程,可你连做者是个门外汉都看不出来,你有什么资格当编辑?

  做者们炮制这样的书不是坑人又是什么?!不是像老谭同样误人子弟又是什么?!不是谋财害命又是什么?!清华大学出版社出版这种垃圾,不是玷污文化污染技术又是什么?!不是生产技术地沟油又是什么?!不是浪费森林污染环境又是什么?!不是误人子弟谋财害命的帮凶或同谋又是什么?!大家对得起辛辛苦苦长了好几百年才长成的森林吗?大家有资格抱怨帝都的雾霾吗?

  为此我强烈建议人大修改刑法将这种炮制劣书误人子弟的行为入罪并课以无期徒刑!

  孩子喊我陪他看电影了,今天就只能写到这里了。

续文连接:踢爆IT劣书出版黑幕——由清华大学出版社之《C语言入门很简单》想到的(3)

相关文章
相关标签/搜索