內容簡介 本書作為C語言程序設計的入門與應用教材,共分13章,主要包括C語言概述、C語言程序設計的初步知識、順序結構程序設計、選擇結構程序設計、循環結構程序設計、數組、函數、編譯預處理、指針、構造數據類型、文件、位運算、項目實踐等內容。本書注重基礎,突出應用。每章均有“小型案例實訓”,可以幫助讀者綜合運用本章知識點,提高實際編程能力。全書最后一章綜合應用前面各章所學的C語言知識,詳細分析了一個實際項目的開發全過程,從而幫助讀者將前面所學的知識點串聯起來,達到從程序設計的角度加以靈活運用的目的。 本書易教易學、學以致用、注重能力,對初學者容易混淆的內容進行了重點提示和講解。本書適合作為普通高等院校應用型本科(含部分專科、高職類)各相關專業的程序設計教材,也適合編程開發人員培訓、自學使用。 前 言 為適應當前普通高等學校注重培養應用型人才的需求,清華大學出版社推出了《高等學校應用型特色規劃教材》叢書。本書是系列叢書中的一本,依據普通高等院校教學大綱以及實際開發經驗組織內容,注重理論的嚴謹性和完整性,案例豐富、實用性強,力求使學生在掌握C編程語言的同時獲得程序開發的基本思想并得到一定程度的項目開發實訓,以培養學生獨立開發較為復雜系統的能力。 C語言功能豐富,表達能力強,使用靈活方便,應用面廣,具有完善的模塊程序結構,可移植性好,它的高級語言形式、低級語言功能具有獨特的魅力,使用C語言進行程序設計已成為軟件開發的一個主流。現今,C語言已被大多數高等學校作為典型的計算機教學語言。 本書作為C語言程序設計的入門與應用教材,共分13章,主要內容包括:C語言概述、C語言程序設計的初步知識、順序結構程序設計、選擇結構程序設計、循環結構程序設計、數組、函數、編譯預處理、指針、構造數據類型、文件、位運算、項目實踐等。本書注重基礎,突出應用,除最后一章外每章均有“小型案例實訓”,以使讀者能夠綜合運用本章所學知識點提高實際編程能力。全書最后一章綜合應用前面各章所學的C語言知識,詳細分析了項目開發的全過程,能夠幫助學生將前面所學的知識點串聯起來,真正掌握程序設計的核心內容。 本書具有如下特色。 1. 易于教學和自學,適合初學者 本書充分考慮了初學者學習C語言的特點,按照循序漸進、難點分散的原則組織內容,用淺顯的文字,闡明復雜、靈活的概念,通過豐富的示例解釋難點與重點,力求做到語言通俗、概念清晰、易學實用,以使讀者能夠上手快、學得會、用得著。 2. 注重基礎內容,突出實用性 C語言博大精深,本書里我們精選了最基本、對初學者最重要、最實用的內容進行介紹,不刻意追求所謂的全面和詳盡。對于較生僻的內容,本書也從概念講解入手進行簡單介紹,以保證C語言本身的完整性。力求做到內容新穎、實用,邏輯性強,完整性好,重點突出。 3. 強化編程思想,突出應用性 本書不只是講解C語言的語法規則,更重要的是培養讀者的C語言程序設計能力。不是送諸位一條魚,而是教會諸位釣魚的方法。全書始終強化編程思想,通過例題、習題、小型案例和項目案例,有意識地不斷強化,給讀者以潛移默化的影響。希望讀者一定要重視動手編程的能力。衡量這門課學習的好壞,不是看“知不知道”,而是看“會不會干”。 本書適合作為普通高等學校應用型本科(含部分專科、高職類)各相關專業的程序設計教材,也適合編程開發人員培訓和自學使用。 本書免費提供等級考試系統、電子教案、程序源代碼以及等級考試題庫,讀者可以從WWW.tup.com.cn網站下載。 特別感謝安徽師范大學計算機學院許勇院長在百忙之中審讀了書稿,亦感謝中興通訊股份有限公司的資深高級程序員王國全提供了寶貴的修改意見并編寫了第13章。本書由吳剛山、王廷蔚、王春艷主編,馬軍、陸紅蕾、周岳峰任副主編。在成書過程中,何光明、陳海燕、王珊珊、周海霞、盧振俠、石雅琴、張華麗、陳智、繆靜文、劉邦輝、王倩、馬新兵等在內容編寫、程序測試、文字校對等過程中付出了辛勤勞動,在此一并表示感謝。 由于作者水平有限,書中難免存在不當之處,懇請廣大讀者批評指正。聯系郵箱:iteditor@126.com。 作 者 目 錄 第1章 C語言概述 1 1.1 C語言的發展及特點 1 1.1.1 C語言的發展 1 1.1.2 C語言的特點 2 1.2 C語言程序的格式、構成及其基本要求 3 1.2.1 C語言程序的格式 4 1.2.2 C語言程序的構成 4 1.2.3 C語言程序的基本要求 6 1.3 C語言程序上機調試步驟和方法 6 1.4 算法 8 1.4.1 算法的概念 8 1.4.2 算法的特性 9 1.4.3 算法的表示方法 9 1.4.4 結構化程序設計 10 1.5 小型案例實訓 12 1.6 學習加油站 13 1.6.1 重點整理 13 1.6.2 典型題解 14 1.7 上機實驗 15 1.8 習題 15 第2章 C語言程序設計的初步知識 17 2.1 C語言的數據類型 17 2.2 常量、變量和標識符 18 2.2.1 標識符 18 2.2.2 常量 19 2.2.3 變量 19 2.3 整型數據 22 2.3.1 整型常量 22 2.3.2 整型變量 23 2.4 實型數據 24 2.4.1 實型常量 24 2.4.2 實型變量 25 2.5 字符型數據 25 2.5.1 字符常量 25 2.5.2 字符變量 26 2.5.3 字符串常量 28 2.6 算術運算符和算術表達式 29 2.6.1 基本的算術運算符和算術表達式 29 2.6.2 算術運算符的優先級、結合性 30 2.7 賦值運算符和賦值表達式 30 2.7.1 基本賦值運算符 30 2.7.2 復合賦值運算符 30 2.7.3 賦值表達式 31 2.8 逗號運算符和逗號表達式 32 2.9 自增運算符、自減運算符及C語言運算符的優先級 33 2.9.1 自增運算符 33 2.9.2 自減運算符 33 2.9.3 C語言運算符的優先級與結合性 33 2.10 不同類型數據間的混合運算 34 2.11 小型案例實訓 36 2.12 學習加油站 36 2.12.1 重點整理 36 2.12.2 典型題解 37 2.13 上機實驗 39 2.14 習題 40 第3章 順序結構程序設計 42 3.1 C語句 42 3.2 數據的輸出 44 3.2.1 字符輸出函數(putchar函數) 44 3.2.2 格式輸出函數——printf函數 44 3.3 數據的輸入 48 3.3.1 字符輸入函數(getchar函數) 48 3.3.2 格式輸入函數(scanf函數) 48 3.4 小型案例實訓 50 3.5 學習加油站 52 3.5.1 重點整理 52 3.5.2 典型題解 53 3.6 上機實驗 55 3.7 習題 55 第4章 選擇結構程序設計 58 4.1 關系運算符和關系表達式 58 4.1.1 關系運算符及其優先級 58 4.1.2 關系表達式 59 4.2 邏輯運算符和邏輯表達式 60 4.2.1 邏輯運算符及其優先級次序 60 4.2.2 邏輯表達式 61 4.3 條件運算符和條件表達式 62 4.4 if語句 63 4.4.1 if語句的三種形式 63 4.4.2 if語句的嵌套 66 4.5 switch語句 68 4.5.1 switch語句的基本格式 68 4.5.2 break語句 69 4.6 程序舉例 70 4.7 小型案例實訓 73 4.8 學習加油站 75 4.8.1 重點整理 75 4.8.2 典型題解 77 4.9 上機實驗 79 4.10 習題 79 第5章 循環結構程序設計 82 5.1 while語句 82 5.1.1 while循環語句的一般格式 82 5.1.2 while循環語句的執行過程 83 5.2 do-while語句 84 5.2.1 do-while循環語句的一般格式 84 5.2.2 do-while循環語句的執行過程 85 5.3 for語句 86 5.3.1 for循環語句的一般格式 86 5.3.2 for循環語句的執行過程 87 5.4 break和continue語句在循環體中的作用 89 5.4.1 break語句在循環體中的作用 89 5.4.2 continue語句在循環體中的作用 89 5.5 語句標號和goto語句 90 5.5.1 語句標號 90 5.5.2 goto語句 90 5.6 循環結構的嵌套 91 5.7 小型案例實訓 93 5.8 學習加油站 95 5.8.1 重點整理 95 5.8.2 典型題解 96 5.9 上機實驗 99 5.10 習題 99 第6章 數組 103 6.1 一維數組 103 6.1.1 一維數組的定義 103 6.1.2 一維數組元素的引用 104 6.1.3 一維數組的初始化 104 6.1.4 一維數組的應用 105 6.2 二維數組 107 6.2.1 二維數組的定義 107 6.2.2 二維數組元素的引用 108 6.2.3 二維數組的初始化 108 6.2.4 二維數組的應用 109 6.3 字符數組 111 6.3.1 字符數組的定義及初始化 111 6.3.2 字符數組的引用 112 6.3.3 字符串處理函數 114 6.3.4 字符串數組 117 6.4 小型案例實訓 119 6.5 學習加油站 121 6.5.1 重點整理 121 6.5.2 典型題解 122 6.6 上機實驗 124 6.7 習題 124 第7章 函數 128 7.1 函數概述 128 7.1.1 庫函數的使用 128 7.1.2 函數的定義 130 7.2 函數的參數和返回值 132 7.2.1 函數的參數 132 7.2.2 函數的返回值 133 7.2.3 函數的聲明 134 7.3 函數的參數傳遞方式 136 7.3.1 普通變量作為函數參數 136 7.3.2 數組作為函數參數 136 7.4 函數的調用 138 7.4.1 函數的一般調用 138 7.4.2 函數的嵌套調用 139 7.4.3 函數的遞歸調用 140 7.5 變量的作用域和存儲類型 143 7.5.1 變量的作用域 143 7.5.2 變量的存儲類型 144 7.6 函數的作用范圍 149 7.6.1 內部函數 149 7.6.2 外部函數 149 7.7 小型案例實訓 151 7.8 學習加油站 153 7.8.1 重點整理 153 7.8.2 典型題解 154 7.9 上機實驗 157 7.10 習題 158 第8章 編譯預處理 162 8.1 宏定義 162 8.1.1 無參宏 162 8.1.2 帶參宏 164 8.1.3 終止宏定義 166 8.2 文件包含命令 166 8.3 條件編譯 168 8.4 小型案例實訓 171 8.5 學習加油站 173 8.5.1 重點整理 173 8.5.2 典型題解 174 8.6 上機實驗 176 8.7 習題 176 第9章 指針 179 9.1 指針的概述 179 9.2 指針變量 180 9.2.1 指針變量的定義 180 9.2.2 指針變量的引用 181 9.2.3 指針變量的運算 183 9.3 指針與數組 185 9.3.1 指針與一維數組 185 9.3.2 指針與二維數組 188 9.3.3 指向行指針的指針變量 190 9.4 指針與字符串 191 9.5 指針數組 193 9.6 指針與函數 195 9.6.1 指針變量作為函數的參數 195 9.6.2 數組名作為函數的參數 196 9.6.3 函數的返回值為指針 198 9.6.4 指向函數的指針 199 9.6.5 指向函數的指針作為函數的參數 201 9.7 指向指針的指針 202 9.8 main()函數的形參和void指針 204 9.8.1 指針數組作為main函數的形參 204 9.8.2 指向void的指針變量 206 9.8.3 動態存儲分配 207 9.9 小型案例實訓 208 9.10 學習加油站 211 9.10.1 重點整理 211 9.10.2 典型題解 212 9.11 上機實驗 216 9.12 習題 217 第10章 構造數據類型 220 10.1 結構體 220 10.1.1 結構體定義 220 10.1.2 結構體變量 222 10.1.3 結構體變量的使用 223 10.2 結構體與函數 228 10.2.1 結構變量與結構數組作函數的參數 228 10.2.2 結構變量作為函數的返回值 230 10.3 結構體與指針 230 10.3.1 結構體變量指針 231 10.3.2 結構體數組指針 232 10.4 鏈表 234 10.4.1 鏈表概述 234 10.4.2 鏈表的基本操作 235 10.5 共用體 240 10.6 枚舉類型 242 10.7 typedef類型聲明 243 10.8 小型案例實訓 245 10.9 學習加油站 251 10.9.1 重點整理 251 10.9.2 典型題解 252 10.10 上機實驗 256 10.11 習題 257 第11章 文件 261 11.1 文件概述 261 11.2 文件類型指針 262 11.3 文件的基本操作 263 11.3.1 文件的打開 263 11.3.2 文件的關閉 264 11.3.3 文件讀函數 265 11.3.4 文件的寫函數 268 11.4 文件的定位函數 273 11.5 文件出錯檢測函數 276 11.6 小型案例實訓 277 11.7 學習加油站 282 11.7.1 重點整理 282 11.7.2 典型題解 283 11.8 上機實驗 288 11.9 習題 289 第12章 位運算 293 12.1 位運算符 293 12.2 位段 299 12.3 小型案例實訓 300 12.4 學習加油站 303 12.4.1 重點整理 303 12.4.2 典型題解 304 12.5 上機實驗 305 12.6 習題 305 第13章 項目實踐 307 13.1 軟件開發過程 307 13.1.1 可行性和需求分析 307 13.1.2 系統設計 308 13.1.3 軟件編碼 312 13.1.4 軟件測試 316 13.1.5 小結 316 13.2 旅店管理系統 316 13.2.1 需求分析 317 13.2.2 系統設計 317 13.2.3 程序代碼 319 13.2.4 軟件測試 350 參考答案 351 參考文獻 355