●章 程序設計概述 11.1 什麼是程序設計 11.2 計算機的基本組成 21.2.1 計算機硬件 21.2.2 計算機軟件 41.3 程序設計語言 41.3.1 機器語言 41.3.2 彙編語言 51.3.3 不錯語言 61.3.4 智能語言 71.3.5 C語言 71.4 程序設計過程 71.4.1 算法設計 81.4.2 編碼 111.4.3 編譯與鏈接 111.4.4 調試與維護 121.5 編程規範及常見問題 131.5.1 真的需要算法設計階段嗎 131.5.2 為什麼不用自然語言編程 131.5.3 寄存器、主存儲器和外存儲器有什麼不同 131.5.4 所有的計算機能夠執行的指令都是相同的嗎 131.5.5 為什麼需要編譯和鏈接 131.5.6 為什麼在不同類型的計算機上運行C語言程序需要使用不同的編譯器 141.5.7 為什麼不同類型的計算機不能運行同一個彙編程序 141.6 小結 141.7 自測題 141.8 實戰訓練 15第2章 初識C語言 162.1 一個完整的C語言程序 162.1.1 注釋 172.1.2 預編譯 172.1.3 主程序 182.2 C語言的開發環境 202.2.1 VS2010的安裝 202.2.2 程序輸入 202.2.3 編譯鏈接 242.2.4 程序的運行 252.2.5 程序的調試 282.3 編程規範及常見問題 302.3.1 注意注釋 302.3.2 良好的排版習慣 302.3.3 為什麼要學C語言 312.3.4 如何學習程序設計 312.3.5 什麼是庫 312.4 小結 322.5 自測題 322.6 實戰訓練 32第3章 順序程序設計 333.1 常量與變量 333.1.1 變量定義 333.1.2 數據類型 353.1.3 常量與符號常量 393.2 數據的輸入/輸出 443.2.1 字符的輸入/輸出 443.2.2 格式化輸入/輸出 463.3 算術運算 543.3.1 算術表達式 543.3.2 不同類型數據間的混合運算 563.3.3 強制類型轉換 573.3.4 數學函數庫 593.4 賦值運算 603.4.1 賦值表達式 603.4.2 賦值的嵌套 623.4.3 復合賦值運算 623.4.4 自增和自減運算符 63*3.5 信息表示 643.5.1 數制間的轉換 643.5.2 整數的表示 663.5.3 實數的表示 693.6 順序程序設計示例 693.7 程序規範及常見問題 713.7.1 變量命名 713.7.2 運算符的優先級 713.7.3 數據運算時的注意事項 713.7.4 為什麼要定義符號常量 723.7.5 變量定義後且對它賦值前的值是什麼 723.7.6 不要在表達式中插入有副作用的子表達式 723.8 小結 723.9 自測題 733.10 實戰訓練 74第4章 分支程序設計 764.1 關繫表達式 764.2 邏輯表達式 784.2.1 邏輯運算 784.2.2 短路求值 804.3 if語句 824.3.1 if語句的形式 824.3.2 if語句的嵌套 874.3.3 條件表達式 904.4 switch語句及其應用 924.5 程序規範及常見問題 1024.5.1 條件語句程序的排版 1024.5.2 不要連用關繫運算符 1024.5.3 注意短路求值 1024.5.4 常見錯誤 1024.6 小結 1034.7 自測題 1034.8 實戰訓練 104第5章 循環程序設計 1065.1 計數循環 1065.1.1 for語句 1065.1.2 for語句的進一步討論 1155.1.3 for循環的嵌套 1165.2 break和continue語句 1185.2.1 break語句 1185.2.2 continue語句 1205.3 基於哨兵的循環 1215.3.1 while語句 1225.3.2 do…while循環 1285.4 循環的中途退出 1305.5 編程規範和常見問題 1345.5.1 循環語句程序的排版 1345.5.2 優化循環體 1345.5.3 使用for循環的注意事項 1345.5.4 常見錯誤 1345.5.5 三個循環語句之間的關繫 1355.6 小結 1355.7 自測題 1355.8 實戰訓練 136第6章 過程封裝——函數 1396.1 函數的定義 1406.1.1 函數的基本結構 1406.1.2 return語句 1416.1.3 函數示例 1416.2 函數的使用 1446.2.1 函數原型的聲明 1446.2.2 函數調用 1466.2.3 將函數與主程序放在一起 1476.2.4 函數調用過程 1516.3 帶參數的宏 1546.4 變量的作用域 1556.4.1 局部變量 1556.4.2 全局變量 1566.5 變量的存儲類別 1586.5.1 自動變量 1586.5.2 靜態變量 1596.5.3 寄存器變量 1606.5.4 外部變量 161*6.6 多源文件程序的編譯鏈接 1636.7 遞歸程序設計 1646.7.1 遞歸的基本概念 1656.7.2 遞歸函數的應用 1676.8 編程規範及常見問題 1736.8.1 使用函數時的建議 1736.8.2 函數命名 1746.8.3 沒有返回值的函數是否需要return語句 1746.8.4 盡量避免使用全局變量 1746.8.5 盡量避免實際參數表達式有副作用 1756.8.6 常見錯誤 1756.9 小結 1756.10 自測題 1766.11 實戰訓練 177第7章 批量數據處理——數組 1797.1 一維數組 1797.1.1 一維數組的定義 1797.1.2  素的引用 1807.1.3 一維數組的內存映像 1847.1.4 一維數組的應用 1857.2 數組作為函數的參數 1907.3 查找算法 1957.3.1 順序查找 1967.3.2 二分查找 1977.4 排序算法 2017.4.1 直接選擇排序法 2017.4.2 冒泡排序法 2037.5 二維數組 2057.5.1 二維數組的定義 2067.5.2 二素的引用 2077.5.3 二維數組的內存映像 2087.5.4 二維數組的應用 2087.5.5 二維數組作為函數的參數 2187.6 字符串 2207.6.1 字符串的存儲及初始化 2207.6.2 字符串的輸入/輸出 2217.6.3 字符串作為函數參數 2257.6.4 字符串處理函數 2307.6.5 字符串的應用 2327.7 程序規範及常見問題 2347.7.1 數組下標必須從0開始嗎 2347.7.2 能用表達式des = src將字符串src賦給字符串des嗎 2347.7.3 為什麼存放字符串的數組長度比字符串的實際長度多一個字符2357.7.4 有了scanf函數為什麼還需要gets函數 2357.7.5 傳遞字符串為什麼隻需要一個參數 2357.7.6 傳遞二維數組時形式參數中第二個方括號中的值為什麼必須指定 2357.8 小結 2357.9 自測題 2367.10 實戰訓練 237第8章 指針 2408.1 指針的概念 2408.1.1 指針與間接訪問 2408.1.2 指針變量的定義 2418.1.3 指針變量的操作 2428.2 指針與數組 2468.2.1 指素的指針 2468.2.2 指針運算與數組訪問 2468.3 指針與函數 2508.3.1 指針作為參數 2508.3.2 返回指針的函數 2548.3.3 數組作為函數參數的進一步討論 2568.4 動態內存分配 2598.4.1 動態變量 2598.4.2 動態變量的創建 2598.4.3 動態變量的消亡 2618.4.4 內存洩露 2618.4.5 查找malloc和calloc的失誤 2618.4.6 動態變量應用 2638.5 指針與字符串 2658.5.1 用指向字符的指針變量表示字符串 2658.5.2 字符串作為函數的參數 2668.5.3 返回字符串的函數 2688.6 指針數組與多級指針 2708.6.1 指針數組 270*8.6.2 main函數的參數 272*8.6.3 多級指針 276*8.6.4 二維數組與指向一維數組的指針 277*8.6.5 動態二維數組 279*8.7 函數指針 2808.7.1 指向函數的指針 2808.7.2 函數指針作為函數參數 2818.7.3 函數指針用於菜單選擇 2848.8 編程規範與常見問題 2858.8.1 int x, *p = &x;有錯嗎 2858.8.2 避免使用懸空指針和未初始化的指針 2868.8.3 不同類型的指針之間為什麼不能賦值 2868.8.4 指針與數組等價嗎 2868.8.5 值傳遞和指針傳遞的區別是什麼 2868.8.6 返回指針的函數必須確保返回值指向的變量在函數執行結束時依然存在 2878.8.7 使用動態變量時必須嚴格防止內存洩露 2878.9 小結 2878.10 自測題 2888.11 實戰訓練 289第9章 更多的數據類型 2909.1 枚舉類型 2909.2 類型別名 2939.3 結構體 2949.3.1 結構體的概念 2949.3.2 結構體類型的定義 2959.3.3 結構體類型變量的定義 2969.3.4 結構體類型變量的使用 2999.3.5 結構體與函數 3029.4 鏈表 3089.4.1 鏈表的概念 3089.4.2 單鏈表的存儲 3109.4.3 單鏈表的操作 3119.4.4 帶頭結點的單鏈表 3129.4.5 單鏈表實例 3139.5 共用體 3169.5.1 共用體概念和共用體類型的定義 3169.5.2 共用體類型變量的定義及初始化 3189.5.3 共用體變量的使用 3189.6 編程規範及常見問題 3249.6.1 結構體中每個字段的類型都不相同嗎 3249.6.2 單鏈表中為什麼要引入頭結點 3249.6.3 引入結構體有什麼用處 3249.6.4 結構體和共用體的區別 3249.6.5 結構體和共用體類型定義時能否省略類型名 3249.6.6 結構體類型定義與結構體變量定義 3259.7 小結 3259.8 自測題 3259.9 實戰訓練 3260章 位運算與位段 32810.1 位運算 32810.1.1 “按位與”運算 32810.1.2 “按位或”運算 33010.1.3 “按位異或”運算 33110.1.4 “按位取反”運算 33310.1.5 “左移”運算 33510.1.6 “右移”運算 33510.1.7 位運算與賦值運算 33710.1.8 不同長度的數據進行位運算 33710.2 位段 33810.2.1 位段的概念及定義 33810.2.2 位段的引用 33910.3 編程規範及常見問題 34110.3.1 檢驗某數中指定位的值 34110.3.2 將數據中的某一位的值置成0 34110.3.3 將數據中的某一位的值置成1 34210.3.4 將數據中的某一位的值取反 34210.4 小結 34210.5 自測題 34210.6 實戰訓練 3431章 文件 34411.1 內存與外存 34411.2 文件的概念 34511.2.1 什麼是文件 34511.2.2 ASCII文件與二進制文件 34611.3 文件緩衝與文件指針 34611.4 文件的打開與關閉 34711.4.1 打開文件 34711.4.2 關閉文件 34911.5 ASCII文件的讀寫 34911.5.1 字符讀寫函數 35011.5.2 字符串讀寫函數 35211.5.3 數值讀寫函數 35411.6 二進制文件的讀寫 35811.6.1 fwrite函數 35811.6.2 fread函數 36011.7 文件的順序訪問 36211.7.1 什麼是文件的順序訪問 36211.7.2 feof函數 36311.8 文件的隨機訪問 36411.8.1 文件定位指針 36511.8.2 rewind函數 36511.8.3 fseek函數 36711.8.4 ftell函數 369*11.9 文件操作與控制臺操作 37011.10 編程規範及常見問題 37111.10.1 良好的文件使用習慣 37111.10.2 文件打開方式選擇 37211.10.3 文件指針與文件定位指針 37211.10.4 流與文件 37211.11 小結 37211.12 自測題 37311.13 實戰訓練 3732章 軟件開發過程 37412.1 結構化程序設計思想 37412.2 自頂向下分解示例:“猜硬幣”遊戲 37512.2.1 頂層分解 37512.2.2 prn_instruction函數的實現 37612.2.3 play函數的實現 37612.2.4 get_call_from_user函數的實現 37812.3 模塊劃分示例:“石頭、剪刀、布”遊戲 38012.3.1 自頂向下分解 38112.3.2 模塊劃分 38212.3.3 頭文件的設計 38312.3.4 模塊實現 38612.4 設計自己的庫示例:隨機函數庫的設計和實現 38912.4.1 隨機函數庫的功能設計 39012.4.2 接口文件的設計 39012.4.3 實現文件的設計 39112.5 隨機函數庫的應用示例:模擬龜兔賽跑 39212.5.1 自頂向下分解 39212.5.2 模塊劃分及實現 39312.6 軟件開發過程 39512.6.1 軟件危機 39512.6.2 軟件工程 39612.7 軟件開發過程示例:學生管理繫統的設計與實現 39712.7.1 需求分析 39712.7.2 概要設計 39812.7.3 詳細設計 40012.7.4 編碼與測試 40212.8 軟件開發示例:網上書店的設計 40712.8.1 需求分析 40712.8.2 概要設計 40812.8.3 詳細設計 41112.9 編程規範及常見問題 41312.9.1 頭文件的格式 41312.9.2 實現一個庫為什麼需要兩個文件 41312.9.3 慎用全局變量 41412.10 小結 41412.11 自測題 41412.12 實戰訓練 4143章 通用算法設計 41613.1 枚舉法 41613.2 貪婪法 42313.3 分治法 42713.4 動態規劃 43113.5 回溯法 43513.6 小結 44213.7 實戰訓練 442附錄 443附錄1 章自測題答案 443附錄2 第2章自測題答案 445附錄3 第3章自測題答案 446附錄4 第4章自測題答案 451附錄5 第5章自測題答案 453附錄6 第6章自測題答案 455附錄7 第7章自測題答案 459附錄8 第8章自測題答案 463附錄9 第9章自測題答案 466附錄10 0章自測題答案 467附錄11 1章自測題答案 470附錄12 2章自測題答案 472附錄13 ASCII編碼表 474
內容簡介
本書以C語言為編程環境,由淺入深地介紹了C語言的完整內容以及過程化程序設計的思想和方法。全書共有13章。第 1章介紹了什麼是程序設計。第 2章給出了一個完整的C語言程序,並介紹了如何在VS2010中輸入、編譯鏈接及調試程序。第3~5章分別介紹了C語言中支持結構化程序設計的3種結構:順序、分支和循環所必需的工具。第6章介紹了如何編寫及應用函數;第7章介紹了處理批量數據的工具,即數組。上述章節的內容都是C語言的核心知識,請務必掌握。第8~11章分別講解了結構體、共用體、鏈表、位運算和文件等編程技術。第 12章講解了如何用結構化程序設計思想指導一個大程序的開發,以及軟件開發的基本過程。該章中用“猜硬幣”遊戲介紹了自頂向下分解的過程,用“石頭、剪刀、布”遊戲介紹了模塊劃分,用“龜兔賽跑模擬”的例子介紹了如何建立一個自己的庫以及如何應用自己創建的庫,用學生管理繫統和書店管理繫統講述了軟件開發的過程。......