第1篇 C语言基础知识 2
第1章 C语言概述 2
1.1 关于程序设计 2
1.1.1 了解程序设计 2
1.1.2 了解计算机语言 3
1.1.3 计算机语言的分类 3
1.2 C语言概述 5
1.2.1 C语言的历史发展 5
1.2.2 C语言的基本特点 6
1.3 C语言的开发环境 7
1.3.1 编辑器、编译器和链接器 7
1.3.2 集成开发环境 7
1.4 Turbo C的使用 7
1.5 Microsoft Visual C++6.0的使用 11
1.6 Hello World程序 16
1.7 A+B程序 17
1.8 程序错误和调试 18
1.9 小结 20
1.10 习题 20
第2章 C语言与算法 22
2.1 算法的基本概念 22
2.1.1 算法基础 22
2.1.2 算法特性 23
2.1.3 算法的使用举例 23
2.2 算法描述 25
2.2.1 自然语言 25
2.2.2 流程图 25
2.2.3 3种基本结构 26
2.2.4 N-S流程图 28
2.2.5 伪代码 29
2.3 小结 30
2.4 习题 30
第3章 C语言的构成——函数 31
3.1 函数概述 31
3.1.1 库函数 31
3.1.2 自定义函数 32
3.2 函数的定义和调用 34
3.2.1 简单函数的定义 35
3.2.2 简单函数的调用 37
3.3 函数的参数 40
3.3.1 带参数的函数定义 40
3.3.2 带参数的函数调用 40
3.3.3 形式参数与实际参数 44
3.4 函数的返回值 46
3.4.1 带返回值的函数定义 46
3.4.2 带返回值的函数调用 48
3.5 开发实践 49
3.6 小结 52
3.7 习题 52
第4章 常量、基本数据类型、运算符和表达式 58
4.1 常量与变量 58
4.1.1 常量与符号常量 59
4.1.2 变量 60
4.2 数据类型 61
4.2.1 整型数据 61
4.2.2 实型数据 69
4.2.3 字符型数据 73
4.2.4 枚举型数据 80
4.2.5 基本类型数据的输入和输出函数(scanf()/printf()) 83
4.3 运算符和表达式 91
4.3.1 算数运算符和表达式 92
4.3.2 赋值运算符和表达式 94
4.3.3 关系运算符和表达式 97
4.3.4 逻辑运算符和表达式 98
4.3.5 条件运算符和表达式 99
4.3.6 逗号运算符和表达式 100
4.4 数据类型转换 101
4.4.1 隐式类型转换 101
4.4.2 强制类型转换 104
4.5 小结 104
4.6 习题 105
第5章 变量 113
5.1 变量的定义与使用 113
5.1.1 变量的定义和赋值 113
5.1.2 变量的命名规范 115
5.2 变量的作用范围 115
5.2.1 局部变量 116
5.2.2 全局变量 116
5.3 变量的存储类型 118
5.3.1 变量的3个属性 119
5.3.2 自动变量 123
5.3.3 寄存器变量 124
5.3.4 具有代码块作用域的静态变量 125
5.3.5 具有外部链接的静态变量 126
5.3.6 具有内部链接的静态变量 130
5.3.7 存储类型说明符 131
5.4 开发实践 131
5.5 小结 133
5.6 习题 133
第6章 流程控制 135
6.1 C语句概述 135
6.2 顺序结构程序 137
6.3 选择结构程序 138
6.3.1 单分支if语句 138
6.3.2 双分支if语句 140
6.3.3 多分支else-if语句 141
6.3.4 if语句的嵌套使用 143
6.3.5 switch语句的使用 144
6.4 循环结构程序 147
6.4.1 while语句的使用 147
6.4.2 do…while语句的使用 150
6.4.3 for语句的使用 152
6.4.4 三种循环语句对比 156
6.4.5 嵌套循环 157
6.4.6 continue语句和break语句 158
6.5 开发实践 161
6.6 小结 163
6.7 习题 163
第7章 数组 174
7.1 数组的概述 174
7.2 一维数组 174
7.2.1 一维数组的定义 175
7.2.2 数组元素的访问 175
7.2.3 一维数组的初始化 177
7.2.4 关于“下标越界”问题 179
7.2.5 一维数组程序举例 180
7.3 二维数组 183
7.3.1 二维数组的定义及初始化 184
7.3.2 二维数组元素的访问 184
7.3.3 二维数组的初始化 186
7.3.4 二维数组程序举例 187
7.4 开发实践 188
7.5 小结 191
7.6 习题 191
第8章 指针 201
8.1 指针概述 201
8.2 指针与变量 201
8.2.1 指针变量的定义 204
8.2.2 取地址运算符(&) 204
8.2.3 取值运算符(*) 205
8.2.4 指针变量赋值 207
8.3 指针与函数 210
8.3.1 指针作为函数参数 210
8.3.2 指针作为返回值 213
8.3.3 指向函数的指针 214
8.3.4 指向函数的指针作函数参数 216
8.4 指针与数组 219
8.4.1 指向数组元素的指针 219
8.4.2 指针的算术运算与数组运算 220
8.4.3 使用指针处理数组元素 224
8.4.4 数组名作为指针 228
8.4.5 指针数组 228
8.4.6 指向指针数据的指针 232
8.5 指针与多维数组 233
8.5.1 处理多维数组的元素 233
8.5.2 处理多维数组的行 236
8.5.3 命令行参数 237
8.6 开发实践 239
8.7 小结 243
8.8 习题 244
第9章 构造数据类型 260
9.1 结构体 260
9.1.1 建立结构体类型 261
9.1.2 结构体变量的定义及初始化 262
9.1.3 访问结构体成员 265
9.1.4 结构体数组 267
9.1.5 指向结构体变量的指针 271
9.1.6 指向结构体数组的指针 273
9.1.7 结构体作为函数的参数 276
9.1.8 结构体数组作为参数 280
9.2 共用体 281
9.3 类型定义符typedef 283
9.4 开发实践 284
9.5 小结 290
9.6 习题 290
第10章 预处理命令 300
10.1 预处理器的工作方式 300
10.2 预处理指令 302
10.3 宏定义 303
10.3.1 不带参数的宏 303
10.3.2 带参数的宏 306
10.3.3 #运算符 309
10.3.4 ##运算符 309
10.3.5 取消宏定义 310
10.3.6 宏和函数 311
10.3.7 宏定义(#define)和类型定义(typedef) 312
10.3.8 预定义宏 312
10.4 条件编译 313
10.4.1 #if...#endif指令 313
10.4.2 #if...#else...#endif指令 314
10.4.3 #if...#elif...#endif指令 315
10.4.4 #ifdef...#endif指令 315
10.4.5 #ifndef...#endif指令 316
10.4.6 条件编译的使用 317
10.5 文件包含 318
10.6 其他指令 319
10.6.1 #error指令 319
10.6.2 #line指令 319
10.6.3 #pragma指令 320
10.7 开发实践 320
10.8 小结 321
10.9 习题 322
第11章 再谈函数 330
11.1 函数的嵌套调用 330
11.2 函数的递归调用 332
11.2.1 使用递归 333
11.2.2 递归的基本原理 334
11.2.3 尾递归与循环 335
11.2.4 汉诺塔问题 337
11.2.5 递归的优缺点 341
11.3 数组做函数参数 341
11.3.1 数组元素做函数实参 342
11.3.2 数组名做函数参数 343
11.3.3 多维数组名做函数参数 346
11.4 内联函数 348
11.5 开发实践 348
11.6 小结 351
11.7 习题 352
第2篇 C语言进阶技巧 372
第12章 字符及字符串处理 372
12.1 字符串常量 372
12.1.1 字符串常量概述 372
12.1.2 存储字符串常量 373
12.1.3 字符串常量的表示 373
12.1.4 字符串常量与字符常量 374
12.2 字符串变量 375
12.2.1 字符数组的定义及初始化 375
12.2.2 字符数组与字符指针 377
12.2.3 指针与字符串 378
12.3 字符串的输入 379
12.3.1 创建存储空间 379
12.3.2 gets()函数 380
12.3.3 fgets()函数 381
12.3.4 scanf()函数 382
12.4 字符串的输出 383
12.4.1 puts()函数 383
12.4.2 fputs()函数 384
12.4.3 printf()函数 385
12.5 字符串处理函数 385
12.5.1 strlen()函数 385
12.5.2 strcat()函数 386
12.5.3 strcmp()函数 387
12.5.4 strcpy()函数 389
12.5.5 其他字符串处理函数 390
12.6 开发实践 391
12.7 小结 398
12.8 习题 398
第13章 内存处理 410
13.1 动态存储分配 410
13.1.1 内存分配函数 410
13.1.2 空指针 411
13.2 动态分配字符串 412
13.2.1 使用malloc()函数为字符串分配内存 412
13.2.2 在字符串函数中使用动态存储分配 413
13.3 动态分配数组 414
13.3.1 使用malloc()函数为数组分配内存 414
13.3.2 calloc()函数 417
13.3.3 realloc()函数 417
13.4 释放存储 418
13.4.1 free()函数 418
13.4.2 “无效指针”问题 419
13.5 链表 419
13.5.1 从数组到链表 421
13.5.2 声明结点类型 423
13.5.3 创建结点 423
13.5.4 →运算符 424
13.5.5 向链表中插入结点 424
13.5.6 搜索链表 426
13.5.7 删除链表结点 427
13.5.8 使用链表 429
13.6 开发实践 431
13.7 小结 437
13.8 习题 438
第14章 文件处理 442
14.1 流 442
14.1.1 文件指针 443
14.1.2 标准流与重定向 443
14.2 与文件通信 444
14.2.1 什么是文件 444
14.2.2 文本文件与二进制文件 444
14.3 文件操作 445
14.3.1 打开文件 446
14.3.2 关闭文件 447
14.3.3 为流附加文件 447
14.3.4 从命令行获取文件名 448
14.4 格式化的输入/输出 448
14.4.1 printf()函数与fprintf()函数 448
14.4.2 scanf()函数与fscanf()函数 449
14.5 字符的输入/输出 451
14.5.1 输出函数 451
14.5.2 输入函数 452
14.6 行的输入/输出 455
14.6.1 输入函数 455
14.6.2 输出函数 455
14.7 块的输入/输出 457
14.8 文件的定位 457
14.8.1 fseek()函数与ftell()函数 458
14.8.2 fgetpos()函数与fsetpos()函数 460
14.8.3 rewind()函数 461
14.9 字符串的输入/输出 462
14.10 其他标准I/O函数 462
14.10.1 ungetc()函数 463
14.10.2 fflush()函数 463
14.10.3 setvbuf()函数 464
14.10.4 feof()和ferror()函数 464
14.11 开发实践 464
14.12 小结 469
14.13 习题 469
第15章 底层程序设计 478
15.1 位运算符 478
15.1.1 位逻辑运算符 478
15.1.2 位逻辑运算符的用法 480
15.1.3 移位运算符 483
15.1.4 移位运算符的用法 484
15.2 位字段 486
15.3 开发实践 487
15.4 小结 491
15.5 习题 492
第16章 数学计算支持 495
16.1 浮点类型的特性 495
16.2 整数类型的大小 496
16.3 数学计算 497
16.3.1 三角函数 498
16.3.2 双曲函数 499
16.3.3 指数函数和对数函数 499
16.3.4 幂函数 501
16.3.5 就近取整函数、绝对值函数和取余函数 502
16.4 字符处理 503
16.4.1 字符测试函数 503
16.4.2 字符大小写转换函数 504
16.5 字符串处理 505
16.5.1 复制函数 505
16.5.2 拼接函数 506
16.5.3 比较函数 508
16.5.4 搜索函数 509
16.5.5 其他函数 511
16.6 开发实践 511
16.7 小结 516
16.8 习题 516
第17章 错误处理 520
17.1 诊断 520
17.2 错误 522
17.3 信号处理 523
17.3.1 信号宏 524
17.3.2 signal()函数 524
17.3.3 预定义的信号处理函数 525
17.3.4 raise()函数 525
17.4 非局部跳转 525
17.5 开发实践 526
17.6 小结 527
17.7 习题 528
第18章 国际化特性 529
18.1 本地化 529
18.1.1 类别 529
18.1.2 setlocale()函数 530
18.1.3 localeconv()函数 530
18.2 多字节字符和宽字符 532
18.3 开发实践 533
18.4 小结 534
18.5 习题 534
第3篇 C语言编程实战 538
第19章 五子棋游戏 538
19.1 五子棋游戏简介 538
19.2 需求分析 539
19.3 系统设计 539
19.4 主模块 540
19.5 棋盘模块 543
19.6 下棋模块 544
19.7 判断输赢模块 546
19.8 信息模块 550
19.9 系统界面 551
19.10 本章小结 553
19.11 习题 553
第20章 图书管理系统 562
20.1 需求分析 562
20.2 系统设计 563
20.3 主模块 564
20.4 录入数据模块 568
20.5 修改图书模块 570
20.6 查询图书模块 573
20.7 删除图书模块 578
20.8 文件模块 580
20.9 图书管理系统使用说明 582
20.10 本章小结 585
20.11 习题 585
第21章 制作通讯录 594
21.1 需求分析 594
21.2 系统设计 595
21.3 主模块 596
21.4 创建通讯录模块 598
21.5 排序模块 600
21.6 综合操作模块 602
21.7 保存通讯录模块 606
21.8 打开通讯录模块 607
21.9 删除模块 608
21.10 退出模块 609
21.11 通讯录系统使用说明 609
21.12 本章小结 613
21.13 习题 613