第1章 计算机及程序设计概述 1
1.1 概述 1
1.2 计算机的基本原理 1
1.3 指令与程序 3
1.4 计算机应用简介 4
1.5 程序设计语言 6
1.6 问题求解与算法设计 9
1.6.1 算法定义 9
1.6.2 算法的复杂性 11
1.6.3 伪代码 11
1.6.4 流程图 12
1.6.5 N-S图 13
1.6.6 UML 14
1.7 程序设计思想 14
1.7.1 程序设计概述 14
1.7.2 程序设计基本步骤 15
1.7.3 结构化程序设计 16
1.7.4 面向对象程序设计 17
1.7.5 并行程序设计 19
1.7.6 程序设计思想前沿 20
1.8 C语言概述 20
1.8.1 C语言的特点 20
1.8.2 简单的C程序设计 21
1.8.3 C语言程序结构 23
1.8.4 C程序调试处理 26
1.9 案例——应用程序界面的简单设计 27
练习题 28
第2章 基本数据类型、常量及变量 30
2.1 概述 30
2.2 信息编码与存储 31
2.2.1 数值 31
2.2.2 字符 32
2.3 标识符 34
2.4 数据类型 35
2.5 常量 37
2.5.1 整型常量 37
2.5.2 实型常量 38
2.5.3 字符常量 39
2.5.4 字符串常量 40
2.5.5 符号常量 41
2.6 变量 42
2.6.1 变量声明 42
2.6.2 变量初始化 44
2.6.3 变量赋值 45
2.6.4 const修饰符 46
2.7 数据溢出与计算精度 47
2.8 其他语言的基本数据类型 49
2.8.1 C++语言的基本类型 49
2.8.2 Java语言的基本类型 50
2.8.3 C#语言的基本类型 51
2.9 数据类型与程序移植 52
2.10 案例——跨平台程序开发 54
练习题 55
第3章 运算符与表达式 57
3.1 概述 57
3.2 算术运算符与算术表达式 58
3.3 关系运算符与关系表达式 59
3.4 逻辑运算符与逻辑表达式 60
3.5 赋值运算符与赋值表达式 61
3.6 ++/--运算符与自增/自减表达式 62
3.7 条件运算符与条件表达式 64
3.8 逗号运算符与逗号表达式 64
3.9 sizeof运算符 65
3.10 类型转换 65
3.10.1 隐式转换 66
3.10.2 显式转换 67
3.11 位运算符与位运算 68
3.11.1 位逻辑运算 68
3.11.2 位移运算 70
3.11.3 复合位运算及补位原则 70
3.12 表达式运算 71
3.13 其他语言中的运算符及表达式 72
3.14 案例 72
练习题 73
第4章 输入输出 75
4.1 概述 75
4.2 printf函数 76
4.2.1 printf函数的调用格式 76
4.2.2 printf函数的简单应用 76
4.2.3 printf函数的格式控制字符串 77
4.3 scanf函数 82
4.3.1 scanf函数的调用格式 82
4.3.2 scanf函数的格式控制字符串 83
4.4 字符输入与输出 85
4.5 图形输出 86
4.5.1 图形处理函数 86
4.5.2 图形界面接口 90
4.6 案例——基于OpenGL建立一个立方体 91
练习题 93
第5章 程序控制结构 95
5.1 概述 95
5.2 基本语句 96
5.3 条件控制语句 100
5.3.1 if语句 100
5.3.2 if-else语句 102
5.3.3 if-else if语句 104
5.3.4 switch语句 106
5.3.5 分支结构应用 111
5.4 循环控制语句 114
5.4.1 while语句 114
5.4.2 for语句 117
5.4.3 do-while语句 120
5.4.4 循环的本质 122
5.4.5 几种循环语句的比较 124
5.4.6 循环结构应用 124
5.5 其他控制语句 126
5.5.1 goto语句 127
5.5.2 break语句 128
5.5.3 continue语句 129
5.5.4 goto,break,continue语句的区别 130
5.6 语句嵌套 132
5.6.1 条件分支嵌套结构 132
5.6.2 循环嵌套结构 134
5.7 案例——应用程序菜单界面 136
练习题 137
第6章 数组 140
6.1 概述 140
6.2 一维数组 141
6.2.1 一维数组定义 141
6.2.2 一维数组初始化 142
6.2.3 一维数组引用 143
6.2.4 一维数组应用 145
6.3 二维数组 147
6.3.1 二维数组定义 147
6.3.2 二维数组初始化 147
6.3.3 二维数组引用 149
6.3.4 二维数组应用 150
6.4 高维数组 152
6.5 字符数组与字符串 154
6.5.1 字符数组 154
6.5.2 字符串 155
6.5.3 字符串输入输出 156
6.5.4 常用字符串处理函数 158
6.5.5 字符数组与字符串应用 160
6.6 数组与数据存储 163
6.6.1 一维数组的存储 163
6.6.2 二维数组的存储 163
6.6.3 多维数组的存储 164
6.6.4 字符串的存储 164
6.7 案例——高斯消去法求解线性方程组 165
练习题 167
第7章 函数 170
7.1 概述 170
7.2 函数定义 172
7.2.1 函数返回值 172
7.2.2 函数定义的通用格式 173
7.2.3 无返回值类型的函数 176
7.2.4 有返回值类型的函数 177
7.2.5 空函数 178
7.3 函数声明 178
7.3.1 库函数声明 178
7.3.2 用户自定义函数声明 179
7.4 参数传递 183
7.4.1 形式参数与实际参数 183
7.4.2 值拷贝传递机制 186
7.4.3 地址拷贝传递机制 188
7.4.4 数组作为函数参数 189
7.5 函数调用 192
7.5.1 函数调用的一般形式 193
7.5.2 函数调用的方式 194
7.6 函数的嵌套调用与递归调用 196
7.6.1 嵌套调用 196
7.6.2 递归调用 197
7.7 变量的作用域和存储类型 200
7.7.1 局部变量与全局变量 200
7.7.2 变量的存储类型 205
7.7.3 变量的生存期与作用域 208
7.8 内部函数与外部函数 209
7.9 函数程序结构 210
7.9.1 单文件单函数结构 211
7.9.2 单文件多函数结构 211
7.9.3 多文件多函数结构 211
7.9.4 多文件多函数多库结构 213
7.10 案例——典型波形的绘制 213
练习题 221
第8章 指针 223
8.1 概述 223
8.2 指针和指针变量 224
8.3 指针运算 227
8.3.1 指针运算符 227
8.3.2 算术运算 228
8.3.3 关系运算 230
8.3.4 指针类型转换 230
8.4 数组和指针 232
8.4.1 用指针访问数组元素 232
8.4.2 指向多维数组的指针 234
8.5 字符串和指针 237
8.5.1 指针处理字符串 237
8.5.2 使用字符指针变量与字符数组的区别 239
8.6 函数和指针 241
8.6.1 指针作为函数参数 241
8.6.2 指针作为函数的返回值 246
8.6.3 指向函数的指针 247
8.7 指针数组 251
8.7.1 指针数组声明 251
8.7.2 带参数的main函数 253
8.8 数组指针 255
8.9 指向指针的指针 257
8.10 内存管理 258
8.10.1 动态内存分配 259
8.10.2 动态内存分配应用 261
8.11 案例——栈的基本操作算法 265
练习题 267
第9章 结构体、共用体与枚举类型 269
9.1 概述 269
9.2 结构体类型 270
9.2.1 结构体定义 270
9.2.2 结构体变量的声明和初始化 272
9.2.3 结构体变量的引用 274
9.2.4 结构体变量作为函数参数和函数返回值 277
9.2.5 结构体数组 278
9.2.6 结构体类型指针 279
9.3 共用体 281
9.4 枚举类型 283
9.5 类型重定义 286
9.6 再议数据类型与存储 288
9.7 链表 290
9.7.1 链表定义 290
9.7.2 链表的基本操作 292
9.8 案例——问卷调查 294
练习题 299
第10章 预编译和宏定义 301
10.1 概述 301
10.2 #define命令 301
10.2.1 不带参数的宏定义 302
10.2.2 带参数的宏定义 304
10.3 #include命令 306
10.4 条件编译 308
10.5 其他指令 311
10.6 预定义宏 314
10.7 案例——系统可移植性处理 314
练习题 315
第11章 文件 317
11.1 概述 317
11.2 文本文件与二进制文件 317
11.3 文件的定义 319
11.4 文件打开与关闭 320
11.4.1 文件打开 320
11.4.2 文件关闭 322
11.5 文件读写 323
11.5.1 单字符读写 323
11.5.2 字符串读写 325
11.5.3 格式化读写 327
11.5.4 数据块的读写 328
11.6 文件定位函数 332
11.7 文件状态跟踪 334
11.8 案例——学生信息管理系统 336
练习题 346
第12章 程序设计思想及范例 348
12.1 概述 348
12.2 求和/求积问题 348
12.2.1 多项式计算 349
12.2.2 数列求和 351
12.3 遍历问题 353
12.4 迭代问题 358
12.4.1 二分法 358
12.4.2 牛顿迭代法 360
12.5 排序问题 361
12.5.1 直接插入排序 362
12.5.2 起泡法排序 363
12.5.3 选择排序 365
12.6 查找问题 366
12.6.1 顺序查找 367
12.6.2 折半查找 368
12.7 递归问题——汉诺塔 369
12.8 字符串处理 372
12.8.1 字符串长度计算 372
12.8.2 字符串拷贝 372
12.8.3 字符串连接 373
12.9 矩阵运算 375
12.9.1 矩阵加减运算 375
12.9.2 矩阵乘法 376
12.9.3 矩阵转置 378
练习题 380
第13章 面向对象程序设计 381
13.1 概述 381
13.1.1 模块化设计 381
13.1.2 代码封装 383
13.2 面向对象程序设计 384
13.3 类与对象 385
13.3.1 类 386
13.3.2 对象 387
13.3.3 类在C++中的实现 388
13.3.4 类在Java中的实现 390
13.4 面向对象的语言实现 392
13.4.1 类的继承 392
13.4.2 属性 394
13.4.3 方法 398
13.4.4 虚函数 401
13.5 面向对象的软件开发与UML建模 404
13.5.1 静态建模——用例 404
13.5.2 静态建模——类和对象 405
13.5.3 动态建模——活动图 406
13.5.4 动态建模——顺序图 407
13.6 案例——学生信息管理系统 408
第14章 并行程序设计与MPI 415
14.1 概述 415
14.2 并行算法 416
14.2.1 并行问题 416
14.2.2 并行算法设计 416
14.3 并行程序设计 417
14.3.1 并行程序设计模型 417
14.3.2 进程 418
14.3.3 创建进程 419
14.3.4 消息传递 420
14.4 MPI程序设计基础 423
14.5 MPI初始化与关闭 426
14.6 MPI消息传递 427
14.6.1 获取进程标识 427
14.6.2 获取通信域内的进程数量 428
14.6.3 消息发送 428
14.6.4 消息接收 429
14.7 案例——π值计算 432
第15章 个体软件开发过程管理(PSP) 438
15.1 概述 438
15.2 编码规范定义 439
15.3 MPI编码规范 439
15.4 ANSI C程序编码规范 441
15.4.1 代码结构与组织 441
15.4.2 注释 444
15.4.3 标识符命名规范 445
15.4.4 代码风格与排版 447
15.5 代码重用技术 448
15.5.1 源程序文件 448
15.5.2 静态库 449
15.5.3 动态链接库 451
15.5.4 组件技术 452
15.6 软件生命周期模型 454
15.7 CMM简介 456
15.8 PSP个体软件开发过程简介 456
15.9 PSP0级 457
15.9.1 计划过程管理 458
15.9.2 开发过程管理 458
15.9.3 总结过程管理 459
15.9.4 PSP0过程文档 460
15.9.5 PSP0.1级 461
15.10 软件开发计划 463
15.11 PSP1级 466
15.12 PSP2级 468
附录1 C语言中的关键字 471
附录2 ASCII码表 472
附录3 运算符和结合方向 474
参考文献 476