本書作為C 語言程序設計的教程,系統(tǒng)全面地介紹了有關C 語言程序設計開發(fā)所涉及的各類知識。全書共分17 章,內容包括C 語言概述、算法、數(shù)據(jù)類型、運算符與表達式、常用的數(shù)據(jù)輸入/輸出函數(shù)、選擇結構程序設計、循環(huán)控制、數(shù)組、函數(shù)、指針、結構體和共用體、位運算、預處理、文件、存儲管理、網絡套接字編程、綜合實例——學生信息管理系統(tǒng)。全書每章內容都與實例緊密結合,有助于學生理解知識、應用知識,達到學以致用的目的。
本書為慕課版教材,各章節(jié)主要內容配備了以二維碼為載體的微課,并在人郵學院(www.rymooc.com)平臺上提供了慕課。此外,本書還提供了課程資源包。資源包中提供了本書所有實例、上機指導、綜合案例的源代碼、制作精良的電子課件PPT、重點及難點教學視頻、自測題庫(包括選擇題、填空題、操作題題庫及自測試卷等內容),以及拓展綜合案例和拓展實驗。其中,源代碼全部經過精心測試,能夠在Windows XP、Windows 7 系統(tǒng)下編譯和運行
《C語言程序設計(慕課版)》是一本C語言程序設計互聯(lián)網教材,買書送名師,明日科技資深講師面對面授課。本課程依托人民郵電出版社自主開發(fā)的在線教育慕課平臺——人郵學院(www.rymooc.com),該平臺具有完備的在線“教、學、測”功能。人郵學院提供體系完整的100學時慕課教學視頻同步講解,即學即練的在線測試。書中附有188個微課視頻,掃一掃書中二維碼,便可隨時隨地學習。附贈300余道習題和自測題, PPT 課件、案例源代碼、自測試卷、拓展案例等豐富的配套資源。
第1 章 C 語言概述 1
1.1 C 語言的發(fā)展史 2
1.1.1 程序語言簡述 2
1.1.2 C 語言的歷史 2
1.2 C 語言的特點 3
1.3 一個簡單的C 程序 3
1.4 一個完整的C 程序 5
1.5 C 語言程序的格式 8
1.6 開發(fā)環(huán)境 9
1.6.1 Dev C++ 9
1.6.2 Visual C++ 6.0 13
小結 14
上機指導 15
習題 15
第2 章 算法 16
2.1 算法的基本概念 17
2.1.1 算法的特性 17
2.1.2 算法的優(yōu)劣 17
2.2 算法的描述 18
2.2.1 自然語言 18
實例:用自然語言求n!
2.2.2 流程圖 19
實例:畫出趣味俄羅斯方塊的流程圖
2.2.3 N-S 流程圖 22
實例:繪制N-S 流程圖求n!
小結 24
上機指導 24
習題 24
第3 章 數(shù)據(jù)類型 25
3.1 編程規(guī)范 26
3.2 關鍵字 26
3.3 標識符 27
3.4 數(shù)據(jù)類型 28
3.5 常量 29
3.5.1 整型常量 29
3.5.2 實型常量 31
3.5.3 字符型常量 32
實例1:輸出字符常量
實例2:輸出字符串常量
3.5.4 轉義字符 34
3.5.5 符號常量 35
實例:輸入半徑,得到圓的面積
3.6 變量 36
3.6.1 整型變量 36
3.6.2 實型變量 38
實例:使用各種實型變量
3.6.3 字符型變量 40
實例:使用字符型變量
3.7 變量的存儲類別 42
3.7.1 靜態(tài)存儲與動態(tài)存儲 42
3.7.2 auto 變量 42
實例:使用auto 變量
3.7.3 static 變量 43
實例:使用static 變量
3.7.4 register 變量 43
實例:使用register 變量修飾整型變量
3.7.5 extern 變量 44
實例:使用extem 變量
3.8 混合運算 45
實例:int、char、float 型變量相加,
得出double 型變量進行輸出
小結 46
上機指導 46
習題 47
第4 章 運算符與表達式 48
4.1 表達式 49
實例:求解二元一次不定方程ax+by=c 的解
4.2 賦值運算符與賦值表達式 50
4.2.1 變量賦初值 51
實例:模擬鐘點工的計費情況,使用
賦值語句和表達式得出鐘點工
工作8 個小時后所得的薪水
4.2.2 自動類型轉換 52
4.2.3 強制類型轉換 52
實例:通過不同類型變量之間的賦
值,將賦值操作后的結果進行輸出
4.3 算術運算符與算術表達式 53
4.3.1 算術運算符 53
實例:求100~1000 之間滿足各位
數(shù)字之和是5 的所有數(shù)
4.3.2 算術表達式 54
實例:使用算術表達式計算攝氏溫度
4.3.3 優(yōu)先級與結合性 55
實例:通過不同運算符的優(yōu)先級和
結合性,使用printf 函數(shù)顯
示最終的計算結果
4.3.4 自增/自減運算符 57
實例:比較自增、自減運算符前綴
與后綴的不同
4.4 關系運算符與關系表達式 58
4.4.1 關系運算符 58
4.4.2 關系表達式 59
4.4.3 優(yōu)先級與結合性 59
實例:使用if 語句判斷兩個學科的分數(shù)大小
4.5 邏輯運算符與邏輯表達式 61
4.5.1 邏輯運算符 61
4.5.2 邏輯表達式 61
實例:判斷閏年
4.5.3 優(yōu)先級與結合性 61
實例:使用邏輯運算符構造表達
式,通過輸出函數(shù)顯示表達
式的結果
4.6 位邏輯運算符與位邏輯表達式 62
4.6.1 位邏輯運算符 62
4.6.2 位邏輯表達式 63
4.7 逗號運算符與逗號表達式 63
實例:通過逗號運算符將其他運算
符結合在一起形成表達式,
再將表達式的最終結果賦
值給變量
4.8 復合賦值運算符 64
實例:使用復合賦值運算符簡化賦
值運算
小結 65
上機指導 67
習題 67
第5 章 常用的數(shù)據(jù)輸入/輸出
函數(shù) 68
5.1 語句 69
5.2 字符數(shù)據(jù)輸入/輸出 69
5.2.1 字符數(shù)據(jù)輸出 69
實例:使用putchar 函數(shù),輸出字
符串“Hello”
5.2.2 字符數(shù)據(jù)輸入 70
實例1:使用getchar 函數(shù)獲取在鍵
盤上輸入的字符,再利用
putchar 函數(shù)進行輸出
實例2:使用getchar 函數(shù)取消獲取
回車符
5.3 字符串輸入/輸出 72
5.3.1 字符串輸出函數(shù) 72
實例:使用puts 函數(shù)對字符串常量
和字符串變量都進行操作
5.3.2 字符串輸入函數(shù) 73
實例:使用字符串輸入函數(shù)gets 獲
取輸入信息
5.4 格式輸出函數(shù) 74
實例:使用printf 函數(shù)輸出字符花
5.5 格式輸入函數(shù) 78
實例:利用scanf 函數(shù)得到用戶
輸入的兩個整型數(shù)據(jù)
5.6 順序程序設計應用 81
實例:將大寫字符轉換成小寫字符
小結 83
上機指導 83
習題 83
第6 章 選擇結構程序設計 85
6.1 if 語句 86
6.2 if 語句的基本形式 86
6.2.1 if 語句形式 86
實例:使用if 語句模擬信號燈指揮
車輛行駛
6.2.2 if…else 語句形式 89
實例1:使用if…else 語句得到兩個
數(shù)的最大值
實例2:使用if…else 語句模擬信號燈
6.2.3 else if 語句形式 92
實例:使用else if 語句編寫屏幕菜
單程序
6.3 if 的嵌套形式 95
實例:使用if 嵌套語句選擇日程安排
6.4 條件運算符 97
實例:使用條件運算符計算欠款金額
6.5 switch 語句 99
6.5.1 switch 語句的基本形式 99
實例:使用switch 語句輸出分數(shù)段
6.5.2 多路開關模式的switch 語句 103
實例:使用switch 語句設計歡迎界
面的菜單選項
6.6 if…else 語句和switch 語句的區(qū)別 104
6.7 選擇結構程序應用 106
實例:使用switch 語句計算運輸
公司的計費
小結 108
上機指導 108
習題 109
第7 章 循環(huán)控制 110
7.1 循環(huán)語句 111
7.2 while 語句 111
實例:計算1 累加到100 的結果
7.3 do-while 語句 112
實例:使用do-while 語句計算1~
100 之間的累加結果
7.4 for 語句 114
7.4.1 for 語句使用 114
實例:打印俄羅斯方塊的游戲窗口
7.4.2 for 循環(huán)的變體 117
實例:省略for 語句中的第一個
表達式
7.4.3 for 語句中的逗號應用 119
實例:計算1~100 之間所有偶數(shù)
的累加結果
7.5 3 種循環(huán)語句的比較 120
7.6 循環(huán)嵌套 120
7.6.1 循環(huán)嵌套的結構 120
7.6.2 循環(huán)嵌套實例 122
實例:使用嵌套語句打印歡迎界面
的邊框
7.7 轉移語句 124
7.7.1 goto 語句 124
實例:使用goto 語句從循環(huán)內部跳出
7.7.2 break 語句 125
實例:使用break 語句跳出循環(huán)
7.7.3 continue 語句 126
實例:使用continue 語句結束本次
的循環(huán)操作
小結 127
上機指導 128
習題 128
第8 章 數(shù)組 129
8.1 一維數(shù)組 130
8.1.1 一維數(shù)組的定義和引用 130
實例:使用數(shù)組保存數(shù)據(jù)
8.1.2 一維數(shù)組初始化 131
實例:初始化一維數(shù)組
8.1.3 一維數(shù)組應用 134
實例:使用數(shù)組保存學生姓名
8.2 二維數(shù)組 135
8.2.1 二維數(shù)組的定義和引用 135
8.2.2 二維數(shù)組初始化 136
實例:使用二維數(shù)組標記游戲屏幕上的圖案
8.2.3 二維數(shù)組應用 138
實例:打印游戲窗口,并設置左右下橫框上有圖案
8.3 字符數(shù)組 141
8.3.1 字符數(shù)組的定義和引用 141
8.3.2 字符數(shù)組初始化 141
實例:使用二維字符數(shù)組輸出一個鉆石形狀
8.3.3 字符數(shù)組的結束標志 143
8.3.4 字符數(shù)組的輸入和輸出 144
實例:使用兩種方式輸出字符串
8.3.5 字符數(shù)組應用 145
實例:計算字符串中單詞的個數(shù)
8.4 多維數(shù)組 146
8.5 數(shù)組的排序算法 146
8.5.1 選擇法排序 146
8.5.2 冒泡法排序 148
8.5.3 交換法排序 150
實例:實現(xiàn)學生信息管理系統(tǒng)中的
學生成績排名功能
8.5.4 插入法排序 152
8.5.5 折半法排序 154
8.5.6 排序算法的比較 156
8.6 字符串處理函數(shù) 157
8.6.1 字符串復制 157
實例:字符串復制應用
8.6.2 字符串連接 158
實例:字符串連接應用
8.6.3 字符串比較 160
實例:字符串比較應用
8.6.4 字符串大小寫轉換 161
實例:字符串大小寫轉換
8.6.5 獲得字符串長度 163
實例:獲得字符串長度
8.7 數(shù)組應用 164
8.7.1 反轉輸出字符串 164
8.7.2 輸出系統(tǒng)日期和時間 165
8.7.3 字符串的加密和解密 166
小結 168
上機指導 168
習題 169
第9 章 函數(shù) 170
9.1 函數(shù)概述 171
實例:在主函數(shù)中調用其他函數(shù)
9.2 函數(shù)的定義 172
9.2.1 函數(shù)定義的形式 173
9.2.2 定義與聲明 174
實例:定義獲取屏幕光標位置和設置文字顏色函數(shù)
9.3 返回語句 177
9.3.1 從函數(shù)返回 177
實例:從函數(shù)返回應用
9.3.2 返回值 178
實例:返回值類型與return 值類型
9.4 函數(shù)參數(shù) 180
9.4.1 形式參數(shù)與實際參數(shù) 180
實例:形式參數(shù)與實際參數(shù)的比喻實現(xiàn)
9.4.2 數(shù)組作函數(shù)參數(shù) 182
實例:數(shù)組元素作為函數(shù)參數(shù)
9.4.3 main 函數(shù)的參數(shù) 187
實例:main 函數(shù)的參數(shù)使用
9.5 函數(shù)的調用 188
9.5.1 函數(shù)的調用方式 188
實例:調用獲取屏幕光標位置和設
置文字顏色函數(shù),來設置趣
味俄羅斯方塊的標題圖
9.5.2 嵌套調用 193
實例:函數(shù)的嵌套調用
9.5.3 遞歸調用 195
實例:函數(shù)的遞歸調用
9.6 內部函數(shù)和外部函數(shù) 197
9.6.1 內部函數(shù) 197
實例:內部函數(shù)的使用
9.6.2 外部函數(shù) 198
實例:外部函數(shù)的使用
9.7 局部變量和全局變量 200
9.7.1 局部變量 200
實例1:局部變量的作用域
實例2:局部變量的屏蔽作用
9.7.2 全局變量 203
實例:使用全局變量模擬價格調整
9.8 函數(shù)應用 204
實例1:數(shù)學庫函數(shù)使用
實例2:使用三角函數(shù)
實例3:使用字符函數(shù)判斷輸入字符
小結 210
上機指導 210
習題 211
第10 章 指針 212
10.1 指針相關概念 213
10.1.1 地址與指針 213
10.1.2 變量與指針 214
10.1.3 指針變量 214
實例:從鍵盤中輸入兩個數(shù),利用指
針的方法將這兩個數(shù)輸出
10.1.4 指針自加自減運算 218
實例:整型變量地址輸出
10.2 數(shù)組與指針 219
10.2.1 一維數(shù)組與指針 219
實例:輸出數(shù)組中的元素
10.2.2 二維數(shù)組與指針 223
實例:利用指針對二維數(shù)組進行輸
入和輸出
10.2.3 字符串與指針 226
實例:輸入兩個字符串a 和b,將
字符串a 和b 連接起來
10.2.4 字符串數(shù)組 228
實例:輸出12 個月
10.3 指向指針的指針 229
實例1:使用指向指針的指針輸出12 個月
實例2:利用指向指針的指針輸出一維數(shù)組中是偶數(shù)的元
素,并統(tǒng)計偶數(shù)的個數(shù)
10.4 指針變量作函數(shù)參數(shù) 232
實例1:調用自定義函數(shù)交換兩變量值
實例2:嵌套的函數(shù)調用
實例3:任意輸入10 個數(shù)據(jù),先將
這10 個數(shù)據(jù)中是奇數(shù)的數(shù)
據(jù)輸出,再求這10 個數(shù)據(jù)
中所有奇數(shù)之和
10.5 返回指針值的函數(shù) 240
實例:使用返回指針的函數(shù)查找最大值
10.6 指針數(shù)組作main 函數(shù)的參數(shù) 242
實例:輸出main 函數(shù)的參數(shù)內容
小結 243
上機指導 243
習題 244
第11 章 結構體和共用體 245
11.1 結構體 246
11.1.1 結構體類型的概念 246
11.1.2 結構體變量的定義 247
11.1.3 結構體變量的引用 248
實例:引用學生成績結構體
11.1.4 結構體類型的初始化 250
實例:聲明結構體類型表示商品,
然后定義結構體變量,之后
對變量中的成員進行賦值,
最后將結構體變量中保存
的信息進行輸出
11.2 結構體數(shù)組 251
11.2.1 定義結構體數(shù)組 251
11.2.2 初始化結構體數(shù)組 253
實例:初始化學生信息結構體數(shù)
組,并輸出學生信息
11.3 結構體指針 254
11.3.1 指向結構體變量的指針 255
實例:通過指針使用點運算符引用
結構體變量的成員
11.3.2 指向結構體數(shù)組的指針 257
實例:根據(jù)學生結構類型定義結構
體數(shù)組,并對其進行初始化
操作
11.3.3 結構體作為函數(shù)參數(shù) 259
實例:聲明一個簡單的結構類型表
示學生成績,編寫一個函
數(shù),使得該結構類型變量作
為函數(shù)的參數(shù)
11.4 包含結構的結構 262
實例:定義兩個結構體類型,一個
表示日期,一個表示學生的
個人信息
11.5 鏈表 263
11.5.1 鏈表概述 263
11.5.2 創(chuàng)建動態(tài)鏈表 264
11.5.3 輸出鏈表 266
實例:編寫一個包含學生信息的鏈
表結構,并且將鏈表中的信
息進行輸出
11.6 鏈表相關操作 268
11.6.1 鏈表的插入操作 269
11.6.2 鏈表的刪除操作 270
實例:對學生信息鏈表進行刪除操作
11.7 共用體 274
11.7.1 共用體的概念 274
11.7.2 共用體變量的引用 274
實例:定義共用體變量,通過定義
的顯示函數(shù),引用共用體中
的數(shù)據(jù)成員
11.7.3 共用體變量的初始化 275
實例:定義共用體變量的同時進行
初始化操作,并將引用變量
的值輸出
11.7.4 共用體類型的數(shù)據(jù)特點 276
11.8 枚舉類型 276
實例:使用枚舉類型
小結 278
上機指導 278
習題 279
第12 章 位運算 280
12.1 位與字節(jié) 281
12.2 位運算操作符 281
12.2.1 “與”運算符 281
實例:任意輸入兩個數(shù)分別賦給a
和b,計算a&b 的值
12.2.2 “或”運算符 283
實例:任意輸入兩個數(shù)分別賦給a
和b,計算a|b 的值
12.2.3 “取反”運算符 284
實例:輸入一個數(shù)賦給變量a,計
算~a 的值
12.2.4 “異或”運算符 285
實例:輸入兩個數(shù)分別賦給變量a
和b,計算a^b 的值
12.2.5 “左移”運算符 287
實例:將15 先左移兩位,將其左
移后的結果輸出,在這個結
果的基礎上再左移3 位,并
將結果輸出
12.2.6 “右移”運算符 288
實例:將30 和-30 分別右移3 位,
將所得結果分別輸出,在所
得結果的基礎上再分別右
移兩位,并將結果輸出
12.3 循環(huán)移位 289
實例:從鍵盤中輸入一個八進制數(shù),
然后輸入要移位的位數(shù),最后
將移位的結果顯示在屏幕上
12.4 位段 292
12.4.1 位段的概念與定義 292
12.4.2 位段相關說明 293
小結 294
上機指導 294
習題 295
第13 章 預處理 296
13.1 宏定義 297
13.1.1 不帶參數(shù)的宏定義 297
實例:設計趣味俄羅斯方塊的宏
13.1.2 帶參數(shù)的宏定義 298
實例:對兩個數(shù)實現(xiàn)乘法加法混合運算
13.2 #include 指令 299
實例:文件包含應用
13.3 條件編譯 301
13.3.1 #if 命令 301
實例:#if 應用
13.3.2 #ifdef 及#ifndef 命令 304
實例:#ifdef 和#ifndef 的具體應用
13.3.3 #undef 命令 305
13.3.4 #line 命令 305
實例:輸出行號
13.3.5 #pragma 命令 306
小結 306
上機指導 307
習題 307
第14 章 文件 308
14.1 文件概述 309
14.2 文件基本操作 309
14.2.1 文件指針 309
14.2.2 文件的打開 310
14.2.3 文件的關閉 310
14.3 文件的讀寫 311
14.3.1 fputc 函數(shù) 311
實例:向E:\exp01.txt 中寫入
“forever…forever…”
14.3.2 fgetc 函數(shù) 312
實例:在屏幕中顯示出exp02.txt 中
的內容
14.3.3 fputs 函數(shù) 312
實例:向指定的磁盤文件中寫入字
符串“gone with the wind”
14.3.4 fgets 函數(shù) 313
實例:讀取任意磁盤文件中的內容
14.3.5 fprintf 函數(shù) 314
實例:將數(shù)字88 以字符的形式寫
到磁盤文件中
14.3.6 fscanf 函數(shù) 315
實例:將文件中的5 個字符以整數(shù)
形式輸出
14.3.7 fread 和fwrite 函數(shù) 316
實例:將錄入的通訊錄信息保存到
磁盤文件中,并顯示
14.4 文件的定位 318
14.4.1 fseek 函數(shù) 318
實例:向任意一個二進制文件中寫
入一個長度大于6 的字符
串,然后從該字符串的第6
個字符開始輸出余下字符
14.4.2 rewind 函數(shù) 320
實例:rewind 函數(shù)的應用
14.4.3 ftell 函數(shù) 321
實例:求字符串長度
小結 322
上機指導 323
習題 323
第15 章 存儲管理 324
15.1 內存組織方式 325
15.1.1 內存的組織方式 325
15.1.2 堆與!325
實例:在堆中分配內存并釋放
15.2 動態(tài)管理 327
15.2.1 malloc 函數(shù) 327
實例:使用malloc 函數(shù)動態(tài)分配空間
15.2.2 calloc 函數(shù) 328
實例:使用calloc 函數(shù)分配數(shù)組內存
15.2.3 realloc 函數(shù) 329
實例:使用realloc 函數(shù)重新分配內存
15.2.4 free 函數(shù) 330
實例:使用free 函數(shù)釋放內存空間
15.3 內存丟失 331
小結 332
上機指導 332
習題 333
第16 章 網絡套接字編程 334
16.1 內存組織方式 335
16.1.1 IP 地址 335
16.1.2 OSI 七層參考模型 335
16.1.3 地址解析 336
16.1.4 域名系統(tǒng) 337
16.1.5 TCP/IP 337
16.1.6 端口 339
16.1.7 套接字的引入 339
16.1.8 網絡字節(jié)順序 339
16.2 套接字概述 339
16.2.1 套接字概述 340
16.2.2 TCP 的套接字的socket 編程 340
16.2.3 UDP 的套接字的socket 編程 340
16.3 套接字函數(shù) 341
16.3.1 套接字函數(shù)介紹 341
16.3.2 基于TCP 的網絡聊天程序 345
實例:設計網絡聊天服務器端
小結 351
上機指導 352
習題 352
第17 章 綜合實例—學生信息
管理系統(tǒng) 353
17.1 開發(fā)背景 354
17.2 開發(fā)環(huán)境需求 354
17.3 系統(tǒng)功能設計 354
17.4 預處理模塊設計 354
17.4.1 模塊概述 354
17.4.2 控制輸出格式 355
17.4.3 文件引用 355
17.4.4 宏定義 355
17.4.5 函數(shù)聲明 355
17.5 主函數(shù)設計 356
17.5.1 功能概述 356
17.5.2 實現(xiàn)主函數(shù) 356
17.5.3 顯示主菜單 358
17.6 錄入學生信息 358
17.6.1 模塊概述 358
17.6.2 實現(xiàn)文件的打開和關閉功能 359
17.6.3 實現(xiàn)錄入學生信息 360
17.7 查詢學生信息 362
17.7.1 模塊概述 362
17.7.2 查詢沒有記錄的文件 363
17.7.3 查找并打印學生信息 363
17.8 刪除學生信息 364
17.8.1 模塊概述 364
17.8.2 實現(xiàn)刪除學生信息 364
17.9 修改學生信息 366
17.9.1 模塊概述 366
17.9.2 實現(xiàn)修改學生信息 367
17.10 插入學生信息 368
17.10.1 模塊概述 368
17.10.2 實現(xiàn)插入學生信息 368
17.11 學生成績排名 370
17.11.1 模塊概述 370
17.11.2 使用交換排序法實現(xiàn)排序功能 371
17.11.3 實現(xiàn)學生成績排名 371
17.12 統(tǒng)計學生總數(shù) 372
17.12.1 模塊概述 372
17.12.2 實現(xiàn)統(tǒng)計學生總數(shù) 372
17.13 顯示所有學生信息 373
17.13.1 模塊概述 373
17.13.2 讀取并顯示所有學生信息 374
小結 374