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

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

回顾及对评论的评论

  拙文 《踢爆IT劣书出版黑幕——由清华大学出版社之《C语言入门很简单》想到的》(1)、(2)发表后,得到了不少评论。

  •   在这些评论中,最卑劣的是这条:

#118楼 2013-12-31 23:23 载舟秦淮  
@garbageMan
你再敢发一个清华的,信不信我弄死你全家?!

  这种黔驴技穷式的人身威胁恰恰说明了这帮家伙确实是在炮制技术垃圾,利用初学者的无知,用欺骗的手段谋利。也说明了这帮家伙有多么的卑鄙无耻,又是多么地怯懦猥琐。

  揭露报道地沟油的记者李翔是被刺杀身亡的。揭露文化地沟油的薛非会如何,大家不妨拭目以待吧。

  这是我第二次遭遇人身威胁。前一次是人民邮电出版社图灵公司副总编陈冰发出的,因为我揭露了他策划的劣书《C程序设计伴侣》。那段时间,我每次到超市,都喜欢在副食柜附近转悠,因为那里有菜刀。

  此事我已经正式要求清华大学出版社给出解释。 

  •   对于我讲“我发现除了我那本《品悟C》,清华大学出版社没有任何一本像样的有技术含量的C语言书”,有网友觉得:
--- 好大的口气啊

  讲老实话我没觉得我口气有什么大的,大约也就是实事求是罢了。我自觉讲话一向有分寸,我并没有说全国除了我的《品悟C》,没有任何一本像样的有技术含量的C语言书。

  其实想反驳我也很容易,列举出另外一本清华大学出版社出的像样的有技术含量的C语言书也就是的了。

  有人对我从目录就能判断出一本书是劣书表示怀疑:

  仅仅从目录一个结构体和函数的顺序就能得出“《C语言入门很简单》作者的C语言和编程水平其渣无比”的结论

  其实任何一个真正懂得写书的作者和称职的编辑都会告诉你确实如此,甚至一个会读书的读者都知道这一点。这没什么稀奇的。

  •   有人用“写书的艰难”来为劣书辩护,要求我对劣书作者给出“尊重和理解”。

  我觉得这毫无道理。
  写劣书艰难,写好书就更艰难,凭什么要写书更艰难的尊重不怎么艰难的?
  一个幼儿园的孩子,不知天高地厚地去写一本微积分的书,怎么可能不错漏百出坑害读者?所以你哪怕写得再艰难我也不会尊重你。我只尊重有水平、写作认真、对读者负责的作者。你是你, 我是我, 别往一块扯。

  好,回顾就到这里。鉴于有些初学者还无法认清这是一本劣书。所以下面看看《C语言入门很简单》这本书的内容是何等荒腔走板的。

内容荒谬

  《C语言入门很简单》这本书错谬之处比比皆是,已经到了随手一翻就能翻到的地步。
  由于错误太多,一次写不完,所以今天只给出部分例子,以后再不断补充。
  另外,由于时间所限,我将先给出槽点,以后再补充点评。
  也欢迎大家对书中的各种奇葩进行点评,那样的话,我就不用一一点评了。

第1篇 一切从基础开始
   第1章 概述

p3

   提供了多种基本运算:C语言提供了30多种运算符号,分为15个运算优先级,不仅可以完成基本的数学运算,还可以完成类似于计算机底层操作的位运算。有的运算符号在不同情况下的含义和 使用方式也是不同的,而且可以通过强制结合来改变运算符的优先级

评:这大概是在跟谭浩强学舌。就是用脚丫子数也不至于数出“C语言提供了30多种运算符号”啊。实际上C语言在二十多年前就已经有40多个运算符了。

p8

   “cl.exe”是编译器,“cl”表示“compiler”中的两个字母,表示编译; Visual  Studio 的全称为Microsoft  Visual  Studio,意思是“微软可视化工作室”,简称为VS。它包含VB、VC、VF、Delphi、控件、数据库ODBC等开发工具

   第2章 开始c语言之旅

p24

  在C语言中,有三种基本的数据类型供选择,它们有着不同的精度和广度,可以根据自己的需要选择合适的。这三种数据类型分别是整型、浮点型、字符型,它们可谓是C语言数据的三大变形 金刚。

p25

浮点型在C语言中主要用来表示小数,分为单精度浮点类型和双精度浮点类型。

 

表2.3   浮点类型
类型名          表示符     精度               表 示 范 围                           适合表示的数字
单精度浮点型  float      3.4×10^38   3.4×10^38到3.4×10^38      精度要求不高的小数
双精度浮点型  double  1.7×10^308  1.7×10^308到1.7×10^308  精度要求高的小数

p27

在上一节进行变量的定义和声明的时候,使用了两个概念:类型名和变量名,其实它们都是C语言中的标识符

帅绝人寰 (FUCK GFW) 评: 很惊艳!

p28

表2.4   用于命名的符号
命 名 符 号
大写字母  A  B  C  D  E  F  G  H  I  J  ……  W  X  Y  Z
小写字母  a  b  c  d  e  f  g  h  i  j  ……  w  x  y  z
阿拉伯数字  0  1  2  3  4  5  6  7  8  9  
分隔计算符号
分隔符  (  )  {  }              …….  ;  
计算符  +  -  *  /  %  ->  >  <  ==  !  ……  <=  >=    
数 值 符 号
阿拉伯数字  0  1  2  3  4  5  6  7  8  9  
指数表示符  E  e  

p29 

const 变量拥有了常量的一切特性,用来表示常量,人们也不把它叫变量了,干脆直接叫常量

评:男人进了女厕所,就拥有了女人的一切特性。所以也不用把他叫男人了,干脆直接叫女人

p30

【题目1】  “地球”是不是一个数据?
【分析】  要成为一个数据,必须满足三个条件:首先,数据是事物元素;其次,数据
必须包含有用信息;最后,数据应该是个符号。“地球”要想成为一个数据,就得满足这
三个条件,在描述银河系的时候,“地球”算得上是一个事物元素。地球是银河系的一员,
具有一定有用的信息。我们可以在计算机中使用汉字符号“地球”来表示。所以,对于描
述银河系这件事情来说,“地球”是一个数据。但是,对于其他事物,地球就不见得是数
据了!

评:有句俄国谚语:“一个傻瓜提出来的问题,十个聪明人也回答不上来”。怯怯地很想问一句,“混球”是不是一个数据。

p31 

【分析】  街道上的人数是一个整数,而且数目估计会比较大,因为这天天气不错,风和日丽!另外,人数总不可能是负的吧?因此,可以使用unsigned long int类型来表示人数,这个类型可以表示的整数确实大得可以,绝对超过64亿了,不会全世界的人都集中在这条街吧?!

评:这本作者和编辑都小学没毕业,因为他们根本不会数数,有反对的吗?

第2篇 简单程序的构建


   第3章 简单数学运算  
p35

这样别人问你形如:  
int radius = 1  
的东西叫做什么的时候,你就不必手足无措了,它有一个专门的名字叫做赋值表达式

p36

scanf()函数的使用格式是这样的:
 
scanf("%变量类型表示",&变量名);
 
在这里,只要关注两个点:“变量类型表示”和“变量名”。变量类型表示就是用来表示变量数据类型的一个字母


遵照上面列出的scanf()函数使用格式,%d表示要赋值的变量的类型,使用字母d表示整型

p37

printf("%变量类型表示",变量名);

p37

赋值运算是将数据的值暂时保存在变量里,那么,保存到变量里到底有什么用呢?不能只是为了保存而保存,为了赋值而赋值。其实,赋值也是有很大用途的,它的重要性主要体现在两个方面:(1)为了使用方便;(2)为了避免出错

p38 

 可以想象一下这样一种使用变量的情况:定义了一个变量,没有给它赋值,然后就使用了这个变量,会出现什么情况呢?用printf()函数验证一下这种情况。来看看这样一段代码:  

#include<stdio.h>  

int main()

{

      int radius;

      printf("%d",radius);

      return 0;

}

 和前面的那段代码很相似,就是少了给已经定义的变量radius赋值,直接就用printf()函数输出了。输出结果如图3.4所示。程序没有输出,而是直接运行错误,这是一个很严重的问题。所以,在使用变量的时候,一定要给变量进行赋值,不然,小则导致一些意想不到的错误,大则导致程序崩溃,就像上面的例子那样。


图3.4   未赋值的变量

p41

 

评:(1)是教人以愚蠢。是“以其蠢蠢使人昭昭”;"余数R为7""余数R为7""余数R为7""余数R为7",都特么除以2的一次方了,还余数R为7。这作者和编辑的脑袋有多麻木啊。更雷人的是第二页紧接着写道:“对于n=0:Y除以20,商Z为1,余数R为7”。竟然有人说什么“书写的咋样我不知道”“能指导新手入门,能给人帮助”。一个更比一个翔。

p48

要想真正了解C语言中的浮点型数值的赋值,就得从最本质上来了解计算机中的浮点型数值到底是什么样的?

p61

  例如,声明一个整型变量radius,要求计算半径为2,1的圆的面积。那么,就得把浮点型变量2.1赋值给整型变量radius,…

评:笑得我差点没尿崩。

p64

  算术运算主要是对常用的八进制数、十进制数和十六进制数进行操作。这些运算在上学的时候,经常用到。位运算主要是对不常见的二进制数的操作,这些操作对于实现二进制数的运算是很方便的。

评:这是逆天的节奏么?聊斋也不敢这么写吧?这不是在坑人是什么? 

飞鸟_Asuka  评:作者这已经不是不懂C了,根本就是不懂计算机啊

 p66

  C语言中,每一个表达式都是有一个值的,而且这个值是按照常量来处理的。对于数学运算表达式,它的值就是数学运算的结果。例如,上面表达式num*10的值就是它的计算结果30,是一个常量因此我们可以按照赋值表达式的要求把它赋值给一个整型变量result。

p68

  由于位运算直接对二进制表示进行操作,因此其效率远远高于对其他进制表示的算术运算掌握好位运算可以大大提升程序的性能。C语言提供的位运算主要有6种:左移运算、右移运算、操作运算、操作运算、异或操作运算、按位取反运算。


飞鸟_Asuka 评:没有任何证据能证明“位运算的效率远远高于算术运算”。而且很多操作是不可比较的,因为其运算本质根本不同,并且底层的计算还依赖于机器

p69

  按照右移运算规则:把6的二进制表示右移一位后丢掉最低位,并在最高位补原来的最高位所得的结果,……

 

p166

p169

 

  本章详细地讲述了一种特殊的数组——字符数组,C语言中称之为字符串

 p170

后面部分将不断补充:

      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 习题
View Code

 (未完待续)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值