第1篇 C语言程序设计初步
第1单元 简单的C语言程序3
1.1 两个整数相加3
1.1.1 两个整数常数相加的C语言程序3
1.1.2 C语言程序的编译与连接3
1.1.3 带有输出操作的C程序4
习题1.16
1.2 变量初步8
1.2.1 使用变量的两整数相加程序8
1.2.2 从键盘给变量输入值10
习题1.212
1.3 用浮点数进行除运算14
1.3.1 整数相除的问题14
1.3.2 两个浮点数相除的C程序15
习题1.316
第2单元 选择结构18
2.1 将从键盘输入的任意两个数按升序输出18
2.1.1 问题分析与参考代码18
2.1.2 关系运算符与关系表达式19
2.1.3 if-else二分支选择结构20
2.1.4 程序测试21
2.1.5 程序的书写风格22
习题2.123
2.2 三中取大25
2.2.1 算法分析与参考代码25
2.2.2 逻辑运算符与逻辑表达式26
2.2.3 多分支选择结构中if与else的配对规则27
2.2.4 测试用例设计: 语句覆盖与分支覆盖28
2.2.5 else if结构29
2.2.6 条件运算符30
习题2.231
2.3 字符分类34
2.3.1 字符类型35
2.3.2 基于整型值匹配的switch结构37
2.3.3 算法分析与参考代码37
2.3.4 程序测试用例设计的等价分类法40
2.3.5 switch结构与if-else结构的比较41
习题2.342
第3单元 重复结构46
3.1 C语言重复结构基础46
3.1.1 C语言的三种重复结构46
3.1.2 累加器程序47
3.1.3 打印九九乘法表53
习题3.1 56
3.2 穷举65
3.2.1 求素数65
3.2.2 搬砖问题67
3.2.3 推断名次69
习题3.273
3.3 迭代与递推78
3.3.1 用辗转相除法求两个正整数的最大公因子78
3.3.2 Fibonacci数列81
3.3.3 猴子吃桃子83
3.3.4 用二分迭代法求解一元二次方程85
习题3.388
第4单元 用函数组织C程序92
4.1 函数基础92
4.1.1 函数定义92
4.1.2 函数调用94
4.1.3 函数原型声明95
4.1.4 局部变量与全局变量96
4.1.5 模块化程序设计99
习题4.1102
4.2 递归105
4.2.1 阶乘的递归计算105
4.2.2 汉诺塔106
习题4.2109第5单元 计算机模拟111
5.1 随机问题模拟111
5.1.1 产品随机抽样111
5.1.2 用蒙特卡洛法求π的近似值114
习题5.1115
5.2 基于步长的模拟116
5.2.1 事件步长法--中子扩散问题116
5.2.2 时间步长法--盐水池问题118
习题5.2122
第2篇 数据结构+算法
第6单元 顺序地组织同类型数据--数组类型127
6.1 数组基础127
6.1.1 扑克牌的表示与数组定义127
6.1.2 扑克牌查找: 数组元素引用与数组名参数129
6.1.3 扑克洗牌的随机模拟132
6.1.4 扑克牌整理: 数组元素排序133
6.1.5 扑克发牌: 二维数组应用135
习题6.1139
6.2 字符串143
6.2.1 字符串与字符数组143
6.2.2 字符串输入输出144
6.2.3 字符串的其他操作147
习题6.2150
第7单元 描述一类对象的属性--结构体类型和共用体类型153
7.1 结构体类型基础153
7.1.1 结构体类型的定义153
7.1.2 结构体类型的实例化154
7.1.3 结构体变量的引用155
习题7.1157
7.2 结构体数组159
7.2.1 结构体数组的定义与初始化159
7.2.2 结构体数组元素的引用161
习题7.2163
7.3 union类型165
7.3.1 共用体类型的定制与共用体变量的定义165
7.3.2 共用体类型与结构体类型的比较165
7.3.3 共用体变量的应用167
习题7.3168
第8单元 指针类型171
8.1 指针的概念171
8.1.1 指针=基类型+地址171
8.1.2 悬空指针、空指针与void指针173
8.1.3 多级指针174
8.1.4 指针的操作174
习题8.1177
8.2 数组的指针形式180
8.2.1 数组名与指向数组的指针180
8.2.2 二维数组的指针形式182
8.2.3 指针与C字符串184
习题8.2186
8.3 指针参数188
8.3.1 变量地址传送189
8.3.2 数组地址传送190
8.3.3 字符指针参数194
8.3.4 带参主函数197
习题8.3199
第9单元 常用算法设计策略202
9.1 分治策略202
9.1.1 二分查找202
9.1.2 快速排序204
9.1.3 自行车带人问题207
习题9.1209
9.2 回溯策略211
9.2.1 迷宫问题211
9.2.2 使用堆栈组织搜索过程215
习题9.2220
9.3 贪心策略221
9.3.1 旅行费用问题222
9.3.2 删数问题224
习题9.3227
9.4 动态规划228
习题9.4232
第3篇 深入学习C语言
第10单元 C语言中常量的表示237
10.1 字面常量237
10.1.1 整型字面常量的表示和辨识237
10.1.2 浮点类型字面常量的表示和辨识238
习题10.1239
10.2 宏241
10.2.1 宏定义241
10.2.2 使用宏应当注意的几点241
10.2.3 带参宏定义243
习题10.2245
10.3 const修饰符248
10.3.1 用const“固化”变量248
10.3.2 用const修饰指针249
习题10.3252
10.4 枚举类型253
10.4.1 枚举类型及其定义253
10.4.2 枚举变量的定义254
10.4.3 对枚举变量和枚举元素的操作254
习题10.4255
第11单元 数据类型257
11.1 基本数据类型特性258
11.1.1 整型数据类型的主要特性258
11.1.2 浮点数据类型的主要特性260
习题11.1261
11.2 数据类型转换262
11.2.1 数据类型转换的一般规则262
11.2.2 数据类型转换的副作用与注意事项265
习题11.2269
11.3 typedef和sizeof操作符270
11.3.1 typedef270
11.3.2 sizeof运算符272
习题11.3272
第12单元 C程序中变量的访问属性274
12.1 变量访问属性的概念274
12.1.1 变量的存储类型与生存期274
12.1.2 标识符的作用域275
12.1.3 标识符的链接属性276
习题12.1276
12.2 C语言程序实体的存储类型277
12.2.1 C程序中的局部变量277
12.2.2 C程序中的外部变量279
习题12.2283
12.3 C程序中的动态内存分配287
12.3.1 申请存储空间288
12.3.2 释放一个指针指向的存储空间289
12.3.3 修改一个指针指向的存储空间大小290
习题12.3291
第13单元 格式化输入输出函数详解292
13.1 格式化输出函数printf ()292
13.1.1 格式参数结构292
13.1.2 基本格式符292
13.1.3 长度修饰符293
13.1.4 域宽与精度说明293
13.1.5 前缀修饰符294
习题13.1296
13.2 格式化输入函数scanf ()297
13.2.1 地址参数297
13.2.2 格式参数结构与工作机制297
13.2.3 数值数据的输入控制300
13.2.4 scanf ()与输入缓冲区301
13.2.5 字符型数据的输入控制302
13.2.6 scanf ()的停止与返回306
习题13.2306
第14单元 文件308
14.1 C文件的基本概念308
14.1.1 I/O流与缓冲308
14.1.2 文件及其分类309
14.1.3 FILE类型及其指针309
习题14.1310
14.2 C文件操作的一般过程310
14.2.1 文件打开311
14.2.2 文件读写定位与读写操作312
14.2.3 文件关闭313
习题14.2314
14.3 文件操作程序示例317
14.3.1 写若干行字符串到文本文件317
14.3.2 文件复制317
习题14.3318
第15单元 位运算与位段320
15.1 位运算320
15.1.1 按位逻辑运算320
15.1.2 移位运算322
15.2 位段322
习题15325
附录327
附录A C语言的关键字及其用途327
附录B C语言运算符的优先级和结合方向328
附录C 编译预处理命令328
C.1 宏定义328
C.2 文件包含329
C.3 条件编译329
附录D C语言常用标准库函数329
D.1 数学函数330
D.2 字符函数和字符串函数331
D.3 输入输出函数331
D.4 动态内存分配函数333
D.5 退出程序函数333
D.6 数值转换函数334
D.7 时间和日期函数334
参考文献335
