第1章 程序设计与软件开发 1
1.1 程序设计的基本概念 1
1.1.1 程序 1
1.1.2 程序设计语言 2
1.1.3 程序设计 4
1.2 算法与数据结构 7
1.2.1 算法及其特征 7
1.2.2 算法的结构 9
1.2.3 算法的描述 10
1.2.4 数据结构 14
1.3 软件开发 16
1.3.1 软件 16
1.3.2 软件工程 16
1.4 本章小结 17
习题1 19
第2章 C语言概述 20
2.1 C语言的发展与特点 20
2.1.1 C语言的发展 20
2.1.2 C语言的特点 21
2.2 一个C程序实例 22
2.2.1 编写和运行C程序 23
2.2.2 注释 23
2.2.3 预处理命令 24
2.2.4 程序主体 24
2.3 C语言的字符集与标识符 26
2.4 数据类型 27
2.5 常量和变量 28
2.5.1 常量 28
2.5.2 变量 28
2.6 运算符和表达式 30
2.6.1 运算符 30
2.6.2 表达式 32
2.7 输入与输出 33
2.7.1 输出函数printf 33
2.7.2 输入函数scanf 34
2.8 语句 36
2.8.1 简单语句 36
2.8.2 语句块 36
2.8.3 if语句 37
2.8.4 while语句 39
2.8.5 for语句 39
2.9 函数 41
2.10 编程实践:代码风格 42
2.11 本章小结 44
习题2 48
第3章 数据类型与输入输出 49
3.1 整型 50
3.1.1 整数的内部表示 51
3.1.2 整型常量 51
3.1.3 整数的输出 52
3.1.4 整数的输入 55
3.2 浮点型 57
3.2.1 浮点常量 58
3.2.2 浮点数的内部表示 58
3.2.3 浮点数的输出 58
3.2.4 浮点数的输入 60
3.2.5 浮点数的比较和计算 60
3.3 字符型 62
3.3.1 字符型数据的内部表示 62
3.3.2 字符常量和变量 63
3.3.3 字符输出 64
3.3.4 字符输入 65
3.3.5 字符处理 66
3.4 数组 68
3.4.1 什么是数组 68
3.4.2 数组的内部表示 69
3.4.3 数组元素的访问 69
3.4.4 数组的初始化 70
3.5 字符串 71
3.5.1 字符串常量 71
3.5.2 用字符数组处理字符串 72
3.5.3 字符串的输出 73
3.5.4 字符串的输入 74
3.6 文本文件输入与输出 77
3.6.1 声明FILE*类型的变量 78
3.6.2 打开文件 78
3.6.3 关闭文件 79
3.6.4 读写文件 79
3.7 变量的进一步讨论 81
3.7.1 变量的声明与初始化 81
3.7.2 限定词const 82
3.8 编程实践:命名 82
3.9 本章小结 83
习题3 86
第4章 运算符与表达式 89
4.1 运算符与表达式概述 89
4.1.1 C运算符简介 89
4.1.2 C表达式简介 91
4.2 算术运算符和算术表达式 91
4.2.1 算术运算符 91
4.2.2 算术表达式 92
4.2.3 算术表达式的例子 93
4.3 赋值运算符和赋值表达式 93
4.3.1 赋值运算符 94
4.3.2 赋值表达式 94
4.3.3 复合赋值运算符 95
4.4 增量减量运算符 96
4.5 子表达式的求值顺序 97
4.6 数据类型的转换 99
4.6.1 隐式类型转换 99
4.6.2 赋值运算符两侧数据的类型转换 100
4.6.3 强制类型转换 103
4.7 逗号运算符和逗号表达式 104
4.8 本章小结 105
习题4 107
第5章 分支结构 110
5.1 关系运算符和关系表达式 110
5.2 逻辑运算符和逻辑表达式 111
5.2.1 逻辑运算符 111
5.2.2 逻辑表达式 112
5.3 条件运算符和条件表达式 114
5.4 C语句概述 114
5.5 if语句 116
5.6 switch语句 119
5.7 应用举例 122
5.8 本章小结 127
习题5 128
第6章 循环结构与程序设计基本算法 133
6.1 循环结构与控制语句 133
6.1.1 while语句 133
6.1.2 for语句 134
6.1.3 do-while语句 136
6.1.4 循环嵌套 139
6.1.5 流程控制语句(break语句、continue语句和goto语句) 140
6.2 控制循环的基本方法 144
6.2.1 通过计数器变量控制循环 144
6.2.2 通过程序执行的状态控制循环 148
6.3 穷举算法 153
6.4 迭代与递推算法 157
6.4.1 迭代 157
6.4.2 递推 159
6.5 程序设计实例 162
6.6 编程实践:程序计时 171
6.7 本章小结 172
习题6 175
第7章 函数与结构化程序设计 180
7.1 函数 180
7.1.1 为什么要使用函数 180
7.1.2 函数定义 183
7.1.3 函数调用 188
7.1.4 函数原型与函数声明 190
7.1.5 函数的执行 193
7.1.6 主调函数与被调函数之间的数据传递 195
7.1.7 函数设计的思路 198
7.2 递归调用与递归算法 202
7.2.1 递归调用的执行过程 202
7.2.2 递归算法 204
7.2.3 Hanoi塔问题 206
7.3 程序的函数分解 208
7.4 C程序结构 217
7.4.1 编译预处理命令 217
7.4.2 全局声明 224
7.4.3 函数 225
7.4.4 C程序的逻辑与物理构成 225
7.5 编程实践:软件测试 227
7.6 本章小结 229
习题7 232
第8章 指针与数组 236
8.1 指针与指针变量 237
8.1.1 指针的概念 237
8.1.2 指针变量的声明与初始化 239
8.1.3 指针的基本运算 241
8.2 数组的指针 246
8.2.1 一维数组的指针 246
8.2.2 二维数组 251
8.2.3 二维数组的元素指针和行指针 256
8.2.4 指向一维数组的指针变量(行指针变量) 260
8.3 字符指针与字符串 262
8.3.1 字符串处理函数 262
8.3.2 指向字符的指针变量处理字符串 265
8.4 指针作为函数参数 267
8.4.1 变量的指针作为函数参数 267
8.4.2 一维数组的指针作为函数参数 270
8.4.3 二维数组的指针作为函数参数 273
8.5 返回指针的函数 275
8.6 指针数组 277
8.6.1 指针数组的概念及其应用 277
8.6.2 指针数组作main函数的形参 280
8.6.3 行指针数组 282
8.7 编程实践:实用字符串处理 284
8.8 本章小结 288
习题8 297
第9章 C程序运行原理 304
9.1 一个C程序的运行之旅 304
9.2 计算机指令的执行过程 306
9.3 计算机的存储模型 308
9.4 程序的内存布局 310
9.4.1 概述 310
9.4.2 栈 311
9.4.3 堆 312
9.4.4 可执行文件映像 314
9.5 变量的存储类型 314
9.5.1 作用域 315
9.5.2 存储期限(生存期) 319
9.5.3 链接 322
9.5.4 变量分类 323
9.6 编程实践:程序设计与操作系统 327
9.7 本章小结 329
习题9 332
第10章 复杂问题的求解算法 334
10.1 分治法 334
10.1.1 分治法的基本思想 334
10.1.2 折半查找 335
10.1.3 循环赛赛程安排 338
10.2 贪心算法 340
10.2.1 贪心算法的基本概念 340
10.2.2 活动安排问题 342
10.2.3 背包问题 344
10.3 动态规划算法 348
10.3.1 动态规划介绍 348
10.3.2 最长公共子序列问题 349
10.3.3 0-1背包问题 353
10.3.4 动态规划算法总结 355
10.4 回溯法 356
10.4.1 回溯法的基本思想 356
10.4.2 n皇后问题 357
10.4.3 0-1背包问题 359
10.4.4 回溯法总结 362
10.5 本章小结 363
习题10 365
第11章 结构体、联合共用体与枚举类型 368
11.1 数据类型的再讨论 368
11.1.1 数据类型与事物属性 368
11.1.2 数据类型的定义 369
11.2 结构体 370
11.2.1 结构体类型的定义 370
11.2.2 结构体变量的声明与存储 371
11.2.3 结构体变量的引用与初始化 373
11.3 结构体数组 375
11.4 结构体指针 377
11.5 结构体与函数 379
11.5.1 函数的结构体类型参数 379
11.5.2 结构体类型的函数 381
11.6 结构体嵌套 382
11.7 线性链表 383
11.7.1 线性链表概述 383
11.7.2 C语言实现线性链表 384
11.8 联合共用体 389
11.9 枚举类型 393
11.9.1 枚举类型定义与变量声明 393
11.9.2 枚举类型的使用方法 394
11.9.3 类型名重新定义typedef 396
11.10 编程实践:中文处理 397
11.11 本章小结 400
习题11 403
第12章 文件 406
12.1 C文件概述 406
12.1.1 C文件的基本概念 406
12.1.2 文本文件与二进制文件 407
12.1.3 文件的处理方法 408
12.2 流与文件类型的指针 408
12.3 文件操作 409
12.3.1 文件的打开 409
12.3.2 文件的关闭 411
12.3.3 字符方式读写文件 411
12.3.4 数据块方式读写文件 414
12.4 文件的定位与随机读写 418
12.4.1 文件的定位 418
12.4.2 随机读写 421
12.5 文件操作的出错检测 422
12.6 文件读写操作应用实例 422
12.6.1 文件中数据的修改 423
12.6.2 文件中数据的删除 424
12.6.3 向文件中追加或插入数据 425
12.7 编程实践:C与C++ 426
12.8 本章小结 428
习题12 431
第13章 指针的进一步讨论与位运算 432
13.1 多级指针 432
13.1.1 指向指针的指针与指向行指针的指针 432
13.1.2 指向指针的指针数组与指向行指针的指针数组 434
13.2 函数与指针 435
13.2.1 指向函数的指针变量 435
13.2.2 指向函数的指针数组 440
13.2.3 指向返回指针的函数的指针变量 440
13.2.4 指向返回指针的函数的指针数组 441
13.2.5 返回行指针的函数 441
13.2.6 指向返回行指针的函数的指针变量 442
13.2.7 指向返回行指针的函数的指针数组 443
13.3 位运算 443
13.3.1 二进制位运算概述 443
13.3.2 位运算符 444
13.3.3 位段 448
13.4 本章小结 450
习题13 452
第14章 C程序开发环境与调试 455
14.1 Visual Studio Community 2015的安装与使用 455
14.1.1 Visual Studio Community 2015简介 455
14.1.2 Visual Studio Community 2015的安装 457
14.1.3 Visual Studio Community 2015中编写C程序 459
14.1.4 Visual Studio Community 2015中运行C程序 461
14.1.5 Visual Studio Community 2015中调试C程序 463
14.2 Code∷Blocks的安装与使用 468
14.2.1 Code∷Blocks简介 468
14.2.2 Code∷Blocks的安装 469
14.2.3 在Code∷Blocks中编写程序 471
14.2.4 在Code∷Blocks中运行和调试程序 476
第15章 C语言上机实验 478
15.1 实验概述 478
15.1.1 实验目的 478
15.1.2 实验步骤 478
15.2 实验项目 479
15.2.1 实验1:C程序调试与输入输出 479
15.2.2 实验2:运算符、表达式及简单C程序设计 481
15.2.3 实验3:分支及循环结构 483
15.2.4 实验4:循环程序设计 485
15.2.5 实验5:函数程序设计 487
15.2.6 实验6:函数设计 489
15.2.7 实验7:数组、指针的应用 491
15.2.8 实验8:二维数组的应用 492
15.2.9 实验9:结构体与文件 494
附录 部分字符与ASCII代码对照表 496
参考文献 497