C編程從入門到實踐

王長青

  • 出版商: 人民郵電
  • 出版日期: 2019-06-01
  • 定價: $534
  • 售價: 7.5$401
  • 語言: 簡體中文
  • ISBN: 7115500681
  • ISBN-13: 9787115500687
  • 相關分類: C 程式語言
  • 立即出貨

  • C編程從入門到實踐-preview-1
  • C編程從入門到實踐-preview-2
C編程從入門到實踐-preview-1

買這商品的人也買了...

商品描述

本書循序漸進、由淺入深地講解了C語言開發的技術。全書共25章。本書不僅介紹了C語言的基礎和核心知識(如開發工具、語法、運算符、表達式、輸入/輸出、流程控制、數組、字符串、函數),還講解了C語言中的重點和難點(如指針、結構體、共享體和枚舉、鏈表、位運算、預編譯、文件操作、調試、內存管理、高級編程技術、算法、數據結構、網絡編程技術等)。此外,本書還通過4個綜合實例,介紹了C語言在綜合項目中的應用。全書內容以“技術解惑”和“範例演練”貫穿全書,引領讀者全面掌握C語言。

本書不但適用C語言的初學者,也適合有一定C語言基礎的讀者學習,還可以作為大專院校相關專業的師生用書和培訓學校的教材。

作者簡介

王長青,華為通信工程師,現負責電信BSS領域相關產品的詳細架構設計和開發實施工作。熟悉面向對象技術及UML,15年C和C++開發經驗,10年C#開發經驗,熟悉相關的編譯原理、數據結構、算法。精通Unix、Linux操作系統,且能熟練使用常用操作命令,並且熟悉該環境下的C/C++開發。

目錄大綱

目錄

第1章C語言之定位
1.1計算機應用基礎
1.1.1中央處理器
1.1.2比特和字節
1.1.3二進制
1.1.4編碼格式
1.2 C語言的誕生
1.3第一印象的建立
1.4理解編譯系統——學習的第一步
1.5技術解惑
1.5.1學習C語言還有用嗎
1.5.2怎樣學好C語言
1.5.3學好C語言的建議
1.6課後練習

第2章C語言開發工具詳解
2.1用DOS開發C程序
2.1.1安裝Turbo C 3.0 
2.1.2使用Turbo C 3.0 
2.2在Windows環境下開發C程序使用Visual Studio 2017 
2.2.1安裝Visual Studio 20102017 
2.2.2使用Visual Studio 2017開發第一個C語言程序
2.3使用輕量級開發工具DEV C++ 
2.3.1安裝DEV C++ 
2.3.2使用DEV C++運行一個C語言程序
2.4使用Vsiual C++ 6.0開發C語言程序
2.5使用手機開發C語言程序
2.6技術解惑
2.6.1安裝Visual Studio 2017的幾個常見問題
2.6.2 Windows 7中安裝Visual Studio的常見問題
2.7課後練習

第3章程序員的基本素質培養
3.1養成好的命名習慣
3.2 C程序文件結構
3.2.1 C程序組成部分
3.2.2 C程序格式總結
3.3養成好的C語言編程風格
3.3.1隨時使用縮進格式
3.3.2注意大符號的位置
3.3.3函數的規則
3.3.4注意註釋
3.4如何成為一名*秀的程序員
3.5技術解惑
3.6課後練習

第4章C語言語法
4.1標識符和關鍵字
4.2 *基本的數據類型
4.3常量和變量的深入理解
4.3. 1常量詳解
4.3.2變量詳解
4.4整型數據
4.4.1整型常量詳解
4.4.2整型變量詳解
4.5實型數據
4.5.1實型常量詳解
4.5.2實型變量詳解
4.5.3了解實型常量的類型
4.6字符型數據
4.6.1字符常量詳解
4.6.2字符串常量詳解
4.6.3字符變量詳解
4.7初始化變量
4.8整型、實型和字符型數據間的運算總結
4.8.1自動轉換
4.8. 2強制轉換
4.9技術解惑
4.9.1 C語言中無符號整型變量和有符號整型變量指什麼
4.9.2 C語言中字符變量是怎麼回事
4.9.3怎麼理解字符型數據取值範圍為0~255 
4.9.4怎樣將帶小數點的字符型數據轉換成浮點型的
4.10課後練習

第5章運算符和表達式
5.1運算符和表達式的基本概況
5.1.1先看運算符的種類
5.1.2再看運算符的優先級
5.2算術運算符和算術表達式詳解
5.2.1單目運算符
5.2.2雙目運算符
5.3賦值運算符和賦值表達式
5.3.1基本賦值運算符
5.3.2複合賦值運算符
5.3.3賦值表達式
5.4關係運算符和關係表達式詳解
5.4.1關係運算符
5.4.2關係表達式
5.5邏輯運算符和邏輯表達式詳解
5.5.1邏輯運算符
5.5.2邏輯表達式
5.6逗號運算符和逗號表達式詳解
5.6.1逗號運算符
5.6.2逗號表達式
5.7求字節數運算符詳解
5.8技術解惑
5.8.1 C語言運算符優先級的詳細情況
5.8.2有少數運算符有規定表達式求值的順序
5.8.3在C語言中可以進行混合運算嗎
5.8.4在一個邏輯條件語句中常數項永遠在左側
6.8.5賦值處理的自動類型轉換
5.9課後練習

第6章輸入和輸出
6.1先來了解C語句初步
6.1.1 C語句簡介
6.1.2賦值語句
6.2打通任督二脈——數據輸入和輸出詳解
6.2.1 putchar函數(字符輸出函數)
6.2.2 getchar函數(字符輸入函數)
6.2.3 printf函數(格式輸出函數)
6.2.4 scanf函數(格式輸入函數)
6.2.5 puts函數(字符串輸出函數)
6.2.6 C11標準函數gets_s函數(字符串輸入函數)
6.3技術解惑
6.3.1 gets_s函數和scanf函數的區別
6.3.2克服gets_s函數的缺陷
6.3.3一個C語言的輸入和輸出問題
6.4課後練習

第7章流程控制
7.1 *常見的順序結構
7.2選擇結構
7.2.1單分支結構語句
7.2.2雙分支結構語句
7.2.3還要使用多分支結構語句
7.2.4條件運算符和條件表達式
7.3循環結構詳解
7.3.1 for語句循環
7.3.2 while語句
7.3.3 do-while語句
7.3.4正確對待goto語句
7.3.5 break/continue跳躍
7.3.6死循環/退出程序
7.4技術解惑
7.4.1循環中的低效問題
7.4.2分析C語言循環語句的效率
7.4.3使用for循環語句的注意事項
7.5課後練習

第8章數組和字符串——數據存在形式
8.1一維數組
8.1.1定義一維數組
8.1.2引用一維數組元素
8.1.3初始化一維數組
8.2多維數組
8.2.1二維數組
8.2.2多維數組
8.3字符數組與字符串
8.3 .1字符數組
8.3.2字符串與字符數組
8.3.3字符數組的輸入和輸出
8.4字符串處理函數
8.4.1測試字符串長度函數
8.4.2字符串大小寫轉換函數
8.4.3字符串複製函數
8.4.4字符串比較函數
8.4.5字符串連接函數
8.4.6其他的字符串函數
8.4.7將字符串轉換成數值的函數
8.5字符處理函數
8.5.1字符檢測函數詳解
8.5.2字符大小寫轉換函數詳解
8.6技術解惑
8.6.1數組的下標總是從0開始嗎
8.6.2 C語言對數組的處理是非常有效的嗎
8.6.3初始化賦值一維數組的注意事項
8.6.4冒泡排序
8.7課後練習

第9章函數
9.1 C語言函數的基礎知識
9.1.1函數的分類
9.1.2函數的定義
9.2必須知道的函數聲明和函數原型
9.3函數的參數
9.3.1形參和實參詳解
9.3.2可以將數組名作為函數參數
9.3.3可以將數組作為函數參數
9.4函數的返回值
9.5怎樣實現函數的調用
9.5.1函數的調用格式
9.5.2函數調用的方式
9.5.3被調函數的聲明方式
9.5.4對調用函數的方式進行深入分析
9.6函數的嵌套調用和遞歸調用
9.6.1函數嵌套調用詳解
9.6.2函數遞歸調用詳解
9.7必須了解變量的作用域和生存期
9.7.1變量作用域詳解
10.9.7.2靜態存儲變量和動態存儲變量
9.8談談C的內部函數和外部函數
9.8.1內部函數詳解
9.8.2外部函數詳解
9.9必須知道的庫函數
9.10技術解惑
9.1通過Turbo C深入分析項目文件
9.10.2要盡量避免不必要的函數調用
9.10.3請確保聲明和定義是靜態的,除非希望從不同的文件中調用該函數
9.10.4避免過長的main()函數
9.10.5函數的地址本身也是數據
9.10.6什麼時候說明函數
9.10.7一個函數可以有多少個參數
9.10.8如果一個函數沒有返回值,是否需要加入return語句
9.10.9在程序退出main函數之後還有可能執行一部分代碼
9.10.10 exit()函數和return語句有什麼不同
9.11課後練習

第10章指針是學習C語言的*大障礙
10.1基本概念
10.2變量的指針和指向變量的指針變量
10.2.1聲明指針變量
10.2.2指針變量的初始化
10.2.3指針變量的引用
10.2.4關於指針運算符的說明
10.2.5指針變量的運算
10.2.6指針變量作為函數參數
10.2.7 void類型的指針
10.3指針和數組
10.3.1數組元素的指針
10.3 .2指向一維數組元素的指針變量
10.3.3通過指針引用數組元素
10.3.4數組名作函數參數
10.4指針和多維數組
10.4.1多維數組的地址
10.4.2指向多維數組的指針變量
10.5指針和字符串
10.5.1指針訪問字符串
10.5.2字符串指針作函數參數
10.5.3使用字符串指針變量與字符數組的區別
10.6指針數組和多級指針
10.6.1指針數組
10.6.2多級指針的定義和應用
10.6.3指向指針的指針
10.6.4 main函數的參數
10.7指針函數和函數指針
10.7.1指針函數
10.7.2函數指針
10.8技術解惑
10.8.1指針初始化時應注意的問題
10.8.2指針賦值時應注意的問題
10.8.3指針用於數組時應注意的問題
10.8.4結構中使用指針時應注意的問題
10.8.5避免不必要的內存引用
10.8.6避免懸空指針和野指針
10.8.7數組下標與指針的效率解析
10.8.8使用指針時的常見錯誤
10.9課後練習

第11章數據的熔爐——結構體、共用體和枚舉
11.1結構體
11.1.1定義結構體類型
11.1.2定義結構體類型變量
11.1.3引用結構體變量
11.1.4初始化結構體變量
11.2進一步談結構體數組
11.2.1定義結構體數組
11.2.2初始化結構體數組
11.2.3引用結構體數組
11.3詳談結構體指針
11.3.1定義結構體指針變量
11.3.2初始化結構體指針變量
11.3.3引用結構體指針變量
11.3.4指向結構變量的指針
11.3.5指向結構體數組的指針
11.4在函數中使用結構體
11.4.1結構體變量和結構體指針可以作為函數參數
11.4.2函數可以返回結構體類型的值
121.5共用體(聯合)
11.5.1定義共用體和共用體變量
11.5.2引用和初始化共用體變量
11.6枚舉
11.6.1定義枚舉類型
11.6.2定義枚舉變量
11.6.3引用枚舉變量
11.7為什麼需要用typedef定義類型
11.7.1類型定義符typedef基礎
11.7.2使用typedef 
11.8技術解惑
11.8.1可以省略結構名嗎
11.8.2是否可以定義一種通用數據類型方便地存儲任意類型的數據呢
11.8.3分析結構和共用體的區別
11.8.4一個定義C結構體的問題
11.9課後練習

第12章鍊錶
12.1動態內存分配
12.1.1為什麼用動態內存分配
12.1.2如何實現動態內存分配及其管理
12.2鍊錶詳解
12.2. 1鍊錶基本介紹
12.2.2單向鍊錶
12.2.3創建一個鍊錶
12.2.4刪除整個鍊錶
12.2.5在鍊錶中插入節點
12.2.6在鍊錶中刪除節點
12.2.7雙向鍊錶
12.2.8循環鍊錶
12.3技術解惑
12.3.1一段代碼對鍊錶的總結
12.3.2面試題——判斷單鍊錶是否有環
12.3.3面試題——實現單鍊錶逆置
12.4課後練習

第13章位運算
13.1位運算符和位運算
13.1.1按位與運算(&)
13.1.2按位或運算
13.1.3按位異或運算
13.1.4取反運算
13.1.5左移運算
13.1.6右移運算
13.1.7位運算應用實例
13.2位域
13.2.1位域的定義和位域變量的說明
13.2.2位域的使用
13.3技術解惑
13.3.1二進制補碼運算公式
13.3.2面試題:從某個數中取出指定的某些位
13.3.3位域的內存對齊原則
13.4課後練習

第14章預編譯處理
14.1預編譯基礎
14.2宏定義
14.2.1不帶參數的宏定義
14.2.2帶參數的宏定義
14.2.3字符串化運算符
14.2.4並接運算符
14.3文件包含詳解
14.4條件編譯
14.4.1 #ifdef… #else…#endif命令
14.4.2 #if defined… #else…#endif 
14.4.3 #ifndef… #else…#endif 
14.4.4 #if !defined… #else…#endif 
14.4. 5 #ifdef…#elif… #elif…#else… #endif 
14.5技術解惑
14.5.1還有其他預編譯指令嗎
14.5.2帶參的宏定義和函數不同
14.5.3總結C語言中的預處理指令
14.5.4預編譯指令的本質是什麼
14.5.5 sizeof(int)在預編譯階段是不會被求值的
14.5.6多行預處理指令的寫法
14.6課後練習

第15章文件操作
15.1 C領域中的文件
15.1.1文本文件
15.1.2文件分類
15.2文件指針
15.3實現文件打開與關閉
15.3.1打開文件
15.3.2關閉文件
15.4文件讀寫詳解
15.4.1字符讀寫函數
15.4.2字符串讀寫函數
15.4.3格式化讀寫函數
15.4.4數據塊讀寫函數
15.4.5其他的讀寫函數
15.5必須掌握文件的隨機讀寫
15.5.1 fseek函數詳解
15.5.2 rewind函數詳解
15.5.3 ftell函數詳解
15.6文件管理函數詳解
15.6.1刪除文件
15.6.2重命名文件
15.6.3複製文件
15.7文件狀態檢測函數詳解
15.7.1 feof函數詳解
15.7.2 ferror函數詳解
15.7.3 clearerr函數詳解
15.8 Win32 API中的文件操作函數
15.8.1創建和打開文件
15.8.2讀取、寫入和刪除文件
15.9技術解惑
15.9.1文件指針和文件內部的位置指針是一個含義嗎
15.9.2 fseek函數的換行問題
15.9.3怎樣解決gets函數的溢出問題
15.9.4 feof函數會多讀一個數據嗎
15.9.5流和文件有何關係
15.10課後練習

第16章錯誤和程序調試
16.1常見錯誤分析
16.1.1語法錯誤
16.1.2邏輯錯誤(語義錯誤)
16.1.3內存錯誤
16.2錯誤的檢出與分離
16.3調試時的注意事項
16.3.1上機前要先熟悉程序運行的環境
16.3.2程序設計過程中要為程序調試做好準備
16.4技術解惑
16.4.1編譯通過並不代表運行正確
16.4.2兩段代碼的編譯差別
16.4.3調試程序的方法與技巧
16.5課後練習

第17章內存管理
17.1 C語言的內存模型
17.2棧和堆
17.2.1棧操作
17.2.2堆操作
17.3動態管理
17.3.1使用分配函數malloc 
17.3.2使用函數calloc分配內存空間並初始化
17.3.3使用函數realloc重新分配內存
17.3.4使用函數free釋放內存空間
17.4課後練習

第18章C語言*級編程技術
18.1何謂C的*級編程技術
18.2分析文本的屏幕輸出和鍵盤輸入
18.2.1實現文本的屏幕輸出
18.2.2實現鍵盤輸入
18.2.3應用實例
18.3分析圖形顯示方式和鼠標輸入
18.3.1初始化圖形模式
18.3.2清屏和恢復顯示函數詳解
18.3.3建立獨立圖形運行程序
18.3.4基本繪圖函數詳解
18.3.5線性函數詳解
18.3.6顏色控制函數詳解
18.3.7分析填色函數和畫圖函數
18.3. 8圖形窗口函數詳解
18.3.9分析圖形方式下的文本輸出函數
18.4菜單設計
18.5課後練習

第19章算法——抓住程序的靈魂
19.1我們對算法的理解
19.1.1為什麼是程序靈魂
19.1.2何謂算法
19.1.3算法的特性
19.2算法表示法——流程圖
19.3枚舉算法思想
19.3.1枚舉算法基礎
19.3.2實戰演練—百錢買百雞
19.3.3實戰演練—解決“填寫運算符”問題
19.4遞推算法思想
19.4.1遞推算法基礎
19.4.2實踐演練—解決“斐波那契數列”問題
19.4.3實踐演練—解決“銀行存款”問題
19.5遞歸算法思想
19.5.1遞歸算法基礎
19.5.2實踐演練—解決“漢諾塔”問題
19.5.3實踐演練—解決“階乘”問題
19.6分治算法思想
19.6.1分治算法基礎
19.6.2實踐演練—解決“大數相乘”問題
19.6.3實踐演練—歐洲*軍杯比賽日程安排
19.7貪心算法思想
19.7.1貪心算法基礎
19.7 .2實踐演練—解決“裝箱”問題
19.7.3實踐演練—解決“找零方案”問題
19.8試探法算法思想
19.8.1試探法算法基礎
19.8.2實踐演練—解決“八皇后”問題
19.8. 3實踐演練—體彩29選7彩票組合
19.9迭代算法
19.9.1迭代算法基礎
19.9.2實踐演練—解決“求平方根”問題
19.10模擬算法思想
19.1模擬算法的思路
19.2實踐演練—解決“猜數字遊戲”問題
19.3實踐演練—解決“擲骰子遊戲”問題
19.11技術解惑
19.11.1衡量算法的標準是什麼
19.11.2在什麼時候選擇使用枚舉法
19.11.3遞推和遞歸有什麼差異
19.11.4總結分治法能解決什麼類型的問題
19.11.5分治算法的機理是什麼
19.11.6為什麼說貪婪算法並不是*優解決問題的
19.11.7回溯算法會影響算法效率嗎
19.11.8遞歸算法與迭代算法有什麼區別
19.12課後練習

第20章數據結構
20.1使用線性表
20.1.1線性表的特性
20.1.2順序表操作
20.1.3實踐演練——使用順序表操作函數
20.2先進先出的隊列
20.2.1什麼是隊列
20.2.2實踐演練——實現一個排號程序
20.3後進先出棧
20.3.1什麼是棧
20.3.2實踐演練— —實現棧操作
20.4技術解惑
20.4.1線性表插入操作的時間複雜度是多少?
20.4.2線性表刪除操作的時間複雜度是多少?
20.4.3線性表按值查找操作的時間複雜度是多少?
20.4.4線性錶鍊接存儲(單鍊錶)操作的11種算法是什麼?
20.4.5堆和棧的區別是什麼?
20.5課後練習

第21章網絡編程技術
21.1 OSI 7層網絡模型
21.2 TCP/IP子協議
21.2.1 IP協議
21.2.2 TCP協議
21.2.3 UDP協議
21.2.4 ICMP協議
21.3使用C語言開發網絡項目
21.3.1網絡編程方式
21.3.2網絡通信基本流程
21.3.3搭建開發環境
21.3.4兩個常用的數據結構
21.3.5 Windows Sockets基礎
21.4常用的Winsock函數
21.4.1 WSAStartup函數
21.4.2 socket函數
21.4.3 inet_addr函數
21.4.4 gethostbyname函數
21.4.5 bind函數
21.4.6 connect函數
21.4.7 select函數
21.4.8 recv函數
21.4.9 sendto函數
21.5 MAC地址
21.6 NetBIOS編程
21.6.1處理過程
21.6.2 NetBIOS命令
21.6.3 NetBIOS名字解析
21.6.4何謂NetBEUI 
21.6.5 NetBIOS範圍
21.6.6 NetBios控制塊
21.7實戰演練——獲取當前機器MAC地
21.7.1選擇開發工具
21.7.2設計MFC窗體
21.7.3具體編碼

第22章初入江湖——遊戲項目設計
22.1遊戲功能描述
22.2遊戲總體設計
22.2.1功能模塊設計
22.2.2數據結構設計
22.2.3構成函數介紹
22.3遊戲具體實現
22.3.1預處理
22.3.2主函數
22.3.3初始化界面處理
22.3.4時鐘中斷處理
22.3.5成績、速度和幫助處理
22.3.6滿行處理
22.3.7方塊顯示和消除處理
22.3.8遊戲方塊操作判斷處理

第23章風雲再起— —網絡項目設計
23.1系統功能描述
23.2系統總體設計
23.2.1功能模塊設計
23.2.2數據結構設計
23.2.3構成函數介紹
23.3系統具體實現
23.3.1預處理
23.3.2初始化處理
23.3.3控制模塊
23.3 .4數據報解讀處理
23.3.5 Ping測試處理
23.3.6主函數

第24章爐火純青——學生成績管理系統
24.1系統總體描述
24.1.1項目開發的目標
24.1.2項目提出的意義
24.1.3系統功能描述
24.2系統總體設計
24.2.1功能模塊設計
24.2.2數據結構設計
24.2.3構成函數介紹
24.3系統具體實現
24.3.1預處理
24.3.2主函數main 
24.3.3系統主菜單函數
24.3.4表格顯示信息
24.3.5信息查找定位
24.3.6格式化輸入數據
24.3.7增加學生記錄
24.3.8查詢學生記錄
24.3.9刪除學生記錄
24.3.10修改學生記錄
24.3.11插入學生記錄
24.3.12統計學生記錄
24.3.13排序處理
24.3.14存儲學生信息

第25章笑傲江湖——C51實現跑馬燈程序
25.1單片機C語言基礎
25.1. 1單片機C語言的優越性
25.1.2 C51的數據類型
25.1.3 C51數據的存儲結構
25.1.4 C51運算符和表達式
25.1.5 C51的中斷函數
25.2跑馬燈設計實例
25.2.1基本跑馬燈實現
25.2.2矩形波發生器
25.2.3用定時器/計數器產生矩形波
25.3一個完整的跑馬燈程序
25.3.1電路設計
25.3.2程序設計