目录 1
前言 1
本书作者简介 1
第1章 程序设计和C语言 1
1 1 程序和程序语言 1
1 2 C语言简介 8
1 3 ?个简单的C程序 10
1 4 程序开发过程 13
1 5 问题与程序设计 17
本章讨论的重要概念 18
练习 18
第2章 数据对象与计算 21
2 1 基本字符 名字表示、标识符和关键字 21
2 2 数据与类型 23
2 3 基本类型与数据表示 23
2 3 1 整数类型和整数的表示 23
2 3 2 实数类型和实数的表示 25
2 3 3 字符类型和字符的表示 26
2 3 4 数据的外部表示、内部表示与转换 27
2 4 1 算术运算符 30
2 4 运算符、表达式与计算 30
2 4 2 算术表达式 31
2 4 3 表达式的求值 32
2 4 4 计算和类型 34
2 5 数学函数库及其使用 37
2 5 1 函数函数调用 37
2 5 2 数学函数及其使用 38
2 5 3 函数调用中的类型转换 39
几个常用程序模式 40
问题解释 40
本章讨论的重要概念 41
练习 41
第3章 变量、函数和控制结构 43
3 1 语句、复合结构 43
3 2 变量——概念、定义和使用 44
3 2 1 变量的定 45
3 2 2 变量的赋值与取值 46
3 2 3 几个问题 48
3 3 定义函数(初步) 50
3 3 1 函数定义 52
3 3 2 函数和程序 55
3 3 3 函数与类型 56
3 3 4 自定义输出函数 57
3 4 关系表达式、逻辑表达式、条件表达式 58
3 4 1 关系表达式和条件表达式 58
3 4 2 逻辑表达式 60
3 5 语句与控制结构 61
3 5 1 条件语句(if语句) 62
3 5 2 循环语句(1)while语句 65
3 5 3 循环语句(2)for语句 68
3 6 若干常用结构和问题 70
3 6 1 增量和减量运算符(++、--) 70
3 6 2 逗号运算符 71
3 6 3 实现二元运算符操作的赋值运算符 71
3 6 4 空语 72
3 6 5 表达式和求值 73
几个常用程序模式 74
问题解释 74
本章讨论的重要概念 75
练习 75
第4章 基本程序设计技术 79
4 1 循环程序设计 79
4 1 1 基本循环方式 80
4 1 2 求-系列完全平方数 81
4 1 3 判断素数(谓词函数) 82
4 1 4 艰难的旅程(浮点误差) 83
4 1 5 求立方根(迭代和逼进) 85
4 1 6 求sin函数值(通项计算) 86
4 2 循环程序的问题 87
4 2 1 从循环中退出 87
4 2 2 循环中的几种变量 89
4 3 循环与递归 90
4 3 1 阶乘和乘幂(循环,递归) 90
4 3 2 Fibonacci序列(计算与时间) 93
4 3 3 为计算过程计时 94
4 3 4 Fibonacci序列的迭代计算(程序正确性与循环不变式) 95
4 3 5 最大公约数 97
4 3 6 河内塔(梵塔)问题 100
4 4 基本输入输 102
4 4 1 格式输入函数scanf 102
4 4 2 字符输入输出函数 109
4 4 3 输入函数的返回值及其作用 112
4 5 控制结构和控制语句 114
4 5 1 do-while循环结构 114
4 5 2 流程控制语句 115
4 5 3 开关语句 117
4 6 2 定义枚举常量 119
4 6 1 一个简单计算器 119
4 6 程序设计实例 119
4 6 3 单词计数问题 120
4 7 程序测试和排错 123
4 7 1 测试 123
4 7 2 白箱测式 124
4 7 3 黑箱测试 125
4 7 4 排除程序里的错误 126
问题解释 127
练习 128
本章讨论的重要概念 128
几个常用程序模式 128
第5章 C程序结构 133
5 1 数值类型 133
5 1 1 实数类型和整数类型 133
5 1 2 字符类型 133
5 1 3 整数类型 134
5 1 4 基本数据类型的选择 135
5 2 函数和标准库函数 136
5 2 2 字符分类函数 137
5 2 1 C语言的库函数 137
5 2 3 随机数生成函数 138
5 3 函数定义和程序的函数分解 139
5 3 1 主函数 140
5 3 2 程序的函数分解 141
5 3 3 对函数的两种观点 142
5 3 4 函数原型 146
5 4 C程序结构与变量 149
5 4 1 外部定义的变量 150
5 4 3 外部变量和自动变量 151
5 4 2 作用域与生存期 151
5 4 4 变量定义的嵌套 153
5 4 5 静态局部变量 154
5 4 6 变量的其他问题 155
5 4 7 一个实例 157
5 5 预处 159
5 5 1 文件包含命令 159
5 5 2 宏定义与宏替换 160
5 5 3 条件编译命令 163
5 6 定义常量 164
5 7 字位运算符 165
5 8 编程实例 168
5 8 1 一个简单的猜数游戏 168
5 8 2 加密与解密 170
本章讨论的重要概念 172
练习 172
第6章 数组 175
6 1 数组的概念、定义和使用 175
6 1 1 定义数组变量 176
6 1 2 数组的使用 177
6 1 3 数组的初始化 179
6 1 4 数组的存储实现 180
6 2 数组程序实例 181
6 2 1 从字符到下标 181
6 2 2 筛法求素数 182
6 2 3 成绩分类 183
6 2 4 多项式求值 184
6 2 5 定义数组的问题 185
6 3 1 一个例子 186
6 3 数组作为函数参数 186
6 3 2 修改实参数组的元素 188
6 4 字符数组与字符串 189
6 4 1 字符数组 189
6 4 2 字符串 189
6 4 3 程序实例 191
6 4 4 标准库字符串处理函数 193
6 4 5 输出文本里的最长行 194
6 5 1 多维数组的初始化 198
6 5 两维和多维数组 198
6 5 2 多维数组的表示和使用 199
6 5 3 多维数组作为函数的参数 200
6 6 编程实例 201
6 6 1 成绩直方图 201
6 6 2 一个通用带检查的整数输入函数 205
6 6 3 “计算”数组变量的大小 206
6 6 4 统计C程序里的关键字 208
6 6 5 数组的划分 211
6 6 6 数组的排序 213
问题解释 215
几个常用程序模式 215
本章讨论的重要概念 215
练习 215
第7章 指针 217
7 1 地址与指针 217
7 2 指针变量的定义和使用 218
7 2 1 指针操作 218
7 2 2 指针作为函数的参数 219
7 2 3 与指针有关的一些问题 222
7 3 指针与数组 224
7 3 1 指向数组元素的指针 224
7 3 2 基于指针运算的数组程序设计 227
7 3 3 数组参数与指针 228
7 3 4 指针与数组操作的程序实例 229
7 3 5 字符指针与字符数组 231
7 4 指针数组 233
7 4 1 指针数组与两维数组 234
7 4 2 命令行参数及其处理 235
7 5 多维数组作为参数的通用函数 238
7 6 动态存储管理 240
7 6 1 为什么需要动态存储管理 240
7 6 2 C语言的动态存储管理机制 241
7 6 3 两个程序实例 244
7 6 4 函数、指针和动态存储 247
7 7 定义类型 250
7 7 1 定义数组类型和指针类型 251
7 7 2 复杂类型描述与解读 252
7 8 1 函数指针的定义和使用 254
7 8 指向函数的指针 254
7 8 2 函数指针作为函数的参数 255
7 8 3 数值积分函数 257
7 8 4 若干以函数指针为参数的数组操作实用函数 259
几个常用程序模式 260
本章讨论的重要概念 260
练习 261
8 1 文件的概念 263
8 1 1 流和文件指针 263
第8章 文件和输入输出 263
8 1 2 缓冲式输入输出 264
8 2 文件的使用 265
8 2 1 文件的打开和关闭 265
8 2 2 输入输出函数 267
8 2 3 程序实例 268
8 2 4 直接输入输出函数 270
8 3 标准流输入输出与格式控制 271
8 3 1 行式输入和输出 271
8 3 2 输入格式控制 272
8 3 3 输出格式控制 276
8 3 4 以字符串作为格式化输入输出对象 278
8 3 5 标准错误流 278
8 4 程序实例 279
8 4 1 求文件数据的平均值 279
8 4 2 个背单词程序 281
8 4 3 资金账目系统 285
练习 288
9 1 1 结构声明与变量定义 291
第9章 结构和其他数据机制 291
9 1 结构(struct) 291
9 1 2 结构变量的初始化和使用 296
9 1 3 结构、数组与指针 297
9 2 结构与函数 299
9 2 1 处理结构的函数 299
9 2 2 程序实例 302
9 3 联合(union) 306
9 4 枚举(enum) 308
9 5 1 数据组的排序 310
9 5 编程实例 310
9 5 2 复数的表示和处理 312
9 6 链接结构(自引用结构) 315
9 6 1 链接结构 315
9 6 2 自引用结构的定义 317
9 6 3 程序实现 318
9 6 4 数据与查找 321
9 7 字段 322
练习 323
问题解释 323
本章讨论的重要概念 323
第10章 程序开发技术 327
10 1 分别编译和C程序的分块开发 327
10 1 1 分块开发的问题和方法 327
10 1 2 程序实例 学生成绩处理 328
10 1 3 分块重整 333
10 1 4 其他安排和考虑 336
10 1 5 模块化思想和技术 338
10 1 6 单一头文件结构和多个头文件结构 342
10 2 1 复数模块 345
10 2 功能模块和程序库 345
10 2 2 目标文件和库 348
10 2 3 防止重复包含 349
10 3 错误报告和处理 349
10 3 1 建立统一的错误报告机制 349
10 3 2 定义变参数的错误报告函数 350
10 3 3 运行中错误的检查和处理 352
10 4 1 程序的行为参数和启动时的配置 358
10 4 程序的配置 358
10 4 2 交互式配置 360
10 4 3 通过命令行参数 361
10 4 4 采用配置文件 362
10 5 程序开发过程 362
10 5 1 自上而下的开发 363
10 5 2 自下而上的开发 365
10 5 3 实际开发过程 365
练习 367
11 1 标准库结构 371
第11章 标准库 371
11 1 1 标准定义(〈stddef.h〉) 372
11 1 2 错误信息(〈errno h〉) 372
11 2 几个已经介绍过的头文件 373
11 2 1 数学函数(〈math.h〉) 373
11 2 2 字符处理函数(〈ctype h〉) 374
11 3 字符串函数(〈string h〉) 375
11 3 1 一些字符串函数 375
11 3 2 存储区操作 378
11 4 功能函数(〈stdlib h〉) 379
11 4 1 几个整数函数 380
11 4 2 数值转换 380
11 4 3 执行控制 381
11 4 4 与执行环境交互 381
11 4 5 常用函数bsearch和qsort 382
11 5 日期和时间(〈time.h〉) 383
11 6 实现特征(〈limits h〉和〈float h〉) 385
11 6 1 整数类型特征 385
11 7 1 符号常量和类型 386
11 7 其他与输入输出有关的函数(〈stdio h〉) 386
11 6 2 浮点数类型特征 386
11 7 2 文件操作函数 387
11 7 3 流缓冲区操作函数 388
11 7 4 文件定位及定位函数 389
11 7 5 其他有关函数 390
11 7 6 采用va_list参数的输出函数 391
11 8 定义变长度参数表(〈stdarg h〉) 392
11 9 非局部控制转移(〈setjmp h〉) 395
11 10 调试断言和信号处理(〈assert.h〉和〈signal h〉) 397
11 11 1 本地化 398
11 11 标准库的其他功能 398
11 11 2 多字节字符 400
本章讨论的重要概念 400
练习 400
附录A C语言运算符表 401
附录B C语言速查 403
附录C C99简介 409
进一步学习的建议 413
参考文献 416