第1篇 算法与C程序结构 1
第1单元 C语言程序设计初步 2
1.1 两个整数相加程序 2
1.1.1 最简单的两个整数相加程序 2
1.1.2 C语言程序的编译与连接 3
1.1.3 带有输出操作的C语言程序 4
习题1.1 6
1.2 变量初步 7
1.2.1 使用变量的两个整数相加程序 7
1.2.2 从键盘给变量输入值 9
1.2.3 用户友好的输入/输出原则 10
习题1.2 10
1.3 用实数进行除运算 13
1.3.1 整数相除的问题 13
1.3.2 两个实数相除的C语言程序 13
习题1.3 14
第2单元 有选择功能的C语言程序 16
2.1 二路if-else分支选择结构 16
2.1.1 将从键盘输入的任意两个数按升序输出 16
2.1.2 程序测试 19
2.1.3 程序异常处理 20
习题2.1 21
2.2 多路if-else分支选择结构 23
2.2.1 三中取大 23
2.2.2 一个简单的计算器模拟程序 26
2.2.3 字符型数据 29
习题2.2 30
2.3 switch选择结构 33
2.3.1 switch结构概述 33
2.3.2 使用switch结构的简单计算器 34
2.3.3 字符分类 35
2.3.4 程序测试用例设计——等价分类法 36
习题2.3 38
第3单元 重复结构 41
3.1 迭代与递推 42
3.1.1 用辗转相除法求两个正整数的最大公因子 42
3.1.2 Fibonacci数列 44
3.1.3 猴子吃桃子 47
3.1.4 用二分迭代法求解一元二次方程 49
3.1.5 用步长迭代法求解盐水池问题 52
习题3.1 55
3.2 穷举 61
3.2.1 求素数 61
3.2.2 搬砖问题 63
3.2.3 推断名次 65
习题3.2 68
第4单元 用函数组织C程序 71
4.1 函数基础 71
4.1.1 函数定义与函数返回 71
4.1.2 函数调用 72
4.1.3 函数原型声明 74
4.1.4 局部变量 75
习题4.1 77
4.2 递归 79
4.2.1 阶乘的递归计算 80
4.2.2 汉诺塔 81
习题4.2 83
4.3 随机问题模拟 84
4.3.1 产品随机抽样 84
4.3.2 用蒙特卡洛法求π的近似值 87
4.3.3 用基于事件步长的迭代法求解中子扩散问题 89
习题4.3 90
第2篇 C语言程序的数据结构基础 93
第5单元 顺序地组织同类型数据——数组类型 94
5.1 数组基础 94
5.1.1 扑克牌的表示与数组定义 94
5.1.2 扑克牌查找:数组元素引用与数组名参数 95
5.1.3 扑克洗牌的随机模拟 98
5.1.4 扑克牌整理:数组元素排序 99
5.1.5 扑克发牌:二维数组应用 101
习题5.1 104
5.2 字符串 107
5.2.1 字符串与字符数组 107
5.2.2 字符串输入/输出 108
5.2.3 字符串的其他操作 110
习题5.2 114
第6单元 描述一类对象的属性——结构体类型 117
6.1 结构体类型的定义与实例化 117
6.1.1 结构体类型的定义 117
6.1.2 结构体类型的实例化 117
习题6.1 119
6.2 结构体变量及其成员操作 121
6.2.1 结构体变量间的赋值 121
6.2.2 引用结构体变量的成员 121
6.2.3 结构体类型数据的输出 121
习题6.2 122
6.3 结构体数组 123
6.3.1 结构体数组的定义与初始化 123
6.3.2 结构体数组元素的引用 124
习题6.3 126
第7单元 指针类型 129
7.1 指针的概念 129
7.1.1 指针=基类型+地址 129
7.1.2 指针的操作 131
7.1.3 多级指针 133
7.1.4 悬空指针、空指针与void指针 133
习题7.1 134
7.2 数组的指针形式 137
7.2.1 数组名与指向数组的指针 137
7.2.2 二维数组的指针形式 139
7.2.3 指针与C字符串 140
习题7.2 141
7.3 指针参数 144
7.3.1 指针参数与函数的地址传送调用 144
7.3.2 带参主函数 151
习题7.3 153
7.4 链表 156
7.4.1 链表及其特点 156
7.4.2 链表的构建 157
7.4.3 链表操作 158
习题7.4 161
第3篇 深入学习C语言 167
第8单元 程序实体的生存期与其名字的作用域 168
8.1 基本概念 168
8.1.1 实体的存储分配与生存期 168
8.1.2 标识符的作用域 169
习题8.1 170
8.2 C语言中程序实体的存储类型 171
8.2.1 局部变量 171
8.2.2 全局变量 172
习题8.2 176
第9单元 C语言中常量的表示 181
9.1 字面常量 181
9.1.1 整型字面常量的表示和辨识 181
9.1.2 实型字面常量的表示和辨识 182
9.1.3 字符类型常量的表示 182
习题9.1 186
9.2 宏 188
9.2.1 宏定义 188
9.2.2 使用宏应当注意的几点 188
9.2.3 带参宏定义 190
习题9.2 192
9.3 const修饰符 195
9.3.1 用const“固化”变量 195
9.3.2 用const修饰指针 196
习题9.3 198
9.4 枚举类型 200
9.4.1 枚举类型及其定义 200
9.4.2 枚举变量的定义 200
9.4.3 对枚举变量和枚举元素的操作 201
习题9.4 202
第10单元 数据类型 204
10.1 基本数据类型 204
10.1.1 整数的有符号类型与无符号类型 205
10.1.2 类型宽度与取值范围 205
习题10.1 207
10.2 union类型 208
10.2.1 共用体类型的定制与共用体变量的定义 208
10.2.2 共用体类型与结构体类型的比较 208
10.2.3 共用体变量的应用 210
习题10.2 211
10.3 数据类型转换 213
10.3.1 几个概念 213
10.3.2 自动数据类型转换 216
10.3.3 用户定义转换 217
10.3.4 函数调用时的参数类型转换 217
习题10.3 218
10.4 typedef 219
习题10.4 220
第11单元 文件 222
11.1 C文件与FILE类型指针 222
11.1.1 文本文件与二进制文件 222
11.1.2 文件缓冲区 222
11.1.3 FILE类型及其指针 223
习题11.1 223
11.2 C文件操作的一般过程 224
11.2.1 文件打开 224
11.2.2 文件读写定位与读写操作 226
11.2.3 文件关闭 227
习题11.2 227
11.3 文件操作程序示例 230
11.3.1 写若干行字符串到文本文件 230
11.3.2 文件复制 231
习题11.3 232
第12单元 格式化输入/输出 233
12.1 printf()格式详解 233
12.1.1 基本格式符 233
12.1.2 长度修饰符 233
12.1.3 域宽与精度说明 234
12.1.4 前缀修饰符 234
习题12.1 236
12.2 scanf()格式详解 237
12.2.1 地址参数 237
12.2.2 格式字段 237
12.2.3 数值数据流的分隔 239
12.2.4 scanf()与输入缓冲区 241
12.2.5 scanf()用于字符输入 241
12.2.6 scanf()的停止与返回 243
习题12.2 244
第13单元 位运算与位段 246
13.1 位运算 246
13.1.1 按位逻辑运算 246
13.1.2 移位运算 247
13.2 位段 248
习题13 250
附录A C语言的关键字及其用途 253
附录B C语言运算符的优先级和结合方向 254
附录C 编译预处理命令 255
附录D C语言常用标准库函数 256
参考文献 262