踢爆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

 (未完待續)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM