第1篇C语言程序设计初步 3
第1单元 简单的C语言程序 3
1.1两个整数相加 3
1.1.1两个整数常数相加的C语言程序 3
1.1.2 C语言程序的编译与连接 3
1.1.3带有输出操作的C程序 4
习题1.1 6
1.2变量初步 8
1.2.1使用变量的两整数相加程序 8
1.2.2从键盘给变量输入值 10
习题1.2 12
1.3用浮点数进行除运算 14
1.3.1整数相除的问题 14
1.3.2两个浮点数相除的C程序 15
习题1.3 16
第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.1 23
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.2 31
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.3 42
第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.2 73
3.3迭代与递推 78
3.3.1用辗转相除法求两个正整数的最大公因子 78
3.3.2 Fibonacci数列 81
3.3.3猴子吃桃子 83
3.3.4用二分迭代法求解一元二次方程 85
习题3.3 88
第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.1 102
4.2递归 105
4.2.1阶乘的递归计算 105
4.2.2汉诺塔 106
习题4.2 109
第5单元 计算机模拟 111
5.1随机问题模拟 111
5.1.1产品随机抽样 111
5.1.2用蒙特卡洛法求的近似值 114
习题5.1 115
5.2基于步长的模拟 116
5.2.1事件步长法——中子扩散问题 116
5.2.2时间步长法——盐水池问题 118
习题5.2 122
第2篇 数据结构+算法 127
第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.1 139
6.2字符串 143
6.2.1字符串与字符数组 143
6.2.2字符串输入输出 144
6.2.3字符串的其他操作 147
习题6.2 150
第7单元 描述一类对象的属性——结构体类型和共用体类型 153
7.1结构体类型基础 153
7.1.1结构体类型的定义 153
7.1.2结构体类型的实例化 154
7.1.3结构体变量的引用 155
习题7.1 157
7.2结构体数组 159
7.2.1结构体数组的定义与初始化 159
7.2.2结构体数组元素的引用 161
习题7.2 163
7.3 union类型 165
7.3.1共用体类型的定制与共用体变量的定义 165
7.3.2共用体类型与结构体类型的比较 165
7.3.3共用体变量的应用 167
习题7.3 168
第8单元 指针类型 171
8.1指针的概念 171
8.1.1指针=基类型+地址 171
8.1.2悬空指针、空指针与void指针 173
8.1.3多级指针 174
8.1.4指针的操作 174
习题8.1 177
8.2数组的指针形式 180
8.2.1数组名与指向数组的指针 180
8.2.2二维数组的指针形式 182
8.2.3指针与C字符串 184
习题8.2 186
8.3指针参数 188
8.3.1变量地址传送 189
8.3.2数组地址传送 190
8.3.3字符指针参数 194
8.3.4带参主函数 197
习题8.3 199
第9单元 常用算法设计策略 202
9.1分治策略 202
9.1.1二分查找 202
9.1.2快速排序 204
9.1.3自行车带人问题 207
习题9.1 209
9.2回溯策略 211
9.2.1迷宫问题 211
9.2.2使用堆栈组织搜索过程 215
习题9.2 220
9.3贪心策略 221
9.3.1旅行费用问题 222
9.3.2删数问题 224
习题9.3 227
9.4动态规划 228
习题9.4 232
第3篇 深入学习C语言 237
第10单元C语言中常量的表示 237
10.1字面常量 237
10.1.1整型字面常量的表示和辨识 237
10.1.2浮点类型字面常量的表示和辨识 238
习题10.1 239
10.2宏 241
10.2.1宏定义 241
10.2.2使用宏应当注意的几点 241
10.2.3带参宏定义 243
习题10.2 245
10.3 const修饰符 248
10.3.1用const“固化”变量 248
10.3.2用const修饰指针 249
习题10.3 252
10.4枚举类型 253
10.4.1枚举类型及其定义 253
10.4.2枚举变量的定义 254
10.4.3对枚举变量和枚举元素的操作 254
习题 10.4 255
第11单元 数据类型 257
11.1基本数据类型特性 258
11.1.1整型数据类型的主要特性 258
11.1.2浮点数据类型的主要特性 260
习题11.1 261
11.2数据类型转换 262
11.2.1数据类型转换的一般规则 262
11.2.2数据类型转换的副作用与注意事项 265
习题11.2 269
11.3 typedef和sizeof操作符 270
11.3.1 typedef 270
11.3.2 sizeof运算符 272
习题11.3 272
第12单元C程序中变量的访问属性 274
12.1变量访问属性的概念 274
12.1.1变量的存储类型与生存期 274
12.1.2标识符的作用域 275
12.1.3标识符的链接属性 276
习题12.1 276
12.2 C语言程序实体的存储类型 277
12.2.1 C程序中的局部变量 277
12.2.2 C程序中的外部变量 279
习题12.2 283
12.3 C程序中的动态内存分配 287
12.3.1申请存储空间 288
12.3.2释放一个指针指向的存储空间 289
12.3.3修改一个指针指向的存储空间大小 290
习题12.3 291
第13单元 格式化输入输出函数详解 292
13.1格式化输出函数printfO 292
13.1.1格式参数结构 292
13.1.2基本格式符 292
13.1.3长度修饰符 293
13.1.4域宽与精度说明 293
13.1.5前缀修饰符 294
习题13.1 296
13.2格式化输入函数scanfO 297
13.2.1地址参数 297
13.2.2格式参数结构与工作机制 297
13.2.3数值数据的输入控制 300
13.2.4 scanfO与输入缓冲区 301
13.2.5字符型数据的输入控制 302
13.2.6 scanfO的停止与返回 306
习题13.2 306
第14单元 文件 308
14.1 C文件的基本概念 308
14.1.1 I/O流与缓冲 308
14.1.2文件及其分类 309
14.1.3 FILE类型及其指针 309
习题14.1 310
14.2 C文件操作的一般过程 310
14.2.1文件打开 311
14.2.2文件读写定位与读写操作 312
14.2.3文件关闭 313
习题14.2 314
14.3文件操作程序示例 317
14.3.1写若干行字符串到文本文件 317
14.3.2文件复制 317
习题14.3 318
第15单元 位运算与位段 320
15.1位运算 320
15.1.1按位逻辑运算 320
15.1.2移位运算 322
15.2位段 322
习题15 325
附录 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