手把手教你學C語言( 簡體 字) | |
作者:吳明杰 曹宇 吳丹 | 類別:1. -> 程式設計 -> C -> C |
出版社:機械工業出版社 | 3dWoo書號: 45614 詢問書籍請說出此書號! 有庫存 NT售價: 395 元 |
出版日:11/1/2016 | |
頁數:573 | |
光碟數:0 | |
站長推薦: | |
印刷:黑白印刷 | 語系: ( 簡體 字 ) |
ISBN:9787111553076 | 加入購物車 │加到我的最愛 (請先登入會員) |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證, 繁體書的下載亦請直接連絡出版社) | |
第1章 為什么要學習C語言?1
1.1 C的起源和發展1 1.1.1 計算機語言發展的三個階段1 1.1.2 語言運行速度的比較3 1.1.3 C語言的演變過程3 1.2 C的特點5 1.2.1 C語言的優點5 1.2.2 C語言的缺點6 1.3 C的應用領域7 1.4 C的重要性8 1.5 本章總結9 第2章 怎樣學習C語言?10 2.1 學習C語言的心得10 2.2 學習C語言的目標12 2.3 常見問題答疑13 2.3.1 學習Java為什么建議先學C語言?13 2.3.2 沒學過計算機專業課程能夠學懂C語言嗎?14 2.3.3 英語和數學不好能學好C語言嗎?14 2.4 本章總結16 第3章 Microsoft Visual C++ 6.0的使用17 3.1 為什么要學習VC++6.0?17 3.2 如何創建編程文件?17 3.3 寫一個最簡單的程序22 3.4 要養成時刻按Ctrl+S保存的習慣25 3.5 編譯-鏈接-執行25 3.6 怎樣運行第二個程序?28 3.7 點編譯-鏈接-執行時保存路徑下的文件夾有什么變化?30 3.8 如何編寫多文件程序?31 3.9 如何用VC++6.0調試程序?38 3.10 本章總結40 第4章 C語言認知,先給大家寫一個程序42 第5章 預備知識47 5.1 CPU、內存條、硬盤、顯卡、主板、顯示器之間的關系47 5.1.1 電影是如何運行起來的?47 5.1.2 CPU為什么不能直接操作硬盤卻能直接操作內存?47 5.1.3 內存條的速度為什么比硬盤的速度快?47 5.1.4 為什么不把內存條造的跟硬盤一樣大?48 5.1.5 CPU是如何操作內存的?48 5.1.6 主板的作用49 5.2 HelloWorld程序是如何運行起來的?49 5.3 字節50 5.3.1 什么是字節?50 5.3.2 字節換算50 5.3.3 字節總結51 5.4 進制51 5.4.1 什么是進制?51 5.4.2 進制轉換口算法53 5.4.3 進制轉換公式法54 5.4.4 人類為什么最習慣用十進制?57 5.4.5 計算機為什么用的是二進制?58 5.4.6 進制總結58 5.5 數據類型59 5.5.1 數據類型的分類59 5.5.2 基本數據類型及其所占的字節數61 5.6 常量63 5.6.1 整型常量64 5.6.2 浮點型常量64 5.6.3 字符型常量66 5.7 常量是以什么樣的二進制代碼存儲在計算機中的?67 5.8 補碼67 5.8.1 原碼和反碼68 5.8.2 補碼的兩個核心內容68 5.8.3 int型變量所能存儲的范圍70 5.8.4 int型變量和char型變量是如何進行相互賦值的?72 5.9 什么是ASCII碼?73 5.10 變量74 5.10.1 如何定義變量?74 5.10.2 變量的本質77 5.10.3 為什么要使用變量?78 5.10.4 變量的命名規則78 5.10.5 變量為什么必須要初始化?80 5.10.6 變量總結83 5.11 各類型數據之間的混合運算84 5.12 代碼規范化86 5.12.1 代碼如何寫才能寫規范?86 5.12.2 代碼規范化的好處86 5.12.3 代碼規范化的七大原則87 5.12.4 代碼規范化總結91 5.13 本章總結91 第6章 printf的用法92 6.1 printf的格式93 6.2 輸出控制符95 6.3 %x、%X、%#x、%#X的區別95 6.4 如何輸出“%d”、“\”和“雙引號”?96 6.5 本章總結97 第7章 scanf的用法98 7.1 scanf的用法98 7.2 使用scanf注意事項101 7.2.1 參數的個數一定要對應101 7.2.2 輸入的數據類型一定要和所需要的數據類型一致102 7.2.3 使用scanf之前使用printf提示輸入105 7.3 本章總結105 第8章 運算符和表達式107 8.1 算術運算符107 8.2 關系運算符109 8.3 邏輯運算符109 8.4 賦值運算符113 8.5 運算符的優先級114 8.6 本章總結115 第9章 選擇結構程序設計117 9.1 流程控制117 9.1.1 什么是流程控制?117 9.1.2 流程控制的分類117 9.2 選擇的定義和分類118 9.3 if語句118 9.3.1 if最簡單的用法118 9.3.2 if的范圍問題120 9.3.3 if...else...的用法122 9.3.4 if...else if...else...的用法124 9.3.5 if 舉例--求分數的等級125 9.3.6 if 舉例--三個整數從小到大排序130 9.3.7 if的常見問題解析132 9.4 switch語句136 9.5 本章總結138 第10章 循環控制140 10.1 循環的定義和分類140 10.2 for循環140 10.2.1 for語句的格式140 10.2.2 自增和自減144 10.2.3 練習:編程輸出1!+2!+3!+……+n!的和145 10.2.4 for和if的嵌套使用146 10.2.5 強制類型轉換149 10.2.6 浮點數的存儲所帶來的問題155 10.2.7 多個for循環的嵌套使用159 10.2.8 for循環嵌套編程練習162 10.3 while循環173 10.3.1 while的執行順序173 10.3.2 while和for的比較174 10.3.3 如何看懂一個程序——“試數”176 10.3.4 do...while180 10.3.5 break和continue185 10.4 清空輸入緩沖區187 10.4.1 輸入緩沖區187 10.4.2 %d和%c讀取緩沖區的差別189 10.4.3 用scanf吸收回車191 10.4.4 getchar()192 10.4.5 fflush(stdin)196 10.5 本章總結198 第11章 數組200 11.1 一維數組的使用200 11.1.1一維數組的定義200 11.1.2 一維數組的初始化201 11.1.3 一維數組元素的引用204 11.1.4 如何將數組a賦給數組b?205 11.1.5 如何編程獲取數組的長度?206 11.1.6 練習208 11.1.7 宏定義:#define211 11.1.8 一維數組總結214 11.2 數組倒置算法214 11.3 數組查找算法217 11.3.1 順序查找217 11.3.2 折半查找218 11.4 數組插入、刪除算法221 11.4.1 插入算法221 11.4.2 刪除算法222 11.5 數組排序算法224 11.5.1 冒泡排序224 11.5.2 插入排序226 11.5.3 選擇排序230 11.5.4 快速排序232 11.5.5 四種排序算法的比較239 11.6 二維數組的使用241 11.6.1 二維數組的定義241 11.6.2 二維數組的初始化242 11.6.3 二維數組如何輸出?243 11.6.4 練習——楊輝三角244 11.6.5 是否存在多維數組?249 11.7 本章總結250 第12章 函數252 12.1 函數介紹252 12.1.1 什么是函數?252 12.1.2 C程序的組成和編譯單位252 12.1.3 庫函數和自定義函數253 12.1.4 函數的調用254 12.2 為什么需要函數?254 12.3 有參函數255 12.3.1 有參函數定義的一般形式256 12.3.2 形參和實參257 12.3.3 主調函數中對被調函數的函數聲明258 12.3.4 定義函數時應指定返回值類型260 12.3.5 函數的返回值260 12.3.6 return是如何將值返回給主調函數的?261 12.3.7 函數名的命名規則262 12.3.8 舉例——判斷一個自然數m是否是素數262 12.4 函數的遞歸調用266 12.4.1 什么是遞歸?266 12.4.2 使用遞歸必須要滿足的兩個條件268 12.4.3 如何學習遞歸?268 12.4.4 遞歸和循環的關系269 12.4.5 遞歸的優缺點269 12.4.6 用遞歸求n的階乘271 12.4.7 用遞歸實現1+2+3+...+100的和273 12.4.8 用遞歸求斐波拉契數列274 12.4.9 用遞歸求兩個數的最大公約數275 12.4.10 遞歸總結277 12.5 數組名作函數參數277 12.6 變量的作用域和存儲方式280 12.6.1 局部變量281 12.6.2 全局變量283 12.6.3 為什么不建議使用全局變量?284 12.6.4 自動變量:auto285 12.6.5 靜態變量:static285 12.6.6 寄存器變量(register)288 12.6.7 外部變量(extern)290 12.7 本章總結291 第13章 指針293 13.1 指針的重要性293 13.2 地址和指針的概念295 13.3 指針和指針變量296 13.3.1 指針變量的定義297 13.3.2 指針變量的初始化299 13.3.3 指針常見錯誤302 13.4 指針作為函數的參數307 13.4.1 互換兩個數307 13.4.2 函數參數傳指針和傳數據的區別309 13.4.3 定義只讀變量:const310 13.4.4 用const修飾指針變量時的三種效果312 13.5 指針和一維數組的關系314 13.5.1 用指針引用數組元素314 13.5.2 指針的移動315 13.5.3 指針變量的自增運算319 13.5.4 兩個參數確定一個數組326 13.5.5 指針變量占幾個字節?328 13.6 函數、數組、指針相結合的程序練習329 13.7 動態內存分配332 13.7.1 傳統數組的缺點332 13.7.2 malloc函數的使用1333 13.7.3 malloc函數的使用2337 13.7.4 free函數的使用339 13.7.5 動態內存分配舉例——動態數組的構建342 13.7.6 動態數組長度的擴充和縮小345 13.7.7 靜態內存分配和動態內存分配總結347 13.7.8 多級指針348 13.7.9 跨函數使用動態內存350 13.8 通過指針引用二維數組354 13.8.1 二維數組元素的地址354 13.8.2 二維數組的首地址和數組名355 13.8.3 練習359 13.9 函數指針362 13.9.1 什么是函數指針?362 13.9.2 如何用函數指針調用函數?363 13.10 本章總結364 第14章 字符串367 14.1 字符串常量367 14.2 不能把一個字符串常量賦給一個字符變量368 14.3 字符數組369 14.3.1 字符數組的定義369 14.3.2 字符數組的初始化369 14.3.3 初始化內存函數:memset()372 14.3.4 用scanf輸入字符串374 14.4 字符串與指針376 14.5 如何用scanf給字符指針變量所指向的內存單元初始化378 14.6 字符串處理函數379 14.6.1 字符串輸入函數gets()379 14.6.2 優先使用fgets()函數381 14.6.3 使用gets()和fgets()前注意吸收回車384 14.6.4 練習——判斷字符串是否是回文字符串387 14.6.5 練習——將字符串中的小寫字母轉換成大寫字母392 14.6.6 字符串輸出函數puts()393 14.6.7 字符串輸出函數fputs()395 14.6.8 字符串復制函數strcpy()397 14.6.9 字符串復制函數strncpy()399 14.6.10 內存拷貝函數memcpy()400 14.6.11 sprintf()401 14.6.12 字符串比較函數strcmp()404 14.7 本章總結405 第15章 自定義數據類型——結構體407 15.1 為什么需要結構體?407 15.2 定義和使用結構體變量408 15.2.1 聲明結構體類型408 15.2.2定義結構體類型變量410 15.2.3 結構體變量可進行哪些運算?411 15.2.4 結構體變量的初始化——定義時初始化411 15.2.5 結構體變量的引用412 15.2.6 結構體變量的初始化——先定義后初始化416 15.2.7 結構體字節對齊421 15.3 結構體數組428 15.3.1 結構體數組的定義和引用428 15.3.2 結構體數組定義時初始化430 15.4 結構體指針432 15.4.1 指向結構體變量的指針432 15.4.2 指向結構體數組的指針435 15.5 結構體變量和結構體指針變量作為函數參數438 15.6 結構體舉例——動態構造存放學生信息的結構體數組443 15.7 本章總結446 第16章 鏈表448 16.1 為什么要學習鏈表?448 16.1.1 數組的缺陷448 16.1.2 鏈表的優點449 16.2 鏈表的缺點449 16.3 鏈表的幾個術語450 16.4 鏈表的定義和分類451 16.4.1 鏈表的定義451 16.4.2 鏈表的分類452 16.5 寫一個鏈表程序452 16.6 鏈表的使用——插入結點459 16.7 鏈表的使用——刪除結點468 16.8 鏈表的使用——銷毀鏈表473 16.9 鏈表排序算法478 16.9.1 如何互換結點?478 16.9.2 鏈表冒泡排序480 16.9.3 鏈表插入排序484 16.9.4 鏈表選擇排序487 16.9.5 鏈表快速排序488 16.9.6 鏈表排序總結492 16.10 單循環鏈表492 16.11 雙向鏈表498 16.12 typedef的用法503 16.13 本章總結506 第17章 棧508 17.1 內存的分區508 17.2 線性表509 17.3 棧的定義510 17.4 棧的基本操作510 17.5 鏈棧程序演示511 17.6 棧的應用520 17.7 本章總結528 第18章 隊列(Queue)529 18.1 隊列的定義529 18.2 順序隊列529 18.3 鏈式隊列的基本操作530 18.4 鏈式隊列程序演示531 18.5 隊列的應用538 第19章 文件操作540 19.1 文件概述541 19.1.1 文件的定義541 19.1.2 文件的分類541 19.2 文件類型指針變量542 19.3 文件的打開545 19.3.1 文件的打開545 19.3.2 文件的使用方式546 19.3.3 程序舉例——打開文件547 19.4 文件的關閉550 19.5 文件讀寫函數概述551 19.6 fgetc和fputc551 19.6.1 fputc()551 19.6.2 fgetc()554 19.6.3 fgetc()程序舉例555 19.6.4 fgetc和fputc結合程序舉例559 19.6.5 如何判斷文件是否為空?560 19.7 fgets()和fputs()561 19.7.1 fgets()561 19.7.2 fputs()563 19.8 移動文件位置指針:fseek()和rewind()566 19.8.1 fseek()566 19.8.2 rewind()566 19.9 格式化讀寫函數:fprintf()和fscanf()567 19.10 數據塊讀寫函數:fread()和fwrite()569 19.10.1 fwrite()函數570 19.10.2 fread()函數572 19.10.3 ftell()579 19.10.4 如何用fread()和fwrite()刪除文件中的數據塊?582 19.10.5 練習589 19.11 本章總結594 第20章 頭文件597 20.1 程序是如何編譯生成可執行文件的?597 20.2 頭文件概述597 20.2.1 什么是頭文件?597 20.2.2 頭文件的作用598 20.2.3 什么樣的內容適合放在頭文件中?599 20.3 # include <>和# include ""的區別:600 20.4 如何自定義頭文件?601 20.4.1 頭文件的組成部分601 20.4.2 #ifndef/#define/#endif602 20.5 本意總結604 第21章 位操作運算符606 21.1 按位與 &606 21.2 按位或 |607 21.3 按位異或 ^607 21.4 左移運算符 <<609 21.5 右移運算符 >>610 21.6 本章總結612 附錄613 附錄一 gcc編譯工具的使用613 1. 什么是gcc?613 2. gcc的特點613 3. gcc的編譯過程613 4. gcc常用選項615 5. gcc編譯多個文件618 附錄二 make自動化編譯工具的使用621 1. make與makefile介紹621 2. makefile基本規則621 3. 簡單的makefile編寫624 4. make自動化變量629 5. makefile的簡化630 6. makefile隱含規則632 7. 存在多個makefile文件時執行哪個?633 附錄三 gdb調試工具的使用634 1. 什么是gdb?634 2. 感性的認識gdb的功能634 3. gdb基本功能638 4. gdb高級用法640 4.1 查看運行時數據640 4.2 程序錯誤644 4.3 gdb調試邏輯錯誤644 4.4 gdb調試段錯誤646 附錄四 鏈接庫648 1. 庫的定義和分類648 2. 靜態庫648 2.1 什么是靜態庫?648 2.2 如何創建靜態庫?649 3. 動態庫652 3.1 什么是動態庫?652 3.2 如何創建動態庫?653 3.3 修改LD_LIBRARY_PTAH環境變量655 3.4 通過/etc/profile、~/.bashrc和~/.profile文件配置路徑656 3.5 通過/etc/ld.so.conf文件配置路徑656 4. 庫文件和頭文件的區別與聯系657 附錄五 運算符的優先級和結合性659 附錄六 常用ASCII碼表620 本書是學習C語言的入門書籍,內容非常全面,包含C語言基礎知識、流程控制、數組、函數、指針、字符串、結構體、鏈表、文件操作、棧和隊列、自定義頭文件、多文件編譯、Linux下C文件的編譯和鏈接、鏈接庫等知識點。本書并不單純講解理論,還配有大量的程序,每個知識點都結合程序解講。這樣讀者理解起來更加容易,也能夠在遇到實際問題時進行編程。
本書主要針對學習C語言的初學者,即使完全沒有編程基礎,也能夠通過閱讀本書快速掌握C語言的核心知識。 |