內 容 簡 介
C語言是一種電腦程式設計語言,既有高級語言的特點,又具有彙編語言的特點。C語言可以作為系統設計語言來編寫工作系統應用程式,也可以作為應用程式設計語言編寫不依賴計算機硬體的應用程式,因此它的套用範圍十分廣泛。對作業系統和系統使用程式以及需要對硬體進行操作的場合,用C語言明顯優於其他解釋型高級語言,有一些大型套用軟體也是用C語言編寫的。
本書循序漸進地講述了C語言基礎知識、三種基本控制結構、數組、指針、結構體共用體、檔案、底層操作等主要內容,並穿插講述了一些編譯預處理知識和程式設計方法及調試方法等。本書的最後部分,介紹了利用C語言編寫功能比較完備的程式的設計過程以及原始碼,使讀者對C語言程式設計有一個比較完整的設計思路,同時又可以加強對C語言常用的基礎知識的理解和程式調試的掌握,還能掌握通用的軟體開發過程。
本書既適合沒有程式語言經驗的初學者,也適合相關專業在校生。
前 言
C語言是一種電腦程式設計語言,既有高級語言的特點,又具有彙編語言的特點。C語言可以作為系統設計語言來編寫工作系統應用程式,也可以作為應用程式設計語言編寫不依賴計算機硬體的應用程式,因此它的套用範圍十分廣泛。對作業系統和系統實用程式,以及需要對硬體進行操作的場合,用C語言明顯優於其他解釋型高級語言,有一些大型套用軟體也是用C語言編寫的。
但是很多初學者對於學習C語言都感到不能很快上手,不能做到自己編寫C語言的程式。實際上,這些感覺都是由於沒有做大量的練習所致。學習C語言這種結構化很強的程式設計語言,必須經過大量的練習,多讀程式、多寫程式,才能有比較好的效果。
筆者長期以來從事計算機課程的基礎教學工作,因此比較清楚做程式設計的初學者在學習C語言的過程中常見的一些問題和學習過程中的一些困惑。本書的目的是為了讓C語言的初學者對於C語言乃至結構化程式設計有一個系統、全面的認識,同時能為今後繼續學習其他程式語言打下良好的基礎。本書可以使初學者快速地掌握C語言的基礎知識,能使讀者對C語言有一個全面、直觀、系統的認識,同時能掌握結構化程式設計的精髓,最終可以完成獨立、專業的C語言程式設計。讀者還能利用書中的大量實例,打下學習其他高級語言的基礎。另外,本書在最後的套用實例篇涉及到了一些軟體開發方面的知識,使得今後讀者無論使用何種程式語言獨立開發、設計程式的時候都能夠使用本書中的軟體開發通用過程。
本書的特點
本書幫助讀者真正掌握C語言的基礎知識,以便遇到問題時,可以立刻使用C語言的思路分析問題;可以單獨地分析程式,對C語言的程式段和完整的程式有清楚的分析方法;可以利用已學習的知識,對一些具體的問題有一定的編程思路,可以設計簡單的程式;可以調試大型的C語言程式,對程式的不同分支,設計不同的數據進行測試;了解一些完整的實際問題的處理例子,為計算機後續課程的學習打下一個堅實的基礎。
本書對C語言的基礎知識的介紹比較詳細,對於基礎知識點配有其在程式中的套用介紹,有效地把枯燥的基礎知識轉化成程式中的用法,可以加強讀者對C語言基礎知識的記憶。比較詳細地介紹了C語言選擇結構、循環結構常見的程式分析方法,尤其是針對循環結構,講述了單層循環、帶有跳轉的單層循環,以及二層循環的程式分析方法,介紹得比較清晰、易懂。對於一些常見問題給出了套路式的解決問題的方法,為初學者學寫程式提供了一個練習的途徑。對於數組、函式等知識點以詳細分類的方法介紹說明,便於讀者對不熟悉的知識點進行查找和學習。
本書的特點主要體現在以下幾個方面。
本書的編排採用循序漸進的方式,適合初學者逐步掌握C語言的基礎、技巧和精髓。
本書編排了大量的實例,即使比較少的代碼和錯誤的代碼示例也有配套的原始碼,為讀者進行調試提供了方便。
養成良好的程式調試習慣是語言學習者必須具備的,因此本書加入了調試程式這一章,讀者可以在調試程式中隨時翻閱本章,不受基礎知識的限制。
在比較重要的知識點或者數據類型的章節後面,都通過一個具體問題的解決來套用這個知識點。書中的大部分實例都給出了編程思路和步驟,同時在原始碼後面對程式的運行狀態和問題的轉化以及對該代碼的進一步詮釋,可以幫助讀者利用這些問題解決方案來解決另外的問題。隨書光碟中提供了書中實例的原始碼,方便讀者使用。
在每一章或者每一個比較重要的知識點後面,都有相關的常見錯誤解析和改正方法,有助於初學者了解和學習。另外,對於每一章中初學者經常會提出的一些問題,均以問答的形式予以解答。
本書最後的實例滲透了部分軟體工程學的思想,旨在給讀者介紹通用的軟體開發過程,使讀者在今後使用其他開發語言工具的時候也能找到正確簡便的開發步驟。
本書的內容安排
本書共分為5部分,共23章,由淺入深,從理論到實踐,尤其適合初級讀者逐步學習和完善自己的知識結構。
第1部分“基礎篇”(第1章~第6章)介紹C語言的基本語法和C語言主要控制語句的基礎知識。本部分包括:C語言概述、數據類型與常量變數、表達式與運算符、順序程式設計、選擇程式設計、循環程式設計等。力求淺顯易懂,從第一次接觸C語言入手,逐步深入到C語言的組成元素和基本的控制結構,讓讀者一開始就有系統考慮程式設計的思想。
第2部分“進階篇”(第7章~第11章)介紹C語言中比較複雜的知識。本部分包括:數組、函式、作用域程式設計、指針、字元串等幾章。本部分的內容是C語言的精髓所在,其中包括了一些比較複雜的內容,如指針等。本部分使用大量的實例代碼和圖表解釋,儘可能做到讓讀者理解程式運行的過程。
第3部分“高級篇”(第12章~第15章)介紹C語言中的高級套用以及程式調試的方法。本部分包括:編譯預處理、程式調試、結構體與共用體、自定義類型與鍊表等。本部分內容屬於比較高級的套用,有一部分知識已經涉及到了簡單數據結構的範疇。本部分中仍然使用較多的實例代碼和圖表解釋,做到讓讀者見圖知義,能夠理解C語言程式在運行時的記憶體使用情況。
第4部分“底層開發篇”(第16章~第20章)介紹C語言中的底層開發技術。本部分包括位運算、檔案操作、螢幕和鍵盤的控制等。本部分內容屬於底層的套用,仍然使用較多的實例代碼和圖表解釋,讓讀者能夠使用C語言程式對檔案、螢幕和鍵盤進行操作。在本部分的最後,還介紹了C++語言對C語言進行的擴展,讓讀者能夠在未來學習類似C++等面向對象的設計語言時有所了解,為以後的學習做知識儲備。
第5部分“套用實例篇”(第21章~第23章)利用幾個實例介紹C語言解決實際問題時的套用。本部分包括3個實例程式,每個實例程式均遵循“問題提出”→“問題分析”→“模組劃分”→“模組內部設計”→“編程實現”→“測試”6個環節,力求讓讀者能夠從實例中學會如何從一個具體問題出發直到設計出可以解決實際問題的軟體的過程。
本書所涉及的代碼,請訪問博文視點公司網站下載。
本書由劉丕順主編,遲劍、劉艷飛編寫,其他參與編寫的人員有張金霞、曾光、張雙、朱照華、黃永湛、劉新、孟祥嵩、李勇、張賀軍、關濤、王岩、李曉白、魏星等。在此一併表示感謝!
編 者
目 錄
第1部分 基礎篇
第1章 認識C語言
1.1 計算機語言及程式的發展
1.1.1 計算機語言的歷史
1.1.2 C語言的特點
1.2 從Hello程式認識C程式
1.3 程式的實例解析與升華
1.3.1 簡單例題的引申
1.3.2 C語言程式的組成
1.3.3 常見的錯誤解析與解決辦法
1.4 C語言基本組成
1.4.1 常見的語法規範
1.4.2 代碼編寫規範
1.5 C語言程式的調試過程
1.5.1 Turbo C 2.0集成開發環境介紹及使用
1.5.2 Turbo C 2.0運行程式的步驟
1.5.3 程式編譯中常見問題
1.6 本章的問與答
1.6.1 編譯和運行有什麼不同
1.6.2 如何評價一個程式的好壞
1.7 小結
第2章 數據類型、常量和變數
2.1 數據及數據類型
2.1.1 C語言常見的數據類型介紹
2.1.2 常量
2.1.3 變數
2.2 常量及常量的套用
2.2.1 整型常量
2.2.2 實型常量
2.2.3 字元常量
2.2.4 字元串常量
2.2.5 常量使用時的錯誤分析
2.3 變數及變數的套用
2.3.1 整型變數
2.3.2 實型變數
2.3.3 字元型變數
2.3.4 變數的使用規範
2.3.5 變數常見錯誤分析方法
2.4 本章的問與答
2.4.1 編寫程式的風格很重要嗎
2.4.2 數據結構與數據類型是一回事嗎
2.4.3 main是關鍵字嗎
2.4.4 說明一個變數和定義一個變數有什麼區別
2.4.5 用const說明常量有什麼好處
2.5 小結
第3章 運算符與表達式
3.1 C語言中的運算符及表達式
3.1.1 運算符及其學習要點
3.1.2 表達式及其求值順序
3.2 運算中的數據類型轉換
3.2.1 強制類型轉換
3.2.2 隱含類型轉換
3.3 算術運算符與算術表達式
3.3.1 基本算術運算符
3.3.2 特殊的算術運算符——自加和自減
3.3.3 常見錯誤分析與解決方法
3.4 賦值運算符和賦值表達式
3.4.1 簡單的賦值運算符
3.4.2 複合賦值運算符
3.4.3 賦值表達式的運算
3.4.4 常見錯誤分析與解決方法
3.5 逗號運算符和逗號表達式
3.6 關係運算符和關係表達式
3.6.1 C語言中的真值和假值
3.6.2 關係運算符
3.6.3 關係表達式
3.6.4 常見錯誤分析
3.7 邏輯運算符和邏輯表達式
3.7.1 邏輯運算符
3.7.2 邏輯表達式
3.7.3 常見錯誤分析
3.8 條件運算符和條件表達式
3.9 sizeof運算符
3.10 取地址運算符
3.11 幾種運算符混合運用與常見的問題分析
3.12 本章的問與答
3.12.1 什麼是左值(lvalue),什麼是右值(rvalue)
3.12.2 運算符的優先權總能保證“自左至右”或“自右至左”的順序嗎
3.12.3 表達式和語句有區別嗎
3.12.4 什麼時候應該使用類型強制轉換
3.12.5 對不同類型的變數進行算術運算會有問題嗎
3.13 小結
第4章 順序程式設計
4.1 C程式基本結構
4.2 C語句概述
4.2.1 表達式語句
4.2.2 流程控制語句
4.2.3 跳轉語句
4.2.4 複合語句
4.2.5 空語句
4.3 庫函式的調用與輸入輸出的關係
4.4 格式化輸出
4.4.1 printf函式的一般格式
4.4.2 printf函式中的格式控制說明
4.4.3 整型數據的輸出
4.4.4 字元型數據的輸出
4.4.5 實型數據的輸出
4.4.6 字元串的輸出
4.4.7 格式化輸出的使用實例分析與常見錯誤
4.5 字元輸出
4.6 格式化輸入
4.6.1 scanf函式的一般格式
4.6.2 scanf函式中的格式控制說明
4.6.3 格式化輸入的使用實例分析與常見的錯誤
4.7 字元輸入
4.7.1 getch()和getche()函式
4.7.2 getchar函式
4.8 變數如何得到正確的輸入數據
4.9 順序結構程式典型例題分析與升華
4.10 本章的問與答
4.10.1 為什麼有時不應該用scanf()來接收數據
4.10.2 怎樣用0補齊一個數字
4.10.3 怎樣判斷一個字元是否是字母或數字
4.11 小結
第5章 選擇程式設計
5.1 典型的選擇問題的程式設計思路
5.2 用if語句設計選擇程式
5.2.1 if語句的形式:單條件單分支的if語句
5.2.2 if語句的形式:單條件雙分支的if語句
5.3 if語句的嵌套
5.3.1 單條件單分支if語句嵌套單條件單分支的if語句
5.3.2 單條件單分支if語句嵌套單條件雙分支的if語句
5.3.3 單條件雙分支if語句的嵌套
5.3.4 嵌套時if與else的配對規則
5.4 if語句的使用實例與升華
5.5 if語句的常見錯誤與解決方法
5.6 用switch分支設計選擇程式
5.6.1 switch分支介紹
5.6.2 switch分支處理的程式特點
5.6.3 switch分支的使用實例
5.6.4 switch分支的常見錯誤與解決方法
5.7 選擇型問題實例的剖析與升華
5.8 本章常見問題的問與答
5.8.1 選擇程式中如何加入注釋
5.8.2 switch語句的最後一個分支可以不要break語句嗎
5.8.3 共有幾種退出switch分支的方法
5.8.4 什麼時候用一條switch語句比用多條if語句更好
5.9 小結
第6章 循環結構程式設計
6.1 典型的循環問題程式設計思路
6.2 while語句處理的循環
6.2.1 while語句介紹
6.2.2 while語句使用要求
6.2.3 while語句的使用實例
6.2.4 常見while語句典型程式分析
6.2.5 while語句的常見錯誤與解決方法
6.3 do…while循環
6.3.1 do…while語句介紹
6.3.2 do…while語句與while語句的聯繫與區別
6.3.3 do…while語句的使用實例
6.3.4 常見do…while語句的典型程式分析
6.3.5 do…while語句的常見錯誤與解決方法
6.4 for循環
6.4.1 for語句介紹
6.4.2 for語句的特點
6.4.3 for語句的使用實例與升華
6.4.4 常見for語句的典型程式分析
6.4.5 for語句的常見錯誤與解決方法
6.5 流程控制語句
6.5.1 break語句
6.5.2 continue語句
6.5.3 break與continue常見的使用錯誤
6.5.4 goto語句及其使用
6.6 循環程式的分析方法
6.6.1 while循環分析
6.6.2 do…while循環分析
6.6.3 for循環分析
6.6.4 帶break與continue語句的循環程式分析
6.7 循環程式的例題
6.8 多重循環——循環的嵌套
6.8.1 循環嵌套的含義
6.8.2 循環嵌套實例與升華
6.8.3 循環嵌套的套用
6.8.4 循環嵌套程式的易錯點與程式分析
6.9 循環實例分析
6.10 本章常見問題的問與答
6.10.1 如何為循環程式添加注釋
6.10.2 循環結構應該如何學習
6.10.3 怎樣才能知道循環是否提前結束
6.10.4 空循環和無窮循環有什麼區別
6.11 小結
第2部分 進階篇
第7章 數組
7.1 認識數組
7.2 一維數組
7.2.1 一維數組的定義
7.2.2 一維數組的引用
7.2.3 一維數組的初始化
7.3 一維數組的使用
7.3.1 一維數組的使用實例與升華
7.3.2 一維數組使用中的常見錯誤與解決方法
7.3.3 常見一維數組典型程式分析
7.4 二維數組
7.4.1 二維數組的定義
7.4.2 二維數組的引用
7.4.3 二維數組的初始化
7.5 二維數組的使用
7.5.1 二維數組的使用實例與升華
7.5.2 二維數組使用中的常見錯誤與解決方法
7.5.3 常見二維數組典型程式的分析與書寫
7.6 使用數組的程式分析
7.7 數組實例的剖析與升華
7.8 本章常見問題的問與答
7.8.1 數組是基本數據類型嗎
7.8.2 定義數組以後,如果處理的元素超出了數組的範圍,如何處理
7.8.3 數組的下標總是從0開始嗎
7.8.4 為什麼要小心使用數組不要越界
7.8.5 數組可以是左值嗎
7.9 小結
第8章 函式
8.1 程式的模組化
8.2 函式的定義
8.2.1 C語言函式的簡介
8.2.2 函式的定義
8.3 函式的調用
8.3.1 函式調用的一般形式
8.3.2 被調函式聲明和函式原型
8.4 數據在函式間的傳遞
8.4.1 形式參數和實際參數
8.4.2 函式的返回值
8.5 數組作為函式的參數
8.5.1 一維數組作為函式的參數
8.5.2 二維數組作為函式的參數
8.6 函式的嵌套調用
8.6.1 嵌套調用的程式結構
8.6.2 程式實例的套用
8.7 函式的遞歸調用
8.7.1 遞歸的含義
8.7.2 遞歸程式的分析
8.7.3 遞歸程式的實例構思
8.8 函式使用的常見錯誤分析
8.9 典型函式程式實例
8.10 本章常見問題的問與答
8.10.1 什麼叫函式
8.10.2 函式的說明與定義的區別
8.10.3 什麼是函式參數以及如何傳遞函式參數
8.10.4 一個函式可以有多少個參數
8.10.5 如果一個函式沒有返回值,是否需要加入return語句
8.10.6 exit()和return有什麼不同
8.10.7 為什麼要說明函式原型
8.11 小結
第9章 作用域與程式設計
9.1 變數的作用域
9.1.1 局部變數
9.1.2 全局變數
9.2 變數的存儲屬性
9.3 局部變數的存儲類別
9.3.1 自動變數
9.3.2 靜態局部變數
9.3.3 暫存器變數
9.4 全局變數的存儲類別
9.4.1 外部全局變數
9.4.2 靜態全局變數
9.5 常見變數存儲的錯誤分析與解決
9.6 套用不同存儲屬性的變數的程式例題分析
9.7 函式的作用域
9.7.1 外部函式
9.7.2 內部函式
9.7.3 函式的套用
9.7.4 多個源程式檔案的編譯和連線
9.8 簡單的程式設計實驗
9.9 本章常見問題的問與答
9.9.1 檔案中增加了函式與變數的存儲屬性的時候,常見的注釋風格是怎樣的
9.9.2 變數存儲在記憶體中的什麼地方
9.9.3 所有變數必須初始化嗎
9.10 小結
第10章 指針
10.1 地址和指針的概念
10.2 變數的指針
10.2.1 指針變數的定義
10.2.2 指針變數的賦值與引用
10.3 指針變數的運算
10.3.1 &和*運算
10.3.2 ++和- -運算以及加減整型常量的運算
10.3.3 比較運算
10.3.4 減法運算
10.4 指針變數作為函式的參數
10.4.1 以普通變數作為參數完成交換函式
10.4.2 以指針變數作為參數實現數據的交換
10.4.3 交換指針變數指向的內容
10.5 指針變數實例中常見的錯誤分析與解決
10.6 指針與一維數組
10.6.1 指向一維數組元素的指針
10.6.2 用指針訪問一維數組元素
10.6.3 一維數組作為函式參數
10.6.4 一維數組作為函式參數的實例
10.7 指針與二維數組
10.7.1 處理二維數組中所有元素的指針變數
10.7.2 使用指向一維數組的指針處理二維數組
10.7.3 二維數組作為函式參數
10.7.4 二維數組作為函式參數的實例
10.8 指針與數組常見的錯誤分析與解決
10.9 指針數組與二級指針
10.9.1 指針數組的概念
10.9.2 指針數組的套用
10.9.3 二級指針
10.9.4 指針數組作為主函式的參數
10.9.5 指針數組與二級指針常見錯誤分析與解決
10.10 指向函式的指針及返回指針的函式
10.10.1 用函式指針調用函式
10.10.2 用指向函式的指針作為函式的參數
10.10.3 返回指針的函式
10.11 套用例題及實驗設計模板
10.12 本章常見問題的問與答
10.12.1 指針使用的常見形式有哪些
10.12.2 什麼是void指針
10.12.3 什麼時候使用void指針
10.12.4 NULL總是被定義為0嗎
10.12.5 用指針作if語句的條件表達式意味什麼
10.12.6 NULL和NUL有什麼不同
10.13 小結
第11章 字元串
11.1 字元串與字元串的結束標誌
11.2 字元數組與字元串
11.2.1 字元數組的定義
11.2.2 字元數組的初始化
11.2.3 字元數組的輸入輸出
11.2.4 字元數組處理字元串的套用實例
11.2.5 字元數組處理字元串常見的錯誤分析與解決
11.3 常用字元串處理函式
11.3.1 strcpy(字元數組,字元串):字元串複製函式
11.3.2 strcat(字元數組1,字元數組2):字元串連線函式
11.3.3 strcmp(字元串1,字元串2):字元串比較函式
11.3.4 strlen(字元串):求字元串長度函式
11.4 指針與字元串
11.4.1 字元串的表示形式
11.4.2 字元串指針作為函式參數
11.4.3 字元串常見錯誤分析
11.5 典型例題分析與升華
11.6 本章常見問題的問與答
11.6.1 字元是帶符號的還是無符號的
11.6.2 字元串和數組有什麼不同
11.6.3 字元類型與整型的根本區別是什麼
11.6.4 可以將數字形式的字元串轉換為數字嗎
11.7 小結
第3部分 高級篇
第12章 編譯預處理
12.1 預處理程式
12.2 宏定義指令
12.2.1 不帶參數的宏定義
12.2.2 帶參數的宏定義
12.2.3 常見的宏定義錯誤解析
12.3 檔案包含指令
12.4 條件編譯指令
12.4.1 #if~#endif條件編譯指令
12.4.2 #if~#else ~#endif條件編譯指令
12.4.3 #if~#elif~#else ~#endif條件編譯指令
12.4.4 #ifdef格式
12.4.5 #ifndef格式
12.4.6 條件編譯的套用
12.5 本章常見問題的問與答
12.5.1 都有哪些預處理命令
12.5.2 下面程式的運行結果是什麼
12.5.3 可以用#include指令包含類型名不是“.h”的檔案嗎
12.5.4 使用宏更好,還是使用函式更好
12.5.5 用#define指令說明常量有什麼好處
12.6 小結
第13章 程式設計與調試
13.1 程式設計簡介
13.2 程式調試
13.2.1 調試的概念
13.2.2 調試程式
13.2.3 查錯
13.2.4 常用的避免錯誤的方法
13.3 程式的掛起
13.3.1 未知原因的掛起
13.3.2 死循環
13.3.3 運行時間比期望的時間長
13.3.4 等待正確的輸入
13.4 小結
第14章 結構體和共用體
14.1 結構體的概念及結構類型定義
14.2 結構體變數
14.2.1 結構體變數的定義
14.2.2 結構體變數的引用
14.2.3 結構體變數的初始化
14.2.4 結構體變數作為函式的參數
14.3 結構體數組
14.3.1 結構體數組的定義及引用
14.3.2 結構體數組的初始化
14.3.3 結構體數組作為函式的參數
14.4 結構體指針
14.4.1 指向結構體變數的指針
14.4.2 指向結構體數組的指針
14.4.3 用指向結構體的指針作為函式參數
14.5 結構體變數常見的錯誤分析與解決
14.6 共用體
14.6.1 共用體的概念
14.6.2 共用體變數的定義和引用
14.6.3 共用體套用
14.7 枚舉類型
14.7.1 枚舉類型簡介
14.7.2 枚舉變數的定義與套用
14.7.3 枚舉類型常見的錯誤分析
14.8 本章常見問題的問與答
14.8.1 結構體變數的數據傳到另外的函式中有幾種方法
14.8.2 用enum關鍵字說明常量有什麼好處
14.8.3 和用#define指令說明常量相比,用enum關鍵字說明常量有什麼好處
14.9 小結
第15章 自定義類型與鍊表
15.1 typedef自定義類型
15.2 動態記憶體管理
15.2.1 malloc函式
15.2.2 calloc函式
15.2.3 free函式
15.2.4 realloc函式
15.3 鍊表
15.3.1 鍊表簡介
15.3.2 建立單鍊表
15.3.3 尾插法建立單鍊表
15.3.4 頭插法建立單鍊表
15.3.5 單鍊表元素的遍歷
15.4 單鍊表中進行的基本操作
15.4.1 單鍊表中查找元素
15.4.2 按照序號查找
15.4.3 按照指定值進行查找
15.4.4 單鍊表中元素的插入和刪除
15.4.5 單鍊表中元素的合併
15.5 單循環鍊表和雙向鍊表簡介
15.5.1 單循環鍊表
15.5.2 雙向鍊表
15.5.3 在雙向鍊表中插入一個節點
15.5.4 在雙向鍊表中刪除一個節點
15.6 單鍊表設計實例與升華
15.7 自定義類型與鍊表常見的錯誤分析與解決
15.8 本章常見問題的問與答
15.8.1 什麼是線性結構,單鍊表是不是線性結構,為什麼
15.8.2 類型void *說明什麼樣的返回值
15.8.3 本章中函式的參數類型已經是指針類型,為什麼還通過返回值把鍊表的
頭指針的值返回,而不是通過參數直接改變呢
15.8.4 NULL總是被定義為0嗎
15.8.5 用malloc()函式更好,還是用calloc()函式更好
15.9 小結
第4部分 底層開發篇
第16章 位與位元組
16.1 數值數據的表示和編碼
16.1.1 數據進制
16.1.2 數據存儲
16.2 位運算
16.2.1 位運算簡介
16.2.2 按位與運算符“&”
16.2.3 按位或運算符“|”
16.2.4 按位異或運算符“^”
16.2.5 按位取反運算符“~”
16.2.6 按位左移運算符<<
16.2.7 按位右移運算符“>>”
16.2.8 位運算賦值運算符
16.2.9 位運算符的使用情況和實例分析
16.3 位運算的套用
16.4 位段及套用
16.4.1 位段的定義
16.4.2 位段的套用
16.5 位運算的常見錯誤分析與解決
16.6 本章的問與答
16.6.1 對位(bit)和位元組(byte)的區分到底是什麼
16.6.2 用什麼方法存儲標誌(flag)效率最高
16.6.3 移位和乘以2這兩種方式中哪一種更好
16.6.4 什麼是高位位元組和低位位元組
16.6.5 16位和32位的數是怎樣存儲的
16.7 小結
第17章 檔案
17.1 檔案系統概述
17.2 檔案指針
17.3 檔案打開與關閉
17.3.1 打開檔案
17.3.2 關閉檔案
17.4 檔案讀寫函式
17.4.1 讀寫字元
17.4.2 使用fgets()和fputs()處理字元串
17.4.3 讀寫磁碟檔案
17.4.4 成組讀寫
17.5 檔案的定位
17.5.1 定位到開頭
17.5.2 隨機讀寫
17.5.3 返回位置
17.6 錯誤檢測
17.6.1 ferror()函式
17.6.2 clearerr()函式
17.7 檔案使用常見錯誤分析
17.8 檔案例題分析與升華
17.9 本章常見問題的問與答
17.9.1 什麼是C語言中的檔案
17.9.2 在對檔案進行操作的時候,如果要求檔案的位置回到檔案的開頭,應當
用到哪個函式
17.9.3 設fp為檔案指針,如果打開一個已經存在的非空檔案aa.txt進行修改,
應該用什麼語句實現
17.9.4 檔案的分類是什麼,到底什麼是流式檔案,是不是檔案分類的一種
17.9.5 讀檔案和寫檔案是什麼
17.9.6 如何選擇讀寫函式
17.9.7 緩衝檔案系統是什麼
17.10 小結
第18章 螢幕和鍵盤的控制
18.1 文本視窗
18.1.1 文本方式
18.1.2 文本視窗的使用
18.1.3 視窗內文本的輸入輸出
18.1.4 鍵盤的使用
18.1.5 具體套用實例——下拉式選單
18.2 C語言繪圖概述
18.2.1 圖形顯示
18.2.2 圖形系統初始化
18.2.3 圖形螢幕的顏色設定
18.2.4 清除螢幕
18.3 C語言中繪圖函式的使用
18.3.1 繪圖函式
18.3.2 線型函式
18.3.3 填充函式
18.3.4 自定義視窗
18.4 圖形文本
18.4.1 文本輸出函式
18.4.2 設定圖形文本屬性
18.5 繪圖常見錯誤說明
18.6 繪圖典型例題分析
18.7 本章的問與答
18.7.1 什麼是像素
18.7.2 什麼是解析度
18.7.3 怎樣在螢幕上定位游標
18.7.4 什麼時候使用far指針
18.8 小結
第19章 系統調用
19.1 DOS、BIOS與中斷簡介
19.2 DOS下的設備控制
19.2.1 軟中斷調用函式
19.2.2 中斷設定函式
19.2.3 連線埠輸入輸出函式
19.2.4 記憶體操作函式
19.3 系統駐留程式簡介
19.4 系統函式調用常見錯誤解析
19.5 利用中斷實現多任務的實例分析
19.6 本章常見問題的問與答
19.6.1 DOS是什麼
19.6.2 如何獲得具體信息的記憶體位置
19.6.3 什麼是緩衝區
19.6.4 什麼是環境
19.7 小結
第20章 從C到C++
20.1 C++對C的擴充
20.1.1 C++中輸入/輸出方式
20.1.2 新增運算符和關鍵字簡介
20.1.3 引用
20.1.4 函式重載
20.1.5 函式內聯
20.2 面向對象語言的概念
20.2.1 面向對象的概念
20.2.2 類的定義
20.2.3 對象的創建
20.2.4 對象的繼承
20.2.5 多態性
20.3 C++常見的基礎錯誤解析
20.4 本章的問與答
20.4.1 C程式設計師為什麼要學習C++
20.4.2 “//”是什麼
20.4.3 C++到底新增了什麼知識點
20.4.4 如何理解抽象
20.4.5 什麼是封裝性
20.4.6 什麼是繼承性
20.4.7 什麼是多態性
20.5 小結
第5部分 套用實例篇
第21章 套用實例1——複雜表達式求值
21.1 問題分析
21.2 概要設計
21.2.1 全局數據設計
21.2.2 系統結構設計
21.3 模組詳細設計及實現
21.3.1 isdelim(char c)函式的實現
21.3.2 serror(int error)函式的實現
21.3.3 get_exp ()函式的實現
21.3.4 atom(double *)函式的實現
21.3.5 一系列計算函式的實現
21.3.6 main()函式的實現
21.4 程式的測試及維護
第22章 套用實例2——簡單的文本編輯器
22.1 問題分析
22.2 概要設計
22.2.1 全局數據設計
22.2.2 系統結構設計
22.3 模組詳細設計及實現
22.3.1 opens(Line *head)函式的實現
22.3.2 save(Line *head)函式的實現
22.3.3 view(Line *head)函式的實現
22.3.4 qview(Line *q)函式的實現
22.3.5 color(Line *Hhead)函式的實現
22.3.6 check(Line *head,int m,int n)函式的實現
22.3.7 border (int x,int y,int width,int height)函式的實現
22.3.8 draw_m()函式的實現
22.3.9 drawmenu(int m,int n)函式的實現
22.3.10 menuctrl(Line *Hhead,int key)函式的實現
22.3.11 main()函式的實現
22.4 程式的測試及維護
第23章 套用實例3——圖書管理系統
23.1 問題分析
23.2 概要設計
23.2.1 全局數據設計
23.2.2 系統結構設計
23.3 模組詳細設計及實現
23.3.1 new_bk()函式和new_bl()函式的實現
23.3.2 save_bk(Book *)函式和save_bl(Bk_lender *)函式的實現
23.3.3 read_bk()函式和read_bl()函式的實現
23.3.4 search_bk(Book *)函式的實現
23.3.5 insert_bk(Book *)函式和insert_bl(Bk_lender *)函式的實現
23.3.6 delete_bk(Book *)函式和delete_bl(Bk_lender *)函式的實現
23.3.7 modify_bk(Book *)函式的實現
23.3.8 lendbook(Bk_lender *,Book *)函式的實現
23.3.9 returnbook(Bk_lender *,Book *)函式的實現
23.3.10 disp_bk(Book *)函式和disp_bl(Bk_lender *)函式的實現
23.3.11 3個選單函式的實現
23.3.12 main()函式的實現
23.4 程式的測試及維護
23.5 程式實現
23.6 小結