內容簡介
C語言是當今國際上廣泛流行的、最具發展前途的程序設計語言之一,本書講解C語言程序設計的基礎知識及其編程技巧。全書共分11章,包括緒論,基本數據類型,選擇結構,循環結構,數組,函數,編譯預處理,指針,結構體、共用體和枚舉類型,指向結構體的指針與鏈表,文件等內容,同時每章包含豐富的課后習題。書中示例側重實用性和啟發性,趣味性強,通俗易懂,使讀者能夠快速掌握C語言的基礎知識與編程技巧,為實戰應用打下堅實的基礎。
本書由淺入深,采用多案例教學,強調應用性和實踐性,可作為應用型本科、高職院校各專業學生學習C語言程序設計的教材,也可供計算機等級考試者和其他各類學習者使用參考,還可作為軟件開發人員的參考用書。
前 言
C語言程序設計是高等學校計算機相關專業的編程入門基礎課程,在計算機教學中起到非常重要的作用。C語言是一門面向過程的編程語言。從C語言產生到現在,它已經成為最重要和最流行的編程語言之一。在各種流行的編程語言中,都能看到C語言的影子,如Java、C#的語法與C語言基本相同。學習、掌握C語言是每一名計算機技術人員的基本技能之一。
C語言既具有高級語言的強大功能,又有很多直接操作計算機硬件的功能(這些都是匯編語言的功能),因此,C語言通常被稱為中級語言。學習和掌握C語言,既可以增進對計算機底層工作機制的了解,又能為進一步學習其他高級語言打下堅實的基礎。
本書共分為11章,以培養C語言應用能力為主線,介紹了C語言的基本概念、語法規則和利用C語言進行程序設計的方法。第1章重點介紹C語言的特點、基本結構、輸入輸出語句,以及C程序的編輯、編譯和運行方法等。第2章重點介紹C語言的基本數據類型、表示方法和存儲格式,C語言變量的定義和賦值、不同數據類型間的類型轉換,以及C語言中常用運算符的功能、使用方法、結合性和優先級等。第3章重點介紹程序設計的一般方法、結構化程序設計思想以及C語言的順序結構和選擇結構的實現方法。第4章重點介紹C語言的3種循環結構,即while語句、do-while語句和for語句,循環結構中常用語句break和continue的使用方法,以及循環語句的嵌套。第5章重點介紹C語言中數組的定義和使用、字符數組的定義和使用,以及常用字符串函數。第6章重點介紹模塊化編程思想、C語言函數的定義和調用、函數的嵌套調用和遞歸調用。第7章重點介紹編譯預處理的相關概念、宏定義的創建和使用。第8章重點介紹指針與指針變量的概念、指針的基本運算、指針與數組的運算、指針與函數的使用。第9章重點介紹C語言中結構體類型、共用體類型和枚舉類型的定義和使用。第10章重點介紹C語言中指向結構體變量和結構體數組的指針變量的使用,結構體指針變量作為函數參數的使用,動態存儲分配以及鏈表的概念和基本操作。第11章重點介紹C語言文件的基本類型和相關操作。
本書由李紹華、刁建華、李敏擔任主編,趙靜、關菁華擔任副主編。第1章、第6章及第8章由李紹華編寫,第3章和第4章由刁建華編寫,第2章和第7章由李敏編寫,第5章和第9章由趙靜編寫,第10章和第11章由關菁華編寫,全書由李紹華、刁建華、李敏負責統稿。
本書在編寫過程中,得到了大連外國語大學軟件學院祁瑞華教授以及任課教師的大力支持,王語涵同學參與了本書的文字校驗工作,在此表示衷心感謝。
本書的出版得到了大連外國語大學校級教學改革研究重點項目(2017Z16)、大連外國語大學2017年度高等教育研究課題(2017G18)、教育部2017年第二批產學合作協同育人項目(201702012001、201702012005)的資助。
本教材示例的源程序以及電子教案可以在清華大學出版社網站上免費下載,以供讀者和教學使用。
盡管編者力求完美,但由于水平有限,書中難免會出現一些疏漏,希望此領域的專家和廣大讀者批評指正。
編 者
目錄
第1章 緒論 11.1 C語言的歷史 21.1.1 計算機語言的發展 21.1.2 C語言的發展 21.2 C語言的特點 31.3 C程序的結構 31.3.1 簡單的C程序 31.3.2 C程序的基本結構 61.3.3 C程序的代碼規范 61.4 輸入輸出庫函數的使用 61.4.1 printf()函數 61.4.2 scanf()函數 91.5 C程序的開發過程 11習題1 11第2章 基本數據類型 152.1 C語言的數據類型 162.2 常量數據的表示 162.3 變量的定義 182.4 變量的賦值 202.5 C語言的類型修飾符 222.6 表達式的數據類型轉換 242.6.1 自動類型轉換 242.6.2 強制類型轉換 252.7 C運算符和表達式 252.7.1 算術運算符和算術表達式 262.7.2 關系運算符和關系表達式 272.7.3 邏輯運算符和邏輯表達式 282.7.4 賦值運算符和賦值表達式 302.7.5 逗號運算符和逗號表達式 322.7.6 條件運算符和條件表達式 32習題2 34第3章 選擇結構 353.1 程序設計的一般方法 363.2 結構化程序設計 373.3 順序結構 383.4 選擇結構——if條件語句 393.5 選擇結構——switch語句 48習題3 52第4章 循環結構 634.1 while語句 644.2 do-while語句 684.3 for語句 714.4 break語句和continue語句 774.4.1 break語句 774.4.2 continue語句 794.5 循環語句的嵌套 82習題4 88第5章 數組 995.1 一維數組的定義和引用 1005.1.1 一維數組的定義 1005.1.2 一維數組元素的引用 1015.1.3 一維數組的初始化 1025.2 二維數組的定義和引用 1035.2.1 二維數組的定義 1035.2.2 二維數組元素的引用 1065.2.3 二維數組的初始化 1075.3 字符數組 1085.4 字符串 1095.4.1 字符串的定義和賦值 1095.4.2 字符串的輸入和輸出函數 1115.4.3 字符串操作函數 1135.4.4 二維字符串數組 117習題5 118第6章 函數 1256.1 模塊化編程思想 1266.1.1 程序的模塊化組成結構 1266.1.2 程序的模塊化設計方法 1276.2 函數的定義和調用 1276.2.1 函數的定義 1286.2.2 函數的調用 1326.2.3 函數的聲明 1346.3 函數的參數和返回值 1356.3.1 函數的參數 1356.3.2 函數的返回值 1376.4 函數的嵌套和遞歸調用 1386.4.1 嵌套調用 1386.4.2 遞歸調用 1396.5 數組作為函數參數 1446.5.1 數組元素作函數參數 1446.5.2 數組名作函數參數 1456.6 變量的存儲屬性 1496.6.1 變量的生存周期和作用域 1496.6.2 自動變量 1536.6.3 外部變量 1536.6.4 靜態變量 1546.6.5 變量的存儲類別 1566.7 函數的分類 156習題6 158第7章 編譯預處理 1697.1 預處理的概念 1707.2 宏定義命令 1707.2.1 無參數宏定義命令 1707.2.2 帶參數宏定義命令 1737.3 文件包含命令 1767.4 條件編譯命令 177習題7 179第8章 指針 1818.1 地址與變量 1828.1.1 內存地址 1828.1.2 變量存儲 1838.1.3 變量訪問 1838.2 指針變量 1848.2.1 指針變量的聲明 1848.2.2 指針變量運算符“*”及其使用 1868.2.3 指針變量的初始化 1898.3 指針運算 1908.3.1 指針的算術運算 1908.3.2 指針的關系運算 1918.3.3 指針的賦值運算 1928.4 指針與一維數組和字符串 1928.4.1 指針與一維數組 1928.4.2 指針與字符串 1958.5 指針與二維數組 1998.5.1 指向二維數組元素*p的使用 2018.5.2 指向二維數組中一維數組(*p)[N]的使用 2028.5.3 指針數組*p[ ]的使用 2038.5.4 復合指針**p的使用 2058.6 指針與函數 2068.6.1 指針變量作為函數參數 2068.6.2 指向數組的指針作為函數參數 2098.6.3 指針類型函數 2128.6.4 指向函數的指針 2148.6.5 main函數中的參數 215習題8 217第9章 結構體、共用體和枚舉類型 2319.1 結構體類型的定義 2329.2 結構體類型變量 2339.2.1 結構體變量的定義 2339.2.2 結構體變量中成員的引用 2359.2.3 結構體變量的賦值 2369.2.4 結構體變量的初始化 2379.3 結構體數組 2379.4 共用體 2409.4.1 共用體類型的定義 2409.4.2 共用體變量的定義 2409.4.3 共用體變量的引用 2419.5 枚舉類型 2429.5.1 枚舉類型的定義 2429.5.2 枚舉變量的說明 2439.6 類型定義符typedef 2449.7 位運算符 2459.7.1 按位與運算 2469.7.2 按位或運算 2469.7.3 按位異或運算 2479.7.4 取反運算 2479.7.5 左移運算 2479.7.6 右移運算 247習題9 248第10章 指向結構體的指針與鏈表 25310.1 結構體指針變量的說明和使用 25410.1.1 指向結構體變量的指針 25410.1.2 指向結構體數組的指針 25610.1.3 結構體指針變量作函數 參數 25710.2 動態存儲分配 25910.3 鏈表的概念 26110.4 鏈表的基本操作 262習題10 266第11章 文件 27111.1 C文件概述 27211.2 文件指針 27311.3 文件的打開與關閉 27311.3.1 文件的打開函數 (fopen函數) 27311.3.2 文件關閉函數 (fclose函數) 27511.4 文件的讀寫 27511.4.1 字符讀寫函數fgetc 和fputc 27511.4.2 字符串讀寫函數fgets 和fputs 27911.4.3 數據塊讀寫函數fread 和fwrite 28111.4.4 格式化讀寫函數fscanf 和fprintf 28211.5 文件的隨機讀寫 28411.5.1 文件定位 28411.5.2 文件的隨機讀寫 28511.6 文件檢測函數 28611.6.1 文件結束檢測函數feof() 28611.6.2 讀寫文件出錯檢測函數 ferror() 28611.6.3 文件出錯標志和文件結束 標志置0函數clearerr() 28611.7 C庫文件 286習題11 288附錄A Microsoft Visual C++ 6.0使用手冊 295附錄B ASCII碼對照表 300附錄C 運算符的優先級及結合性 302附錄D 常用庫函數 304參考文獻 307