相關主題
商品描述
本書以問題為驅動、實踐為主導、“腦手並用”為核心理念、“學做合一”為基本方式,向學習者展示並講解程序設計從問題到程序、從思路到代碼、從編輯到測試的完整過程。本書在展示並講解的過程中,通過對特定問題的分析,有的放矢地引入恰如其分的C語言的基本概念和編程知識,對其進行通俗易懂、詳盡透徹但不失準確的闡釋,詮釋這些知識究竟應該如何應用於編程。本書循序漸進地講解C99的相關內容。本書提供的相關配套視頻,以“電子黑板”為手段,對C語言的基本概念和編程知識進行生動的講解。其不僅是對本書文本所做的重要補充,更是對編程完整動態過程的實際示範,為學習者提供了通過模仿進行學習的生動範例。精心創作、改編、收集的與學習內容密切關聯的練習,是本書為學習者提供的進行程序設計學習與實踐的素材,並且為這種學習實踐提供了實際操作平臺——Online Judge(在線評測系統)。本書自始至終強調良好的編程習慣和風格,以結構化程序設計原則為指導,結合軟件工程、軟件測試的基本理念,註重培養學習者通過編程解決問題的專業能力,以提升學習者嚴謹認真、周到周密、細心耐心的職業素養。本書適合作為高等院校程序設計入門語言的教材,以及相關專業人員的技術參考書,也適合作為中學生及以上水平的其他各類讀者自學編程的參考書。
目錄大綱
第0章 從0開始 1
0.0 什麼是編程 1
0.0.0 計算機的工作原理 1
0.0.1 內存中的程序來自何處 3
0.0.2 可執行文件的制作 3
0.1 怎樣用C語言編程 6
0.1.0 學習C語言編程的條件 6
0.1.1 編寫最簡單的C程序 7
0.2 輸出字符序列 11
0.2.0 輸出簡單字符序列 11
0.2.1 輸出特殊字符 13
0.2.2 C語言的“單詞” 16
第1章 整數類型及表達式 21
1.0 輸出整數 21
1.0.0 輸出整數問題 21
1.0.1 十進制常量 21
1.0.2 用printf()函數輸出整數常量 22
1.0.3 整數常量的其他寫法 23
1.1 整數的五則運算 23
1.1.0 整數的加減運算 23
1.1.1 整數的乘法運算 24
1.1.2 標識符 26
1.1.3 整數的除法運算 28
1.1.4 數據類型的概念 30
1.2 讓程序擁有記憶 31
1.2.0 填數問題 31
1.2.1 用變量思考 37
1.3 程序在運行時輸入數據 40
1.3.0 通過調用scanf()函數輸入數據 40
1.3.1 scanf()函數的應用 41
1.3.2 scanf()函數的誤用 44
1.4 其他整數類型 46
1.4.0 int類型回顧 46
1.4.1 unsigned類型 47
1.4.2 其他幾對整數類型 49
1.4.3 字符類型 52
1.4.4 有關字符類型的問題 55
1.5 運算符和表達式 66
1.5.0 運算符 66
1.5.1 表達式 69
1.5.2 運算符的優先級和結合性 74
第2章 順序與選擇 77
2.0 幾個問題 77
2.0.0 分橘子問題 77
2.0.1 找對手問題 79
2.0.2 大數相加問題 81
2.0.3 程序概述 83
2.1 語句概述 87
2.1.0 什麼是語句 87
2.1.1 什麼不是語句 89
2.1.2 關於語句的誤區 89
2.2 if語句 90
2.2.0 判斷整數是否是奇數 90
2.2.1 判斷整數是奇數還是偶數 94
2.2.2 討論 97
2.3 判斷常用的幾種運算 99
2.3.0 判斷是否是3的倍數 99
2.3.1 判斷各位數字是否全相同 103
2.3.2 條件運算符 108
2.3.3 關系運算符 110
2.3.4 冒泡法排序 116
2.4 switch語句 119
2.4.0 求第幾天 119
2.4.1 求星期幾 125
2.4.2 對switch語句的進一步說明和討論 128
第3章 循環與近似計算 137
3.0 while語句 137
3.0.0 海盜問題 137
3.0.1 統計字符個數 140
3.0.2 四進制數轉十進制數 142
3.0.3 序點的概念 145
3.1 do-while語句 149
3.1.0 統計字符個數 149
3.1.1 求逆序數和位數 151
3.2 for語句 155
3.2.0 由數字求整數 155
3.2.1 Fibonacci數列問題 160
3.2.2 第二種for語句 162
3.3 不規則的循環 163
3.3.0 判斷素數 163
3.3.1 字符轉換輸出 167
3.4 窮舉法 170
3.4.0 做對了多少道題 170
3.4.1 換零錢 172
3.4.2 誰是兇手 175
3.5 goto語句 178
3.6 浮點類型及應用 178
3.6.0 浮點數的基本概念 178
3.6.1 C語言中的實浮點類型 179
3.6.2 求調和級數的近似值 182
3.6.3 求平方根 184
3.6.4 求sin函數值 186
第4章 函數與指針 188
4.0 函數調用、函數聲明與函數定義 188
4.0.0 函數調用(Function call) 188
4.0.1 函數聲明(Function declaration) 189
4.0.2 函數定義(Function definition) 189
4.1 函數與結構化程序設計 191
4.1.0 結構化程序設計原則 191
4.1.1 完數問題 191
4.2 作用域和生存期 197
4.2.0 作用域 197
4.2.1 函數名的作用域 197
4.2.2 兩種不易被察覺的錯誤寫法 197
4.2.3 局部變量的作用域 198
4.2.4 生存期的概念 199
4.3 遞歸 202
4.3.0 什麼是遞歸 202
4.3.1 求階乘 203
4.3.2 求最大公約數 206
4.3.3 Hanoi塔問題 207
4.3.4 關於Hanoi塔的新問題 211
4.4 指向數據對象的指針概述 215
4.4.0 約分問題 215
4.4.1 指向數據對象的指針 217
4.4.2 在遞歸計數問題中的應用 224
第5章 數組與指針 227
5.0 兩個簡單的問題 227
5.0.0 摘蘋果問題 227
5.0.1 分糖果問題 231
5.1 學會數數 234
5.1.0 翻卡片問題 234
5.1.1 篩法求素數表 236
5.2 向函數傳遞數組 238
5.2.0 篩法求素數表 238
5.2.1 排序問題 241
5.3 數組名的性質和指針的運算 244
5.3.0 數組名的類型 244
5.3.1 指向數據對象指針的運算 247
5.4 指向虛無的指針及函數形式的宏定義 256
5.4.0 分組問題 256
5.4.1 改進的寫法 259
5.4.2 函數形式的宏定義 260
第6章 字符串及數組構成的數組 264
6.0 字符串、字符數組及指向字符的指針 264
6.0.0 字符串及裸串 264
6.0.1 字符串的輸入與存儲 268
6.1 字符串的常見操作及應用 269
6.1.0 求字符串長度 270
6.1.1 比較兩個字符串的大小 271
6.1.2 scanf()函數中的轉換 274
6.1.3 字符處理庫函數 278
6.2 常用的字符串函數 279
6.2.0 字符串處理庫函數 279
6.2.1 sscanf()與sprintf()函數 281
6.2.2 restrict關鍵字(C99)及memcpy()函數集 281
6.2.3 字符串轉換庫函數 282
6.3 由數組構成的數組 283
6.3.0 幻方問題 284
6.3.1 由數組構成的數組的數據類型 287
6.3.2 向函數傳遞由數組構成的數組 291
6.4 main()函數的參數 297
6.4.0 指向指針的指針 297
6.4.1 main()函數的另一種寫法 297
6.4.2 求和問題 299
第7章 結構體、共用體及枚舉類型 301
7.0 結構體類型 301
7.0.0 輸出分數最高的學生信息 301
7.0.1 改進 304
7.0.2 進一步改進 308
7.0.3 成績統計 311
7.1 共用體類型 315
7.1.0 概述 315
7.1.1 對double類型的解析 316
7.2 位運算 318
7.2.0 求反碼 318
7.2.1 輸出整數的二進制形式 319
7.2.2 按位異或運算——“^” 321
7.2.3 按位或運算——“|” 322
7.2.4 查找兇手 323
7.2.5 輸出二進制形式的數值 324
7.2.6 位段 325
7.3 枚舉類型 327
7.3.0 概述 327
7.3.1 球的顏色問題 328
7.4 _Bool類型 330
7.4.0 _Bool類型概述 330
7.4.1 stdbool.h文件 330
第8章 數據類型的深入討論 332
8.0 指向函數的指針 332
8.0.0 局部排序 332
8.0.1 qsort()庫函數的應用 340
8.0.2 bsearch()庫函數的應用 344
8.1 復雜數據類型的構造方法和解讀 345
8.1.0 復雜數據類型的構造方法 345
8.1.1 復雜數據類型的解讀 350
8.1.2 typedef 352
8.2 更自由地使用內存 354
8.2.0 計算100! 354
8.2.1 動態分配內存函數 357
8.2.2 改進的寫法 358
8.2.3 用鏈表解決問題 361
第9章 輸入與輸出 367
9.0 面向文件的輸入與輸出 367
9.0.0 把程序輸出寫入文件 367
9.0.1 C程序怎樣讀文件 371
9.0.2 格式化輸入/輸出的格式 372
9.0.3 fprintf()與printf()函數的等效性 377
9.1 文件、流、FILE及FILE * 378
9.1.0 文件 378
9.1.1 流 378
9.1.2 FILE 378
9.1.3 FILE * 379
9.1.4 文本流和二進制流 379
9.1.5 自動打開的流 380
9.1.6 EOF 380
9.1.7 其他幾個用於文本文件的輸入/輸出函數 380
9.2 二進制文件的讀/寫 381
9.2.0 二進制流 381
9.2.1 用fwrite()函數寫二進制文件 382
9.2.2 用fread()函數讀二進制文件 383
9.2.3 feof()與ferror()函數 384
9.3 定位問題 385
9.3.0 ftell()函數 386
9.3.1 fseek()函數 386
9.3.2 rewind()函數 386
9.3.3 fgetpos()與fsetpos()函數 386
第10章 程序組織與編譯預處理 387
10.0 編譯預處理簡介 387
10.0.0 預處理的一般特點 387
10.0.1 預處理的幾個階段 388
10.1 文件包含 388
10.1.0 #include預處理命令 388
10.1.1 用途 389
10.2 宏定義與宏替換 389
10.2.0 類似對象的宏 390
10.2.1 類似函數的宏 390
10.2.2 預處理單詞 392
10.3 預處理命令的其他話題 393
10.3.0 再談宏 393
10.3.1 其他預處理命令 395
10.4 使用外部變量 396
10.4.0 外部變量 396
10.4.1 static函數 399
第11章 標準庫簡介 400
11.0 使用標準庫的一些常識 400
11.0.0 標準頭與標準頭文件 400
11.0.1 使用庫的禁忌 401
11.0.2 並存的宏與函數 401
11.0.3 函數定義域問題 402
11.1 對語言的補充 402
11.1.0 stddef.h 402
11.1.1 iso646.h 403
11.1.2 limits.h和float.h 404
11.1.3 stdarg.h 404
11.1.4 stdbool.h(C99) 404
11.1.5 stdint.h(C99) 404
11.2 stdio.h 406
11.2.0 數據類型 406
11.2.1 宏 406
11.2.2 函數 406
11.3 stdlib.h 408
11.3.0 數值轉換函數 408
11.3.1 偽隨機數序列生成函數 409
11.3.2 內存管理函數 409
11.3.3 環境通信函數 409
11.3.4 查找與排序函數 412
11.3.5 整數算術函數 412
11.3.6 多字節、寬字節字符和字符串轉換函數 413
11.4 string.h 413
11.5 數值計算 413
11.5.0 math.h(C89) 413
11.5.1 math.h(C99) 414
11.5.2 complex.h(C99) 418
11.5.3 tgmath.h(C99) 418
11.5.4 fenv.h(C99) 418
附錄A C語言的關鍵字 420
附錄B C語言的數據類型 421
附錄C ASCII碼表 422
附錄D C語言的運算符 423
附錄E Dev-C++使用簡介 424
參考文獻 426
