第1章 计算机及程序设计概述 1
1.1概述 1
1.2计算机基本原理 1
1.3指令与程序 2
1.3.1指令 3
1.3.2程序 3
1.3.3软件 3
1.4计算机应用简介 4
1.5程序设计语言 5
1.5.1机器语言 6
1.5.2汇编语言 6
1.5.3高级语言 6
1.6问题求解与算法设计 8
1.6.1问题求解 8
1.6.2算法定义 9
1.6.3算法设计 10
1.6.4算法的复杂性 10
1.6.5伪代码 10
1.6.6流程图 11
1.6.7 N-S图 12
1.6.8统一建模语言 13
1.7程序设计思想 13
1.7.1程序设计基本步骤 13
1.7.2结构化程序设计 14
1.7.3面向对象程序设计 15
1.7.4并行程序设计 16
1.7.5程序设计思想前沿 17
1.8 C语言概述 17
1.8.1 C语言的特点 17
1.8.2简单的C程序设计 18
1.8.3 C语言程序结构 20
1.8.4 C程序的开发过程 21
1.9案例 22
1.9.1固体密度测量问题 22
1.9.2超市收银系统 24
练习题 25
第2章 基本数据类型、常量及变量 26
2.1概述 26
2.2信息编码与存储 27
2.2.1数值 27
2.2.2字符 29
2.3标识符 30
2.3.1关键字 31
2.3.2自定义标识符 31
2.4数据类型 31
2.4.1整型 32
2.4.2实型 32
2.4.3字符型 33
2.5常量 33
2.5.1整型常量 33
2.5.2实型常量 34
2.5.3字符常量 34
2.5.4字符串常量 36
2.5.5符号常量 36
2.6变量 37
2.6.1变量声明 37
2.6.2变量初始化 39
2.6.3变量赋值 40
2.6.4 const修饰符 41
2.7数据溢出与计算精度 41
2.8其他语言的基本数据类型 43
2.8.1 C+++语言的基本类型 43
2.8.2 Java语言的基本类型 43
2.8.3 C#语言的基本类型 44
2.9数据类型与程序移植 45
2.10案例 46
2.10.1固体密度测量问题 46
2.10.2超市收银系统 47
练习题 48
第3章 运算符与表达式 50
3.1概述 50
3.2算术运算符与算术表达式 51
3.3关系运算符与关系表达式 52
3.4逻辑运算符与逻辑表达式 53
3.5赋值运算符与赋值表达式 54
3.6++/--运算符与自增/自减表达式 56
3.7条件运算符与条件表达式 57
3.8逗号运算符与逗号表达式 58
3.9 sizeof运算符 58
3.10类型转换 59
3.10.1隐式转换 59
3.10.2显式转换 60
3.11位运算符和位运算 61
3.11.1位逻辑运算 61
3.11.2移位运算 63
3.11.3复合位运算及补位原则 64
3.12表达式运算 64
3.13其他语言中的运算符与表达式 64
3.14案例 65
3.14.1固体密度测量问题 65
3.14.2超市收银系统 66
练习题 67
第4章 输入输出 68
4.1概述 68
4.2 printf函数 68
4.2.1 printf函数的调用格式 68
4.2.2 printf函数的格式控制字符串 70
4.3 scanf函数 73
4.3.1 scanf函数的调用格式 73
4.3.2 scanf函数的格式控制字符串 74
4.4字符输入与输出 76
4.5图形输出 77
4.5.1图形处理函数 78
4.5.2图形界面接口 81
4.6案例 82
4.6.1固体密度测量问题 82
4.6.2超市收银系统 83
练习题 84
第5章 程序控制结构 86
5.1概述 86
5.2基本语句 87
5.2.1表达式语句 87
5.2.2函数调用语句 88
5.2.3空语句 88
5.2.4复合语句 88
5.2.5顺序结构应用 89
5.3选择控制语句 90
5.3.1 if语句 90
5.3.2 if else语句 92
5.3.3 if…else if语句 93
5.3.4 switch语句 95
5.3.5分支结构应用 99
5.4循环控制语句 101
5.4.1 while语句 102
5.4.2 for语句 104
5.4.3 do while语句 107
5.4.4循环的本质 108
5.4.5几种循环语句的比较 110
5.4.6循环结构应用 111
5.5其他控制语句 113
5.5.1 goto语句 113
5.5.2 break语句 114
5.5.3 continue语句 115
5.5.4 goto、break、continue语句的区别 115
5.6语句嵌套 117
5.6.1条件分支嵌套结构 117
5.6.2循环嵌套结构 119
5.7案例 120
5.7.1固体密度测量问题 120
5.7.2超市收银系统 122
练习题 124
第6章 数组 126
6.1概述 126
6.2一维数组 127
6.2.1一维数组定义 127
6.2.2一维数组初始化 128
6.2.3一维数组引用 129
6.2.4一维数组应用 130
6.3二维数组 132
6.3.1二维数组定义 132
6.3.2二维数组初始化 133
6.3.3二维数组引用 134
6.3.4二维数组应用 134
6.4高维数组 137
6.5字符数组与字符串 138
6.5.1字符数组 138
6.5.2字符串 139
6.5.3字符串输入输出 140
6.5.4常用字符串处理函数 142
6.5.5字符数组与字符串应用 143
6.6数组与数据存储 145
6.6.1一维数组的存储 145
6.6.2二维数组的存储 146
6.6.3高维数组的存储 146
6.6.4字符串的存储 147
6.7案例 147
6.7.1固体密度测量问题 147
6.7.2超市收银系统 148
练习题 149
第7章 函数 151
7.1概述 151
7.2函数定义 153
7.2.1函数返回值 153
7.2.2函数定义的通用格式 154
7.2.3无返回值函数 156
7.2.4有返回值的函数 157
7.3函数声明 158
7.3.1库函数声明 159
7.3.2用户自定义函数声明 159
7.4参数传递 161
7.4.1形式参数与实际参数 161
7.4.2值拷贝传递机制 164
7.4.3地址拷贝传递机制 166
7.4.4数组作为函数参数 167
7.5函数调用 169
7.5.1函数调用的一般形式 170
7.5.2函数调用的方式 171
7.6函数的嵌套调用与递归调用 172
7.6.1嵌套调用 172
7.6.2递归调用 174
7.7变量的作用域和存储类型 175
7.7.1局部变量与全局变量 176
7.7.2变量的存储类型 179
7.7.3变量的生存期与作用域 180
7.8内部函数与外部函数 181
7.9程序结构 182
7.9.1单文件单函数结构 182
7.9.2单文件多函数结构 183
7.9.3多文件多函数结构 184
7.10案例 185
7.10.1固体密度测量问题 185
7.10.2超市收银系统 187
练习题 189
第8章 指针 191
8.1概述 191
8.2指针和指针变量 192
8.2.1指针变量声明 192
8.2.2指针变量的赋值及初始化 193
8.2.3指针变量的引用 193
8.3指针运算 194
8.3.1指针运算符 194
8.3.2算术运算 195
8.3.3关系运算 196
8.3.4指针类型转换 197
8.4数组和指针 198
8.4.1用指针访问数组元素 198
8.4.2指向多维数组的指针 200
8.5字符串和指针 203
8.5.1指针处理字符串 203
8.5.2使用字符指针变量与字符数组的区别 204
8.6函数和指针 206
8.6.1指针作为函数参数 206
8.6.2指针作为函数的返回值 210
8.6.3指向函数的指针 212
8.7指针数组 214
8.7.1指针数组定义 214
8.7.2带参数的main函数 217
8.8数组指针 218
8.9指向指针的指针 220
8.10内存管理 221
8.10.1内存管理函数 221
8.10.2动态内存分配应用 223
8.11案例 227
8.11.1固体密度测量问题 227
8.11.2超市收银系统 229
练习题 231
第9章 结构体、共用体与枚举类型 233
9.1概述 233
9.2结构体类型 234
9.2.1结构体定义 234
9.2.2结构体变量的声明和初始化 235
9.2.3结构体变量的引用 238
9.2.4结构体变量作为函数参数和函数返回值 240
9.2.5结构体数组 241
9.2.6结构体类型指针 244
9.3共用体 246
9.3.1共用体的定义 246
9.3.2共用体变量的声明 246
9.3.3共用体变量的赋值和引用 247
9.4枚举类型 248
9.5类型重定义 250
9.6再议数据类型与存储 252
9.7链表 254
9.7.1链表定义 254
9.7.2链表基本操作 256
9.8案例 258
9.8.1固体密度测量问题 258
9.8.2超市收银系统 260
练习题 262
第10章 预编译和宏定义 263
10.1概述 263
10.2#define命令 263
10.2.1不带参数的宏定义 263
10.2.2带参数的宏定义 265
10.3#include命令 268
10.4条件编译 270
10.4.1#ifdef…#else…#endif 270
10.4.2#ifndef…#else…#endif 270
10.4.3#if…#else…#endif 271
10.5其他指令 272
10.6预定义宏 275
10.7案例 275
10.7.1固体密度测量问题 275
10.7.2超市收银系统 277
练习题 279
第11章 文件 280
11.1概述 280
11.2文本文件与二进制文件 280
11.2.1文本文件 281
11.2.2二进制文件 281
11.3文件定义 282
11.4文件打开与关闭 283
11.4.1文件打开 283
11.4.2文件关闭 285
11.5文件读写 285
11.5.1单字符读写 286
11.5.2字符串读写 287
11.5.3格式化读写 288
11.5.4数据块读写 290
11.6文件定位函数 293
11.6.1 fseek函数 293
11.6.2 rewind 295
11.6.3 ftell 295
11.7文件状态跟踪 295
11.7.1 feof函数 295
11.7.2 ferror函数 296
11.7.3 clearerr 296
11.8案例 297
11.8.1固体密度测量问题 297
11.8.2超市收银系统 299
练习题 301
第12章 程序设计思想及范例 303
12.1概述 303
12.2求和/求积问题 303
12.2.1多项式计算 304
12.2.2数列求和 305
12.3遍历问题 307
12.4迭代问题 312
12.4.1二分法 312
12.4.2牛顿迭代法 314
12.5排序问题 316
12.5.1直接插入排序 316
12.5.2起泡法排序 317
12.5.3选择排序 319
12.6查找问题 320
12.6.1顺序查找 320
12.6.2折半查找 321
12.7递归问题-汉诺塔 323
12.8字符串处理 325
12.8.1字符串长度计算 325
12.8.2字符串拷贝 326
12.8.3字符串连接 326
12.9矩阵运算 328
12.9.1矩阵加减运算 328
12.9.2矩阵乘法 329
12.9.3矩阵转置 331
12.9.4高斯消去法求解线性方程组 333
12.10栈操作 336
练习题 338
第13章 面向对象程序设计 339
13.1概述 339
13.1.1模块化设计 339
13.1.2代码封装 340
13.2面向对象程序设计 342
13.3类与对象 343
13.3.1类 343
13.3.2对象 344
13.3.3类在C+++中的实现 345
13.4面向对象的语言实现 347
13.4.1类的继承 347
13.4.2属性 349
13.4.3方法 352
13.4.4虚函数 354
13.5面向对象的问题与UML建模 356
13.5.1静态建模-用例 356
13.5.2静态建模-类和对象 357
13.5.3动态建模-活动图 358
13.5.4动态建模-顺序图 359
第14章 并行程序设计与MPI 367
14.1概述 367
14.2并行算法 367
14.2.1并行问题 367
14.2.2并行算法设计 368
14.3并行程序设计 369
14.3.1并行程序设计模型 369
14.3.2进程 369
14.3.3创建进程 370
14.3.4消息传递 370
14.4 MPI程序设计基础 374
14.4.1 MPI简介 374
14.4.2简单MPI程序设计 375
14.4.3 MPI函数库 375
14.5 MPI初始化与关闭 376
14.5.1初始化MPI环境 376
14.5.2关闭MPI环境 377
14.6 MPI消息传递 378
14.6.1获取进程标识 378
14.6.2获取通信域内的进程数量 378
14.6.3消息发送 379
14.6.4消息接收 379
第15章 个体软件开发过程管理 388
15.1概述 388
15.2编码规范定义 388
15.3 MPI编码规范 389
15.3.1标识符命名规范 389
15.3.2函数或过程规范 390
15.4 ANSI C程序编码规范 390
15.4.1代码结构与组织 391
15.4.2注释 393
15.4.3标识符命名规范 395
15.4.4代码风格与排版 396
15.5代码重用技术 398
15.5.1源程序文件 398
15.5.2静态库 398
15.5.3动态链接库 400
15.5.4组件技术 402
15.6软件生命周期模型 403
15.7 CMM简介 405
15.8 PSP简介 406
15.9 PSP0级 406
15.9.1计划过程管理 407
15.9.2开发过程管理 407
15.9.3总结过程管理 408
15.9.4 PSP0过程文档 409
15.9.5 PSP0.1级 410
15.10软件开发计划 412
15.10.1软件开发计划基本内容 413
15.10.2制定个体软件开发计划 413
15.10.3 PSP软件开发计划过程 413
15.11 PSP1级 415
15.11.1规模估算 415
15.11.2任务计划 416
15.11.3进度计划 416
15.12 PSP2级 417
15.12.1代码评审 417
15.12.2设计评审 418
15.12.3缺陷预防 419
15.12.4 PSP2改进 419
附录A C语言中的关键字 420
附录B ASCII码表 421
附录C运算符和结合方向 423
参考文献 425