書單推薦 新書推薦 |
零基礎學C語言(第4版) ![]()
本書分為“C語言基礎”“一窺C語言門徑”“C語言進階”“C語言程序設計實例與面試題解析”四篇,系統(tǒng)全面地介紹了C語言各個方面的知識,從*簡單的“Hello World”程序寫起,逐步深化、細化,第壹篇。書中對每個知識和技術要點都給出了翔實的示例及代碼分析。和其他書籍中羅列代碼的做法不同,本書中的代碼力求短小精悍,直擊要點,避免了細枝末節(jié)對讀者思維的干擾。在講解知識點的同時輔以筆者多年的C語言編程經驗解析,可加深讀者的理解。
前言
第一篇 C語言基礎 第1章 踏上征程前的思想動員1 1.1 為什么選擇C語言1 1.2 如何學好C語言3 1.3 語言概述3 1.3.1 什么是語言3 1.3.2 什么是機器語言3 1.3.3 什么是匯編語言4 1.3.4 面向過程的語言5 1.3.5 什么是C語言5 1.4 程序的開發(fā)周期5 1.4.1 編輯C源代碼6 1.4.2 編譯C源代碼6 1.4.3 連接目標文件7 1.4.4 編譯連接過程示例7 1.4.5 運行程序9 1.5 C、C++、VC++的區(qū)別和開發(fā)環(huán)境9 1.6 小結11 1.7 習題11 第2章 跟我寫Hello World13 2.1 了解需求才能創(chuàng)建程序13 2.2 認識Code::Blocks開發(fā)環(huán)境13 2.2.1 為什么選擇Code::Blocks14 2.2.2 啟動Code::Blocks14 2.2.3 新建Hello World項目14 2.2.4 定義新項目15 2.2.5 添加源代碼到項目16 2.2.6 調試器設置16 2.2.7 開始編輯代碼17 2.3 編譯運行18 2.4 調試排錯(debug)19 2.4.1 debug的由來19 2.4.2 設置斷點20 2.4.3 調試運行20 2.5 第一個程序容易出現的錯誤21 2.5.1 包含命令include21 2.5.2 關鍵字main22 2.5.3 表示代碼行結束的分號22 2.6 小結22 2.7 習題22 第3章 分解Hello World——最簡單C程序的組成24 3.1 C程序的構成24 3.2 C程序的注釋25 3.3 C程序必須有的main函數26 3.4 調用函數在屏幕上顯示文字27 3.5 #include預處理器指示符28 3.5.1 函數聲明及其作用28 3.5.2 試驗尋找#include的作用29 3.5.3 #include的作用30 3.6 計算1+1的程序實例31 3.7 數據從哪里來,又到哪里去——變量32 3.7.1 變量在內存中的表現形式32 3.7.2 編譯器使用變量符號表32 3.7.3 變量及其使用33 3.8 自己設計C函數35 3.8.1 在main函數中計算3個整數的平均數35 3.8.2 在main函數中分3次計算3個整數的平均數36 3.8.3 自編函數實現計算3個整數的平均數36 3.8.4 如何自編寫函數37 3.8.5 觀察總結函數聲明和函數定義的意義38 3.9 語句構成程序39 3.10 優(yōu)秀程序員的代碼風格40 3.11 小結40 3.12 習題41 第4章 常量、變量及數據類型42 4.1 計算機是如何表示數據的42 4.1.1 二進制、八進制、十六進制42 4.1.2 表示數據的字節(jié)和位44 4.1.3 內存是存儲數據的房間45 4.2 數據類型46 4.2.1 整數類型46 4.2.2 整數的有符號和無符號48 4.2.3 實數類型50 4.2.4 字符類型50 4.2.5 數據類型總結51 4.3 常量51 4.3.1 直接常量和符號常量52 4.3.2 符號常量的優(yōu)點53 4.3.3 直接常量的書寫格式54 4.3.4 轉義字符55 4.3.5 字符串57 4.4 變量58 4.4.1 變量的聲明58 4.4.2 變量聲明的意義59 4.4.3 標識符和關鍵字60 4.4.4 變量在內存中占據的空間和變量的值62 4.4.5 為變量賦初值64 4.4.6 變量使用時常見的錯誤65 4.5 幾個與變量相關的經典算法66 4.5.1 累加和累乘66 4.5.2 交換兩個變量的值68 4.6 小結69 4.7 習題69 第5章 用屏幕和鍵盤交互——簡單的輸出和輸入71 5.1 輸入—處理—輸出:這就是程序71 5.2 向屏幕輸出——printf()函數詳解72 5.2.1 printf()函數的一般形式72 5.2.2 printf()函數的輸出原理73 5.2.3 格式控制字符串的一般形式74 5.2.4 輸出帶符號的整數%d75 5.2.5 設置最小寬度的輸出75 5.2.6 長整型輸出%ld76 5.2.7 輸出八進制形式76 5.2.8 輸出十六進制的形式77 5.2.9 輸出十進制的unsigned型數據77 5.2.10 輸出字符78 5.2.11 輸出字符串%s79 5.2.12 輸出實型數據%f81 5.2.13 輸出指數形式的實數82 5.2.14 自動選擇%f或者%e形式輸出%g83 5.2.15 printf()函數的幾點說明83 5.3 字符輸出putchar()和字符串輸出puts()84 5.3.1 字符輸出函數84 5.3.2 字符串輸出函數85 5.4 接收鍵盤輸入——scanf()函數詳解86 5.4.1 scanf()函數的一般形式86 5.4.2 scanf()函數的輸入原理87 5.4.3 多數據輸入分隔規(guī)則89 5.4.4 控制輸入的格式字符90 5.4.5 scanf()函數的使用說明91 5.4.6 使用scanf()函數的注意事項93 5.5 字符輸入函數getchar()95 5.6 輸入和輸出程序舉例96 5.7 小結98 5.8 習題99 第6章 程序的基本構成——運算符和表達式100 6.1 認識C中的運算符和表達式100 6.1.1 運算符和表達式100 6.1.2 操作數、運算符和表達式101 6.1.3 C運算符簡介102 6.2 算術運算符和算術表達式102 6.2.1 基本的算術運算符103 6.2.2 ++自增、--自減運算符104 6.2.3 算術表達式和運算符的優(yōu)先級及結合性106 6.3 逗號運算符和逗號表達式107 6.3.1 逗號表達式的一般形式107 6.3.2 逗號表達式的優(yōu)先級和結合性108 6.4 關系運算符和關系表達式109 6.4.1 關系運算符的種類109 6.4.2 關系表達式的一般形式109 6.5 邏輯運算符和邏輯表達式110 6.5.1 邏輯運算符111 6.5.2 邏輯真值表111 6.6 賦值運算符和賦值表達式112 6.6.1 賦值表達式112 6.6.2 復合運算符113 6.7 強制類型轉換和自動類型轉換113 6.7.1 強制類型轉換113 6.7.2 自動類型轉換115 6.8 運算符的優(yōu)先級116 6.8.1 優(yōu)先級、結合性匯總116 6.8.2 sizeof運算117 6.9 取地址運算符117 6.10 小結118 6.11 習題118 第7章 程序的最小獨立單元——語句120 7.1 5種語句類型120 7.1.1 表達式語句120 7.1.2 函數調用語句122 7.1.3 空語句122 7.1.4 復合語句(塊語句)122 7.1.5 流程控制語句123 7.2 結構化程序設計123 7.2.1 什么是算法123 7.2.2 算法的表示123 7.2.3 算法的偽代碼表示124 7.2.4 算法的流程圖表示124 7.2.5 3種控制結構124 7.2.6 算法示例125 7.3 小結125 7.4 習題126 第8章 條件判斷——分支結構127 8.1 if語句127 8.1.1 判斷表達式127 8.1.2 花括號和if結構體128 8.2 if...else結構129 8.2.1 關鍵在else129 8.2.2 if...else結構體130 8.3 多分支語句和分支語句嵌套131 8.3.1 多分支131 8.3.2 多分支if結構133 8.3.3 分支語句嵌套134 8.4 switch結構135 8.4.1 一般形式135 8.4.2 為什么叫開關語句137 8.4.3 default語句138 8.4.4 if結構和switch結構之比較139 8.4.5 switch結構的常見錯誤與解決方法139 8.5 小結140 8.6 習題141 第9章 一遍又一遍——循環(huán)結構142 9.1 構造循環(huán)142 9.1.1 循環(huán)的條件142 9.1.2 當型循環(huán)和直到型循環(huán)143 9.2 while和do...while循環(huán)結構143 9.2.1 語法規(guī)則144 9.2.2 代碼塊145 9.2.3 while語句的常見錯誤145 9.2.4 do...while語句的常見錯誤146 9.3 for循環(huán)結構147 9.3.1 基本形式147 9.3.2 表達式省略149 9.3.3 循環(huán)終止和步長150 9.3.4 for語句的常見錯誤150 9.4 循環(huán)嵌套151 9.4.1 嵌套示例151 9.4.2 嵌套的效率152 9.4.3 循環(huán)嵌套程序的常見錯誤153 9.5 與循環(huán)密切相關的流程轉向控制語句154 9.5.1 用break跳出循環(huán)154 9.5.2 用continue重來一次155 9.5.3 用goto實現跳轉156 9.6 小結157 9.7 習題157 第二篇 一窺C語言門徑 第10章 同一類型多個元素的集合——簡單數組159 10.1 什么是數組159 10.1.1 數組是一大片連續(xù)內存空間159 10.1.2 數組元素的訪問160 10.2 一維數組160 10.2.1 一維數組的聲明160 10.2.2 一維數組元素的訪問161 10.2.3 一維數組的初始化162 10.2.4 不合法的數組操作163 10.3 二維數組164 10.3.1 二維數組的聲明164 10.3.2 二維數組的初始化164 10.3.3 二維數組應用舉例165 10.4 更高維的數組166 10.4.1 高維數組的聲明和元素訪問166 10.4.2 初始化166 10.4.3 多維數組在內存中是如何排列元素的167 10.5 小結168 10.6 習題168 第11章 寫程序就是寫函數——函數入門170 11.1 什么是函數170 11.1.1 函數的由來170 11.1.2 C語言中的函數170 11.2 自定義函數171 11.2.1 函數定義語法171 11.2.2 函數定義范例172 11.2.3 不要重復定義173 11.3 函數調用與返回173 11.3.1 形參和實參174 11.3.2 傳址調用175 11.3.3 函數返回176 11.4 告訴編譯器有這么一個函數177 11.4.1 函數聲明的語法177 11.4.2 聲明不同于定義179 11.4.3 標準庫函數的聲明180 11.5 函數的調用過程180 11.6 小結180 11.7 習題180 第12章 C語言難點——指針初探182 12.1 計算機中的內存182 12.1.1 內存地址182 12.1.2 內存中保存的內容183 12.1.3 地址就是指針183 12.2 指針的定義183 12.2.1 指針變量的聲明183 12.2.2 指針變量的初始化184 12.2.3 指針變量的值185 12.2.4 取地址操作符&185 12.2.5 指針變量占據一定的內存空間185 12.2.6 指向指針的指針186 12.2.7 指針變量常見的錯誤分析與解決186 12.3 使用指針187 12.3.1 運算符*188 12.3.2 指針的類型和指針所指向的類型189 12.3.3 同類型指針的賦值189 12.3.4 void指針190 12.3.5 指針的類型和指針所指向的類型不同190 12.4 指針的運算192 12.4.1 算術運算之“指針+整數”或“指針-整數”192 12.4.2 指針-指針193 12.4.3 指針的大小比較194 12.5 指針表達式與左值194 12.5.1 指針與整型194 12.5.2 指針與左值195 12.5.3 指針與const195 12.6 動態(tài)內存分配196 12.6.1 動態(tài)分配的好處196 12.6.2 malloc與free函數197 12.6.3 calloc與free198 12.6.4 free函數與指針199 12.6.5 內存泄漏199 12.6.6 釋放已經釋放了的內存會出問題200 12.7 小結200 12.8 習題200 第13章 字符串及字符串操作202 13.1 C風格字符串202 13.1.1 C風格字符串的聲明202 13.1.2 C風格字符串在內存中的表示202 13.2 字符數組的輸入輸出203 13.2.1 字符數組的聲明203 13.2.2 字符數組可以進行整體輸入輸出204 13.2.3 使用gets()函數讀取整行205 13.2.4 訪問字符數組中某個元素205 13.2.5 使用puts()函數實現字符串的輸出206 13.2.6 使用字符數組的常見問題206 13.3 字符串處理函數207 13.3.1 理解:數組名是常指針208 13.3.2 strlen()函數與size_t210 13.3.3 字符串復制函數strcpy()211 13.3.4 字符串比較函數strcmp()212 13.3.5 字符串連接函數strcat()213 13.3.6 全轉換為大寫形式213 13.3.7 鏈式操作214 13.4 小結214 13.5 習題215 第14章 結構體、共用體、枚舉和typedef216 14.1 結構體216 14.1.1 結構體的定義216 14.1.2 聲明結構體變量217 14.1.3 初始化結構變量218 14.1.4 訪問結構體成員218 14.1.5 結構體定義的位置219 14.1.6 結構體變量賦值219 14.2 特殊結構體220 14.2.1 結構體嵌套220 14.2.2 匿名結構體223 14.3 共用體224 14.3.1 什么是共用體224 14.3.2 共用體的定義224 14.3.3 聲明共用體變量225 14.3.4 共用體變量的初始化225 14.3.5 共用體成員訪問225 14.3.6 共用體賦值226 14.4 結構體和共用體的內存差異226 14.4.1 結構體變量和共用體變量內存形式的不同227 14.4.2 結構體變量的內存大小227 14.4.3 字節(jié)對齊228 14.4.4 最寬基本類型228 14.4.5 共用體的大小229 14.5 枚舉類型230 14.5.1 什么是枚舉類型230 14.5.2 枚舉類型的定義230 14.5.3 聲明枚舉變量231 14.5.4 枚舉常量是什么231 14.5.5 使用枚舉時常見的錯誤232 14.6 給類型取個別名——typedef233 14.6.1 typedef基本用法233 14.6.2 #define用法233 14.7 小結234 14.8 習題234 第15章 如何節(jié)省內存——位運算235 15.1 什么是位運算235 15.1.1 開燈關燈235 15.1.2 改變狀態(tài)235 15.1.3 計算機中的數據存儲形式236 15.2 位邏輯運算符237 15.2.1 位取反操作237 15.2.2 位與運算237 15.2.3 位或運算237 15.2.4 位異或238 15.2.5 實例分析238 15.3 移位運算239 15.3.1 基本形式239 15.3.2 移位舉例239 15.3.3 移位和乘以2241 15.4 小結241 15.5 習題241 第三篇 C語言進階主題 第16章 存儲不僅僅局限于內存——文件243 16.1 什么是文件243 16.1.1 文件243 16.1.2 流244 16.1.3 重定向244 16.1.4 文件的處理形式——緩沖區(qū)和非緩沖區(qū)245 16.1.5 文件的存儲形式——文本形式和二進制形式245 16.2 C語言如何使用文件245 16.2.1 文件型指針245 16.2.2 文件操作的步驟246 16.3 文件的打開與關閉246 16.3.1 用于打開文件的fopen()函數247 16.3.2 打開是否成功248 16.3.3 用于關閉文件的fclose()函數249 16.4 文件的讀寫249 16.4.1 讀寫的相對參照249 16.4.2 如何判斷文件已經結束249 16.4.3 字符讀寫函數fgetc()和fputc()250 16.4.4 字符串讀寫函數fgets()和fputs()251 16.4.5 塊讀寫函數fread()和fwrite()253 16.4.6 格式化文件輸入輸出fprintf()與fscanf()256 16.5 文件的定位258 16.5.1 移動指針到文件開頭rewind()258 16.5.2 移動指針到當前位置ftell()258 16.5.3 移動指針fseek()258 16.6 小結260 16.7 習題260 第17章 靈活卻難以理解——指針進階262 17.1 指針與數組262 17.1.1 數組名指針262 17.1.2 使用數組名常指針表示數組元素263 17.1.3 指向數組元素的指針變量263 17.1.4 指向數組的指針變量264 17.1.5 指針數組265 17.1.6 指針與數組的常見問題266 17.2 指針、結構體和結構體數組266 17.2.1 兩種訪問形式266 17.2.2 聲明創(chuàng)建一個結構體數組267 17.2.3 結構體數組的初始化267 17.2.4 結構體數組的使用268 17.2.5 指向結構體數組的指針268 17.3 函數指針269 17.3.1 函數名指針269 17.3.2 指向函數的指針270 17.3.3 函數指針類型272 17.3.4 函數指針作函數參數273 17.3.5 函數指針數組274 17.3.6 指向函數指針的指針275 17.4 小結275 17.5 習題276 第18章 更深入的理解——函數進階277 18.1 參數傳遞的副本機制277 18.1.1 傳值調用的副本277 18.1.2 傳址調用的副本機制278 18.2 函數返回值的副本機制281 18.2.1 return 局部變量為什么合法281 18.2.2 返回指針申請動態(tài)內存282 18.2.3 不要返回指向棧內存的指針282 18.2.4 返回指向只讀存儲區(qū)的指針283 18.3 函數與結構體283 18.3.1 結構體變量的傳值和傳址調用283 18.3.2 結構體變量的成員作為函數參數284 18.3.3 返回結構體的函數285 18.3.4 返回結構體指針的函數286 18.4 函數與數組286 18.4.1 數組元素作為函數參數286 18.4.2 數組名作為函數參數287 18.4.3 多維數組名作為函數參數289 18.4.4 數組名作函數參數時的退化290 18.5 遞歸290 18.5.1 遞歸流程290 18.5.2 遞歸兩要素292 18.5.3 效率VS可讀性293 18.6 帶參數的主函數294 18.7 小結295 18.8 習題295 第19章 生存期、作用域與可見域297 19.1 內存分配297 19.1.1 內存分區(qū)297 19.1.2 變量的存儲類別298 19.1.3 生存期299 19.1.4 作用域與可見域299 19.2 auto變量299 19.2.1 定義格式300 19.2.2 作用域和生存期300 19.2.3 auto變量的屏蔽準則301 19.2.4 重復定義302 19.2.5 auto變量的初始化和特點302 19.3 register變量303 19.3.1 定義格式303 19.3.2 使用舉例303 19.4 extern變量304 19.4.1 全局變量定義304 19.4.2 全局變量聲明305 19.4.3 可見域306 19.4.4 全局變量的屏蔽準則307 19.4.5 全局變量的利與弊309 19.5 static變量309 19.5.1 定義格式309 19.5.2 靜態(tài)局部變量310 19.5.3 靜態(tài)全局變量311 19.5.4 靜態(tài)局部變量和靜態(tài)全局變量的區(qū)別312 19.5.5 extern變量和static變量的初始化312 19.6 函數的作用域與可見域312 19.6.1 內部函數313 19.6.2 外部函數314 19.7 結構體定義的作用域與可見域314 19.7.1 定義位置與可見域314 19.7.2 允許重復定義315 19.8 常見的有關變量存儲的錯誤316 19.9 小結318 19.10 習題318 第20章 編譯及預處理320 20.1 編譯流程320 20.1.1 編輯321 20.1.2 預處理321 20.1.3 編譯321 20.1.4 連接322 20.2 程序錯誤322 20.2.1 錯誤分類323 20.2.2 編譯錯誤323 20.2.3 連接錯誤323 20.2.4 邏輯錯誤323 20.2.5 排錯324 20.3 預處理命令之宏定義324 20.3.1 宏定義324 20.3.2 不帶參數的宏定義324 20.3.3 帶參數的宏定義326 20.3.4 #define定義常量與const常量328 20.3.5 文件包含329 20.3.6 條件編譯330 20.3.7 宏函數331 20.4 小結332 20.5 習題333 第21章 數據結構334 21.1 鏈表334 21.1.1 鏈表的結構334 21.1.2 創(chuàng)建鏈表并遍歷輸出335 21.1.3 鏈表的插入338 21.1.4 鏈表結點的刪除341 21.1.5 鏈表的逆置342 21.1.6 鏈表的銷毀344 21.1.7 鏈表的綜合實例344 21.1.8 循環(huán)鏈表349 21.1.9 雙鏈表349 21.2 棧和隊列352 21.2.1 棧的定義353 21.2.2 棧的分類353 21.2.3 棧的操作353 21.2.4 函數與棧356 21.2.5 隊列356 21.3 自定義類型359 21.4 小結361 21.5 習題362 第四篇 C語言程序設計實例與面試題解析 第22章 面試題解析363 22.1 基礎知識363 22.1.1 指針自增自減有什么不同363 22.1.2 什么是遞歸364 22.1.3 宏定義與操作符的區(qū)別364 22.1.4 引用與值傳遞的區(qū)別364 22.1.5 指針和引用有什么區(qū)別364 22.1.6 什么是棧364 22.1.7 main函數執(zhí)行前還會執(zhí)行什么代碼364 22.1.8 static有什么用途365 22.1.9 定義int **a[3][4], 則變量占用的內存空間為多少365 22.1.10 什么是預編譯365 22.1.11 int (*s[10])(int)表示什么意義365 22.1.12 結構體與共同體有何區(qū)別365 22.2 算法和思維邏輯知識366 22.2.1 100美元哪里去了366 22.2.2 將16升水平均分給四個人366 22.2.3 算出小王買了幾瓶啤酒、幾瓶飲料367 22.2.4 找出不同的蘋果367 22.2.5 找出不同的球368 22.2.6 猜自己的帽子顏色368 22.2.7 3筐水果各是什么370 22.2.8 最后剩下的是誰370 22.2.9 聰明的商人371 22.2.10 紅球和白球371 22.2.11 烏龜賽跑372 22.2.12 投硬幣372 附錄 ASCII編碼表373
你還可能感興趣
我要評論
|








