第1章 计算机及程序设计概述 1
1.1 概述 1
1.2 计算与机器 2
1.2.1 计算器 2
1.2.2 机械式计算机 2
1.2.3 图灵机模型 3
1.2.4 电子数字计算机 4
1.3 指令与程序 5
1.4 计算机的典型应用 6
1.5 程序设计语言 7
1.5.1 机器语言 8
1.5.2 汇编语言 8
1.5.3 高级语言 9
1.6 问题求解与算法 11
1.6.1 算法定义 12
1.6.2 算法复杂性 12
1.7 算法描述 13
1.7.1 伪代码 13
1.7.2 流程图 14
1.7.3 N-S图 15
1.8 程序设计 15
1.8.1 基本步骤 15
1.8.2 结构化程序设计 16
1.8.3 面向对象程序设计 17
1.8.4 并行程序设计 17
1.8.5 程序设计思想前沿 18
1.9 C语言简介 18
1.9.1 C语言的特点 18
1.9.2 简单的C程序设计 19
1.9.3 C语言程序结构 21
1.9.4 C程序设计过程 23
1.10 案例 24
练习题 25
第2章 信息编码与数据类型 27
2.1 概述 27
2.2 二进制与信息编码 27
2.2.1 整数编码 27
2.2.2 实数编码 28
2.2.3 字符编码 29
2.3 标识符和关键字 30
2.3.1 标识符构成 30
2.3.2 关键字 30
2.3.3 自定义标识符 31
2.4 基本数据类型 31
2.4.1 整数类型 33
2.4.2 实数类型 34
2.4.3 字符类型 34
2.4.4 逻辑类型 36
2.4.5 复数类型 36
2.5 常量 37
2.5.1 整型常量 37
2.5.2 实型常量 38
2.5.3 字符常量 38
2.5.4 字符串常量 39
2.5.5 逻辑常量 40
2.5.6 复数常量 40
2.5.7 符号常量 41
2.6 变量 41
2.6.1 变量声明 42
2.6.2 变量初始化 43
2.6.3 变量赋值 44
2.6.4 变量读写 45
2.7 案例 45
练习题 46
第3章 基本运算与顺序结构 48
3.1 概述 48
3.2 运算符与表达式 48
3.3 赋值运算 50
3.4 算术运算 51
3.4.1 基本算术运算 51
3.4.2 自增或自减运算 52
3.4.3 整数运算 53
3.4.4 实数运算 55
3.4.5 复合赋值运算 56
3.5 字符运算 56
3.5.1 算术运算 56
3.5.2 字符分类 57
3.5.3 字符转换 58
3.6 位运算 58
3.6.1 位逻辑运算 58
3.6.2 位移运算 60
3.6.3 复合位运算及补位原则 61
3.7 逗号运算 61
3.8 强制类型转换 62
3.8.1 算术运算中的隐式转换 62
3.8.2 赋值运算中的隐式转换 62
3.8.3 显式转换 63
3.9 sizeof运算 64
3.10 标准设备输入输出库 64
3.10.1 字符输入输出函数 65
3.10.2 格式化输出函数 66
3.10.3 格式化输入函数 72
3.11 数学库 76
3.11.1 实数计算函数 76
3.11.2 复数运算函数 77
3.12 基本语句 78
3.12.1 标签语句 78
3.12.2 空语句 78
3.12.3 声明语句 79
3.12.4 表达式语句 79
3.12.5 复合语句 79
3.13 顺序结构 80
3.14 案例 82
练习题 83
第4章 逻辑判断与选择结构 85
4.1 概述 85
4.2 关系运算 85
4.3 逻辑运算 86
4.4 条件运算 88
4.5 if语句 89
4.5.1 单分支选择结构 89
4.5.2 双分支选择结构 91
4.5.3 多分支选择结构 93
4.6 switch语句 96
4.7 选择结构嵌套 101
4.8 案例 106
练习题 108
第5章 迭代计算与循环结构 109
5.1 概述 109
5.2 while语句 110
5.3 do…while语句 112
5.4 for语句 115
5.5 循环语句对比 118
5.6 循环嵌套 119
5.7 跳转控制语句 124
5.7.1 break语句 124
5.7.2 continue语句 126
5.7.3 goto语句 126
5.7.4 continue、break、goto语句的区别 128
5.8 案例 129
练习题 131
第6章 集合数据与数组 133
6.1 概述 133
6.2 一维数组 134
6.2.1 一维数组定义 134
6.2.2 一维数组初始化 135
6.2.3 一维数组引用 136
6.2.4 一维数组应用 137
6.3 二维数组 140
6.3.1 二维数组定义 141
6.3.2 二维数组初始化 142
6.3.3 二维数组引用 143
6.3.4 二维数组应用 143
6.4 高维数组 147
6.5 字符数组与字符串 149
6.5.1 字符数组 149
6.5.2 字符串 151
6.6 字符串处理函数 155
6.6.1 字符串标准输入输出函数 155
6.6.2 字符串输入输出函数 157
6.6.3 字符串复制函数 158
6.6.4 字符串连接函数 159
6.6.5 字符串比较函数 159
6.6.6 字符串检索函数 160
6.6.7 字符串转换函数 162
6.6.8 其他字符串常用函数 162
6.6.9 宽字节型字符串函数 163
6.7 数组新特性 164
6.8 案例 165
练习题 166
第7章 模块化与函数 168
7.1 概述 168
7.2 函数定义 170
7.2.1 函数定义形式 170
7.2.2 函数返回值与函数类型 173
7.3 函数声明、头文件的使用和库函数声明 176
7.3.1 函数声明 176
7.3.2 头文件的使用 177
7.3.3 库函数声明 178
7.4 参数传递 180
7.4.1 形式参数 180
7.4.2 实际参数 182
7.4.3 值复制传递机制 183
7.4.4 地址复制传递机制 185
7.4.5 数组参数新特性 189
7.5 函数调用 190
7.5.1 函数调用形式 190
7.5.2 嵌套调用 191
7.5.3 递归调用 192
7.6 源程序文件与函数分类 194
7.6.1 外部函数 194
7.6.2 内部函数 195
7.6.3 内联函数 196
7.7 变量存储类型 197
7.7.1 普通变量 197
7.7.2 寄存器变量 197
7.8 变量作用域 198
7.8.1 局部变量 199
7.8.2 全局变量 200
7.8.3 静态变量 203
7.8.4 变量访问控制 204
7.9 源程序结构 205
7.9.1 单文件单函数结构 205
7.9.2 单文件多函数结构 206
7.9.3 多文件多函数结构 206
7.10 案例 208
练习题 210
第8章 地址操作与指针 212
8.1 概述 212
8.2 指针和指针变量 213
8.2.1 指针变量声明 213
8.2.2 指针变量的赋值及初始化 214
8.2.3 指针变量的引用 214
8.3 指针运算 215
8.3.1 取地址与取值运算 216
8.3.2 算术运算 216
8.3.3 关系运算 218
8.3.4 指针类型转换 218
8.4 数组和指针 220
8.4.1 用指针访问数组元素 220
8.4.2 指向多维数组的指针 221
8.5 字符串和指针 224
8.5.1 指针处理字符串 224
8.5.2 使用字符指针变量与字符数组的区别 225
8.6 函数和指针 227
8.6.1 指针作为函数参数 227
8.6.2 指针作为函数的返回值 232
8.6.3 指向函数的指针 233
8.7 指针数组 236
8.7.1 指针数组定义 236
8.7.2 带参数的main函数 239
8.8 数组指针 241
8.9 指向指针的指针 242
8.10 内存访问控制 244
8.11 案例 245
练习题 249
第9章 复杂数据类型与结树体 251
9.1 概述 251
9.2 结构体类型 252
9.2.1 结构体类型定义 253
9.2.2 结构体类型变量声明与初始化 254
9.2.3 结构体变量的引用 257
9.2.4 结构体数组 259
9.2.5 结构体与函数 262
9.2.6 结构体类型指针 264
9.3 共用体 267
9.4 枚举类型 269
9.5 类型重定义 271
9.6 日期和时间 273
9.7 链表 274
9.7.1 链表定义 274
9.7.2 动态内存管理函数 275
9.7.3 链表的基本操作 279
9.8 结构体新特性 283
9.9 案例 285
练习题 290
第10章 泛化编程与预编译 292
10.1 概述 292
10.2 #define指令 292
10.2.1 不带参数的宏定义 292
10.2.2 带参数的宏定义 294
10.3 #include指令 297
10.4 条件编译 299
10.4.1 #ifdef…#else…#endif 299
10.4.2 #ifndef…#else…#endif 299
10.4.3 #if…#else…#endif 300
10.5 其他指令 302
10.6 预定义宏 305
10.7 异常处理 305
10.8 程序移植 307
10.9 案例 308
练习题 310
第11章 数据存储与文件 312
11.1 概述 312
11.2 文本文件与二进制文件 313
11.2.1 文本文件 313
11.2.2 二进制文件 313
11.3 文件类型 314
11.4 文件打开与关闭 315
11.4.1 文件打开 315
11.4.2 文件关闭 318
11.5 文件读写 319
11.5.1 单字符读写 319
11.5.2 字符串读写 322
11.5.3 格式化读写 323
11.5.4 数据块读写 325
11.6 文件定位函数 328
11.7 文件状态跟踪 330
11.8 其他文件操作函数 332
11.9 案例 334
练习题 338
第12章 程序设计思想及范例 340
12.1 概述 340
12.2 求和/求积问题 340
12.2.1 多项式求和 341
12.2.2 数列求和 342
12.3 遍历问题 344
12.4 迭代问题 350
12.4.1 二分迭代法 350
12.4.2 牛顿迭代法 352
12.5 排序问题 354
12.5.1 直接插入排序 355
12.5.2 起泡排序 357
12.5.3 选择排序 359
12.6 查找问题 361
12.6.1 顺序查找 361
12.6.2 折半查找 362
12.7 递归问题 364
12.8 矩阵运算 367
12.8.1 矩阵加/减运算 367
12.8.2 矩阵乘法 368
12.8.3 矩阵转置 370
练习题 371
第13章 面向对象与C++基础 373
13.1 概述 373
13.1.1 结构化程序设计 373
13.1.2 模块封装与访问控制 374
13.2 面向对象程序设计 376
13.3 类与对象 376
13.3.1 类 376
13.3.2 对象 378
13.3.3 类在C++中的实现 378
13.3.4 成员变量 384
13.3.5 成员函数 386
13.3.6 构造函数和析构函数 390
13.3.7 函数重载 392
13.3.8 运算符重载 394
13.3.9 静态成员变量 396
13.3.10 静态成员函数 398
13.4 继承与多态 400
13.4.1 类继承 400
13.4.2 多态性与虚函数 403
13.5 案例 407
练习题 408
第14章 高性能计算与并行程序设计 409
14.1 概述 409
14.2 并行算法 409
14.2.1 并行问题 409
14.2.2 并行算法设计 410
14.3 并行程序设计实现 411
14.3.1 并行程序设计模型 411
14.3.2 进程 412
14.3.3 创建进程 412
14.3.4 消息传递 413
14.4 MPI程序设计基础 416
14.4.1 MPI简介 416
14.4.2 简单MPI程序设计 417
14.4.3 MPI初始化与关闭 417
14.4.4 MPI函数库 419
14.4.5 MPI消息传递 420
14.5 多核CPU与多线程 428
14.5.1 多核CPU 428
14.5.2 线程 430
14.6 OpenMP与多核程序设计 431
14.6.1 OpenMP简介 431
14.6.2 OpenMP并行程序结构 431
14.6.3 parallel节 433
14.6.4 for节 434
14.6.5 其他节 435
14.6.6 共享变量与信息传递 436
14.7 多线程技术 437
14.7.1 线程函数库简介 437
14.7.2 Win32线程函数库 437
14.7.3 C11标准线程函数库 444
练习题 451
第15章 个体软件过程管理 453
15.1 概述 453
15.2 编码规范定义 454
15.3 MPI编码规范 454
15.3.1 标识符命名规范 455
15.3.2 函数或过程规范 455
15.4 ANSI C程序编码规范 456
15.4.1 代码结构与组织 456
15.4.2 注释 458
15.4.3 标识符命名规范 460
15.4.4 代码风格与排版 461
15.5 代码重用技术 462
15.5.1 源程序文件 463
15.5.2 静态库 463
15.5.3 动态链接库 465
15.5.4 组件技术 467
15.6 软件生命周期模型简介 468
15.7 CMM简介 470
15.8 PSP简介 470
15.9 PSP0级 471
15.9.1 计划过程管理 472
15.9.2 开发过程管理 472
15.9.3 总结过程管理 473
15.9.4 PSP0过程管理文档 474
15.9.5 PSP0.1级 475
15.10 软件开发计划 477
15.10.1 软件开发计划基本内容 477
15.10.2 制定个体软件开发计划 478
15.10.3 PSP软件开发计划过程管理 479
15.11 PSP1级 479
15.11.1 规模计算 480
15.11.2 任务计划 480
15.11.3 进度计划 481
15.12 PSP2级 481
15.12.1 代码评审 482
15.12.2 设计评审 483
15.12.3 缺陷预防 483
15.12.4 PSP2级的改进 483
练习题 483
附录A ASCII码表 485
附录B 运算符和结合方向 486
参考文献 488