內容簡介
本書以零基礎講解為宗旨,用實例引導讀者深入學習,采取“基礎入門→核心技術→高級應用→項目開發實戰”的講解模式,深入淺出地講解C語言的各項技術及實戰技能。
本書第Ⅰ篇“基礎入門”主要講解走進C語言的世界、常量與變量、數據類型、輸入和輸出、運算符和表達式、程序流程控制結構等;第Ⅱ篇“核心技術”主要講解數組、算法與流程圖、函數與函數中變量、指針、操作文件、編譯與預處理指令、使用庫函數等;第Ⅲ篇“高級應用”主要講解位運算,結構體、共用體和枚舉,動態數據結構,數據結構進階,排序等;第Ⅳ篇“項目開發實戰”主要講解開發日歷查閱系統、開發員工信息管理系統、開發迷宮小游戲。
本書適合任何想學習C語言編程的人員,無論您是否從事計算機相關行業,無論您是否接觸過C語言,通過學習本書均可快速掌握C語言在項目開發中的知識和技巧。
前 言
“程序開發案例課堂”系列圖書是專門為軟件開發和數據庫初學者量身定制的一套學習用書,整套書涵蓋軟件開發、數據庫設計等方面,具有以下特點。
* 前沿科技
無論是軟件開發還是數據庫設計,我們都精選較為前沿或者用戶群最大的領域推進,幫助讀者認識和了解最新動態。
* 權威的作者團隊
組織國家重點實驗室和資深應用專家聯手編著該套圖書,融合豐富的教學經驗與優秀的管理理念。
* 學習型案例設計
以技術的實際應用過程為主線,全程采用圖解和同步多媒體結合的教學方式,生動、直觀、全面地剖析使用過程中的各種應用技能,降低難度、提高學習效率。
為什么要寫這樣一本書
C語言是一門歷史悠久、博大精深的程序設計語言。它對計算機技術的發展起到了極其重要的促進作用,而且這種促進作用一直在持續并將繼續持續下去。它從產生之時就肩負了很多重要使命,開發操作系統、開發編譯器、開發驅動程序,幾乎可以解決計算機中的大部分問題。C語言幾乎是每一個致力于程序設計人員的必學語言。但從學習之初,很多C語言的初學者都苦于找不到一本通俗易懂、容易入門和案例實用的參考書。通過本書的案例實訓,讀者可以很快地上手流行的工具,提高職業技能,從而幫助解決公司與求職者的雙重需求問題。
本書特色
* 零基礎、入門級的講解
無論您是否從事計算機相關行業,無論您是否接觸過C語言編程,都能從本書中找到最佳起點。
* 超多、實用、專業的范例和項目
本書在編排上緊密結合深入學習C語言編程技術的先后過程,從C語言的基本語法開始,逐步帶領大家深入地學習各種應用技巧,側重實戰技能,使用簡單易懂的實際案例進行分析和操作指導,讓讀者讀起來簡明輕松,操作起來有章可循。
* 隨時檢測自己的學習成果
每章首頁中均提供了學習目標,以指導讀者重點學習及學后檢查。
大部分章節最后的“跟我學上機”板塊,均根據本章內容精選而成,讀者可以隨時檢測自己的學習成果和實戰能力,做到融會貫通。
* 細致入微、貼心提示
本書在講解過程中,在各章中使用了“注意”和“提示”等小貼士,使讀者在學習過程中更清楚地了解相關操作、理解相關概念,并輕松掌握各種操作技巧。
* 專業創作團隊和技術支持
無論您在學習過程中遇到任何問題,均可加入QQ群(案例課堂VIP)進行提問,專家人員會在線答疑。
超值贈送資源
* 全程同步教學錄像
涵蓋本書所有知識點,詳細講解每個實例及項目的過程及技術關鍵點,比看書更輕松地掌握書中所有的C語言編程知識,而且擴展的講解部分可以使您得到比書中更多的收獲。
* 超多容量王牌資源大放送
贈送大量王牌資源,包括本書實例源文件、精美教學幻燈片、精選本書教學視頻、C語言標準庫函數查詢手冊、C程序員職業規劃、全國計算機等級考試二級C考試大綱及應試技巧、C程序員面試技巧、C常見面試題、C常見錯誤及解決方案、C開發經驗及技巧大匯總等。讀者可以通過QQ群(案例課堂VIP)獲取贈送資源,還可以通過配套網站下載贈送資源。
讀者對象
* 沒有任何C語言編程基礎的初學者;
* 有一定的C語言編程基礎,想精通C語言開發的人員;
* 有一定的C語言基礎,沒有項目經驗的人員;
* 正在進行畢業設計的學生;
* 大專院校及培訓學校的老師和學生。
創作團隊
本書由劉春茂和李琪編著,參加編寫的人員還有蒲娟、劉玉萍、裴雨龍、展娜娜、周佳、付紅、李園、郭廣新、侯永崗、王攀登、劉海松、孫若淞、王月嬌、包慧利、陳偉光、胡同夫、王偉、梁云梁和周浩浩。在編寫過程中,我們盡所能地將最好的講解呈現給讀者,但也難免有疏漏和不妥之處,敬請不吝指正。
編 者
目 錄
第I篇 基礎入門第1章 初識廬山真面目—— 走進C語言的世界 31.1 C語言概述 41.1.1 C語言的發展史 41.1.2 C語言的特點 51.1.3 C語言的應用 61.2 C語言的常用開發環境 61.2.1 Visual C++ 6.0開發環境 71.2.2 Turbo C 2.0開發環境 111.3 編寫第一個C語言程序 131.3.1 C語言編譯機制 131.3.2 在Visual C++ 6.0中開發C程序 131.3.3 在Turbo C中開發C程序 171.4 C語言程序的組成 191.4.1 C語言程序整體風貌 191.4.2 #include的秘密 191.4.3 程序的出入口——main函數 201.4.4 數據集裝箱——常量和變量 211.4.5 如何輸出程序結果——輸出函數 211.4.6 注釋 211.4.7 代碼書寫規范 221.5 大神解惑 231.6 跟我學上機 23第2章 程序中的變與不變——常量與變量 252.1 標識符和關鍵字 262.1.1 標識符 262.1.2 關鍵字 262.2 常量 272.2.1 整數常量 272.2.2 浮點常量 282.2.3 字符常量 282.2.4 字符串常量 302.2.5 符號常量 302.3 變量 312.3.1 變量的定義 322.3.2 變量的聲明 322.3.3 變量的初始化與賦值 332.3.4 變量的分類 342.4 綜合案例——處理學生的期末成績 382.5 大神解惑 402.6 跟我學上機 40第3章 程序中的數據種類——數據類型 413.1 數制 423.1.1 二進制 423.1.2 八進制 423.1.3 十六進制 423.1.4 數制間的轉換 423.2 整型數據 453.2.1 整型數據的存放形式 463.2.2 整型變量的溢出 473.3 浮點型數據 483.3.1 浮點型數據的存放形式 483.3.2 有效數字 493.4 字符型數據 503.5 數據類型的轉換 503.5.1 隱式轉換 503.5.2 顯式轉換 523.6 綜合案例——各種進制的轉換 533.7 大神解惑 553.8 跟我學上機 55第4章 用戶與計算機的交互——輸入和輸出 574.1 標準輸入輸出 584.2 格式化輸入輸出 584.2.1 格式化輸出函數 594.2.2 格式化輸入函數 624.3 字符輸入輸出 654.3.1 字符的輸出函數 654.3.2 字符的輸入函數 664.4 字符串的輸入輸出 674.4.1 字符串的輸出函數 674.4.2 字符串的輸入函數 684.5 綜合案例——輸入和輸出的綜合應用 694.6 大神解惑 704.7 跟我學上機 70第5章 誰來操作數據——運算符和表達式 715.1 運算符 725.1.1 運算符的分類 725.1.2 運算符的優先級和結合性 725.2 表達式 735.3 運算符與表達式 745.3.1 算術運算符與算術表達式 745.3.2 賦值運算符與賦值表達式 775.3.3 關系運算符與關系表達式 795.3.4 邏輯運算符與邏輯表達式 815.3.5 位運算符與位運算表達式 835.3.6 條件運算符與條件表達式 855.3.7 逗號運算符與逗號表達式 865.4 語句 875.4.1 表達式語句 875.4.2 函數調用語句 875.4.3 控制語句 885.4.4 復合語句 885.4.5 空語句 885.5 綜合案例——關系運算符的應用 895.6 大神解惑 895.7 跟我學上機 90第6章 程序的執行方向——程序流程控制結構 916.1 順序結構 926.2 選擇結構 936.2.1 if語句 936.2.2 if…else語句 946.2.3 選擇嵌套語句 956.2.4 switch分支結構語句 996.3 循環結構 1016.3.1 while語句 1016.3.2 do…while語句 1026.3.3 for語句 1036.3.4 循環語句的嵌套 1056.4 跳轉語句 1066.4.1 break語句 1066.4.2 continue語句 1076.4.3 goto語句 1086.5 綜合案例——制作簡易計算器 1096.6 大神解惑 1116.7 跟我學上機 112第Ⅱ篇 核心技術第7章 特殊的元素集合——數組 1157.1 數組概述 1167.2 一維數組 1167.2.1 一維數組的定義 1167.2.2 一維數組的引用 1187.2.3 一維數組的初始化 1197.2.4 程序實例 1217.3 二維數組 1237.3.1 二維數組的定義 1237.3.2 二維數組的引用 1247.3.3 二維數組的初始化 1257.3.4 多維數組 1277.3.5 程序實例 1287.4 字符數組 1317.4.1 字符數組的定義和初始化 1317.4.2 字符串和字符數組 1337.4.3 字符數組的輸出與輸入 1347.4.4 字符串處理函數 1377.5 綜合案例——矩陣的乘法 1417.6 大神解惑 1437.7 跟我學上機 143第8章 程序描述——算法與流程圖 1458.1 算法概述 1468.1.1 算法的概念 1468.1.2 算法的特性 1468.1.3 算法的優劣 1478.2 流程圖簡介 1488.2.1 傳統流程圖 1488.2.2 N-S流程圖 1508.3 算法的表示 1508.3.1 自然語言表示法 1508.3.2 流程圖表示法 1528.3.3 N-S流程圖表示法 1568.3.4 偽代碼表示法 1598.3.5 計算機語言表示法 1628.4 結構化程序設計方法 1638.5 綜合案例——求解一元二次方程的根 1638.6 大神解惑 1668.7 跟我學上機 166第9章 C語言靈魂——函數與函數中變量 1679.1 函數概述 1689.1.1 函數的概念 1689.1.2 函數的分類 1699.1.3 函數的聲明與定義 1719.2 函數的返回語句 1749.2.1 函數的返回值 1759.2.2 函數的結束標志 1769.2.3 函數的返回值類型 1779.3 函數的參數 1789.3.1 形式參數與實際參數 1789.3.2 參數的傳遞方式 1799.4 函數的調用 1829.4.1 函數調用的方式 1829.4.2 函數的嵌套調用 1859.4.3 函數的遞歸調用 1889.5 內部函數與外部函數 1929.5.1 內部函數 1929.5.2 外部函數 1939.6 main()函數的參數 1959.7 局部變量和全局變量 1969.7.1 局部變量 1969.7.2 全局變量 1989.8 變量的存儲類別 2029.8.1 動態存儲與靜態存儲 2039.8.2 自動變量 2039.8.3 靜態變量 2059.8.4 寄存器變量 2099.8.5 外部變量 2109.9 綜合案例——求解非線性方程 2129.10 大神解惑 2159.11 跟我學上機 217第10章 靈活調用內存地址——指針 21910.1 指針概述 22010.1.1 地址與指針 22010.1.2 指針變量 22110.1.3 指針變量的引用 22310.2 指針與函數 22610.2.1 指針變量作為函數參數 22610.2.2 函數返回指針 22910.2.3 指向函數的指針 23110.3 指針與數組 23310.3.1 數組元素的指針 23410.3.2 指針的運算 23410.3.3 通過指針引用數組元素 23510.3.4 指向數組的指針變量作為函數參數 23810.3.5 通過指針對多維數組進行引用 24410.4 指針與字符串 25010.4.1 字符指針 25010.4.2 使用字符指針作函數參數 25310.4.3 字符數組與字符指針變量的區別 25610.5 指針數組和多重指針 25810.5.1 指針數組 25810.5.2 指向指針的指針 26210.6 綜合案例——使用指針操作數組 26710.7 大神解惑 27210.8 跟我學上機 275第11章 數據存儲——操作文件 27711.1 文件概述 27811.1.1 文件類型 27811.1.2 文件指針 27911.1.3 文件的緩沖區 28011.2 文件的打開與關閉 28111.2.1 文件的打開 28111.2.2 文件的關閉 28211.3 文件的讀寫 28311.3.1 字符的讀寫 28311.3.2 字符串的讀寫 28711.3.3 數據塊的讀寫 29111.3.4 格式化讀寫函數 29511.4 文件定位與文件的隨機讀寫 29811.4.1 文件頭定位函數rewind() 29911.4.2 當前讀寫位置函數ftell() 30011.4.3 隨機定位函數fseek() 30111.5 文件檢測函數 30411.5.1 文件結束判斷函數feof() 30411.5.2 文件讀寫錯誤檢測函數ferror() 30511.5.3 文件錯誤標志清除函數clearerr() 30711.6 綜合案例——文件的綜合操作 30811.7 大神解惑 31611.8 跟我學上機 316第12章 未雨綢繆——編譯與預處理指令 31712.1 預處理指令 31812.2 宏定義 31812.2.1 變量式宏定義 31812.2.2 宏定義的嵌套 32112.2.3 宏定義的作用范圍 32212.2.4 帶參數的宏定義 32312.2.5 宏定義的多行表示 32712.3 文件包含 32712.4 條件編譯 32912.4.1 條件編譯命令 32912.4.2 調試中使用DEBUG宏 33212.4.3 文件的嵌套包含與條件編譯 33312.5 綜合案例——求解圓、矩形以及三角形的面積 33412.6 大神解惑 33512.7 跟我學上機 335第13章 提高開發效率——使用庫函數 33713.1 標準C庫函數 33813.2 數學函數“math.h” 33813.2.1 求冪函數與開平方函數 33813.2.2 指數函數與對數函數 33913.2.3 三角函數 34013.2.4 絕對值函數 34113.2.5 取整函數與取余函數 34213.3 字符串函數“string.h” 34313.3.1 字符串長度函數 34313.3.2 字符串連接函數 34413.3.3 字符串復制函數 34513.3.4 字符串大小寫轉換函數 34613.3.5 字符串查找函數 34713.3.6 字符串比較函數 34813.4 字符函數“ctype.h” 34913.4.1 字符的類型判斷函數 34913.4.2 字符大小寫轉換函數 35113.5 其他函數 35213.5.1 隨機函數 35213.5.2 日期時間函數 35313.5.3 結束程序函數 35413.6 綜合案例——創建報數游戲 35513.7 大神解惑 35613.8 跟我學上機 357第III篇 高級應用第14章 內部數據操作——位運算 36114.1 位(bit)與字節(byte)的關系 36214.2 位運算符 36214.2.1 按位與運算符(&) 36214.2.2 按位或運算符(|) 36314.2.3 按位異或運算符(^) 36414.2.4 按位取反運算符(~) 36514.2.5 左移運算符(<<) 36614.2.6 右移運算符(>>) 36714.2.7 位復合賦值運算符 36814.3 循環移位 36814.3.1 循環左移 36914.3.2 循環右移 37014.4 位段 37114.4.1 位段的定義 37114.4.2 位段中數據的引用 37114.5 綜合案例——將十進制數轉換為二進制數 37314.6 大神解惑 37414.7 跟我學上機 375第15章 靈活定義數據類型——結構體、共用體和枚舉 37715.1 結構體概述 37815.1.1 結構體類型 37815.1.2 定義結構體變量 37915.1.3 初始化結構體變量 38115.1.4 結構體變量的引用 38115.2 結構體數組 38315.2.1 定義結構體數組 38315.2.2 結構體數組的初始化 38415.2.3 結構體數組元素的引用 38515.2.4 結構體數組應用實例 38615.3 結構體指針 38815.3.1 指向結構體變量的指針 38815.3.2 指向結構體數組的指針 39015.3.3 結構體變量作為函數參數 39115.3.4 指向結構體變量的指針作為函數參數 39315.3.5 結構體作為函數的返回值 39415.4 共用體 39515.4.1 共用體的定義 39515.4.2 共用體變量的定義 39615.4.3 共用體變量的初始化以及引用 39715.5 枚舉 39915.5.1 定義枚舉類型 40015.5.2 定義枚舉類型變量 40015.6 綜合案例——創建學生信息結構體 40215.7 大神解惑 40315.8 跟我學上機 404第16章 動態存儲分配—— 動態數據結構 40516.1 動態存儲分配概述 40616.1.1 malloc()函數 40616.1.2 calloc()函數 40716.1.3 realloc()函數 40816.1.4 free()函數 40916.2 鏈表概述 41016.2.1 鏈表結點的定義 41116.2.2 鏈表的建立 41116.2.3 鏈表的遍歷 41216.2.4 鏈表結點的插入 41316.2.5 鏈表結點的刪除 41716.3 綜合案例——綜合應用鏈表 42016.4 大神解惑 42116.5 跟我學上機 422第17章 邏輯結構—— 數據結構進階 42317.1 數據結構概述 42417.2 線性表 42517.3 棧 42617.3.1 棧的基本操作 42717.3.2 順序棧 42717.3.3 鏈式棧 42917.4 隊列 43117.4.1 隊列的基本運算 43217.4.2 順序隊列 43217.4.3 鏈式隊列 43617.5 二叉樹 44117.5.1 二叉樹的定義 44117.5.2 二叉樹的遍歷 44217.6 查找 44217.6.1 順序查找 44217.6.2 折半查找 44417.7 綜合案例——使用棧轉換數據的進制 44617.8 大神解惑 44717.9 跟我學上機 448第18章 整理數據的妙招——排序 44918.1 排序概述 45018.2 插入排序 45018.2.1 直接插入排序 45018.2.2 希爾排序 45218.3 選擇排序 45318.3.1 簡單選擇排序 45318.3.2 堆排序 45518.4 交換排序 45718.4.1 冒泡排序 45718.4.2 快速排序 45818.5 歸并排序 46018.6 基數排序 46218.7 大神解惑 46418.8 跟我學上機 465第IV篇 項目開發實戰第19章 項目實訓1——開發日歷查閱系統 46919.1 需求分析 47019.2 功能分析 47019.3 開發前準備工作 47219.4 系統代碼編寫 47619.4.1 查詢年歷函數showCalendarOfYear() 47619.4.2 查詢月歷函數showCalendarOfMonth() 47719.4.3 日期查詢模塊 47819.5 系統運行 48519.6 項目總結 486第20章 項目實訓2—— 開發員工信息管理系統 48720.1 需求分析 48820.2 功能分析 48920.3 開發前準備工作 49020.4 系統代碼編寫 49120.4.1 main.c文件 49120.4.2 employee.c文件 49520.5 系統運行 49920.6 項目總結 500第21章 項目實訓3——開發迷宮小游戲 50121.1 需求分析 50221.2 功能分析 50221.3 開發前準備工作 50421.4 系統代碼編寫 50521.4.1 main.c文件 50521.4.2 mazeGame.c文件 50721.5 系統運行 51321.6 項目總結 514