第1章 C程序设计概述 1
1.1 算法、C语言和程序设计 1
1.1.1 算法和算法设计 1
1.1.2 C语言及其特点 5
1.1.3 用C语言编写程序实现算法 6
1.1.4 算法的三大要素 12
1.2 C程序的形式要点 12
1.3 C程序的开发过程 13
练习题1 14
第2章 数据类型和表达式 15
2.1 C语言的数据类型 15
2.2 常量 16
2.2.1 整型常量 17
2.2.2 实型常量 17
2.2.3 字符常量 17
2.2.4 字符串常量 18
2.2.5 符号常量 18
2.3 变量 20
2.3.1 C标识符及其命名 20
2.3.2 变量的声明及其初始值问题 21
2.4 简单的输入/输出 22
2.4.1 字符型数据的输入/输出函数 23
2.4.2 简单的格式化输入/输出函数 24
2.5 算术运算和算术表达式 27
2.5.1 基本算术运算 27
2.5.2 自增/自减运算 28
2.5.3 算术运算符的优先级和结合性 29
2.6 赋值运算和赋值表达式 29
2.6.1 简单赋值运算 30
2.6.2 复合赋值运算 30
2.6.3 赋值表达式的类型 31
2.7 逗号运算和逗号表达式 32
2.8 不同类型数据之间的混合运算 32
2.8.1 算术表达式的类型转换 33
2.8.2 强制类型转换 34
2.9 运算符的优先级和结合性 34
练习题2 35
第3章 算法的基本控制结构 37
3.1 C语句概述 37
3.1.1 C语言的基本语句 37
3.1.2 三种基本结构和流程控制语句 38
3.2 顺序结构 39
3.3 选择结构的流程控制 40
3.3.1 条件判断 40
3.3.2 if语句 43
3.3.3 条件运算和条件表达式 47
3.3.4 switch语句 47
3.3.5 选择结构程序举例 50
3.4 循环结构的流程控制 52
3.4.1 while语句 52
3.4.2 do while语句 54
3.4.3 for语句 55
3.4.4 循环的嵌套 58
3.4.5 break语句和continue语句 62
3.4.6 循环结构程序举例 65
3.5 关于goto语句 66
3.6 综合应用举例 67
练习题3 70
第4章 函数 72
4.1 函数概述 72
4.1.1 函数与复杂问题求解 72
4.1.2 C函数的一般特性 72
4.1.3 函数的分类 73
4.1.4 C标准库函数 74
4.2 格式化输出/输入函数 74
4.2.1 格式化输出函数printf 74
4.2.2 格式化输入函数scanf 77
4.3 函数的声明和定义 79
4.3.1 函数的声明 79
4.3.2 函数的定义 80
4.4 函数的一般调用 82
4.4.1 函数调用的条件 82
4.4.2 函数调用的方式 82
4.4.3 函数的实际参数和形式参数 83
4.4.4 函数的调用过程 84
4.5 函数的嵌套调用和递归调用 85
4.5.1 函数的嵌套调用 85
4.5.2 函数的递归调用 86
4.6 综合应用举例 88
练习题4 91
第5章 数组和字符串 92
5.1 数组的概念 92
5.2 一维数组 93
5.2.1 一维数组的定义与初始化 93
5.2.2 一维数组的赋初值 94
5.2.3 一维数组的引用 95
5.3 多维数组 98
5.3.1 二维数组的定义与初始化 98
5.3.2 二维数组的引用 99
5.3.3 多维数组 101
5.4 字符数组与字符串 101
5.4.1 字符数组 101
5.4.2 字符串 102
5.4.3 字符串的输入与输出 103
5.4.4 常用字符串库函数 105
5.5 综合应用举例 105
5.5.1 数组参数传递 105
5.5.2 排序与查找 107
5.5.3 字符和字符串处理 111
练习题5 112
第6章 指针 114
6.1 指针的概念 114
6.2 指针和变量 115
6.2.1 指针的定义与初始化 115
6.2.2 指针的赋值运算和引用 118
6.2.3 指针作为函数参数 119
6.3 指针和数组 121
6.3.1 指针与一维数组 122
6.3.2 指针与二维数组 128
6.4 字符指针和字符串 130
6.4.1 用字符指针表示字符串 130
6.4.2 用字符串指针处理字符串 132
6.4.3 字符指针作为函数参数 133
6.5 指针和函数 134
6.5.1 用函数指针调用函数 134
6.5.2 用指向函数的指针作为函数参数 135
6.5.3 指针型函数 137
6.6 指针数组 138
6.6.1 指针数组的概念 138
6.6.2 字符型指针数组和多个字符串的处理 139
6.7 多级指针 140
6.8 使main函数带参数 141
6.9 动态存储分配 143
6.9.1 什么是内存的动态分配 143
6.9.2 动态内存分配函数 143
6.9.3 void指针类型 144
6.10 综合应用举例 145
练习题6 148
第7章 模块化程序设计 150
7.1 C程序的结构 150
7.1.1 多源文件程序的结构 150
7.1.2 作用域、生存期和链接 151
7.1.3 内部变量和外部变量 152
7.2 变量和函数的存储类型 153
7.2.1 变量的存储类型 153
7.2.2 函数的存储类型 155
7.2.3 变量存储类型应用举例 155
7.3 预处理命令 157
7.3.1 宏定义 157
7.3.2 文件包含 159
7.3.3 条件包含 160
7.4 自定义库 161
7.4.1 头文件 161
7.4.2 自定义库 162
7.5 综合应用举例 163
7.5.1 模块化程序设计 163
7.5.2 基于自定义库的程序设计 169
练习题7 171
第8章 构造数据类型 173
8.1 结构体数据类型 173
8.1.1 结构体数据类型的定义 173
8.1.2 结构体变量的定义及引用 174
8.1.3 结构体数组及指向结构体的指针 178
8.1.4 结构体变量及指向结构体的指针作为函数的参数 180
8.2 结构体应用举例 182
8.3 共用体数据类型 185
8.3.1 共用体的定义和共用体变量的引用 185
8.3.2 共用体类型数据的应用 187
8.4 枚举数据类型 188
8.5 用typedef定义类型 190
练习题8 192
第9章 位运算 193
9.1 C语言的位运算操作符 193
9.2 位运算 193
9.2.1 按位取反运算 193
9.2.2 按位与、或和异或运算 194
9.2.3 移位运算 196
9.2.4 其他说明 197
9.3 位段 198
9.3.1 位段的定义和位段变量说明 198
9.3.2 位段的应用 200
9.4 综合应用举例 201
练习题9 203
第10章 文件 204
10.1 文件概述 204
10.1.1 文件的基本概念 204
10.1.2 数据文件的分类 204
10.1.3 文件操作规则 205
10.2 文件的基本操作步骤 206
10.2.1 文件操作实例 206
10.2.2 文件的操作步骤 207
10.3 文件的打开与关闭 208
10.3.1 打开文件 208
10.3.2 关闭文件 209
10.4 文件的读/写 210
10.4.1 文件按格式化方式读/写 210
10.4.2 向文件读/写一个字符 212
10.4.3 向文件读/写一个字符串 214
10.4.4 文件按数据块方式读/写 215
10.5 文件的定位 218
10.5.1 rewind函数 218
10.5.2 fseek函数和ftell函数 219
10.6 文件读/写的出错检测 220
10.6.1 ferror函数 221
10.6.2 clearerr函数 221
10.7 综合应用举例 221
练习题10 224
第11章 C程序应用实例 225
11.1 用于描述数据结构的案例——链表 225
11.1.1 数据结构概述 225
11.1.2 链表的操作 226
11.1.3 链表的应用示例 229
11.2 系统功能调用 231
11.2.1 ROM-BIOS系统调用 231
11.2.2 DOS系统调用 234
11.3 端口控制 235
11.4 数值计算 236
11.5 图形程序设计 242
11.5.1 图形控制函数 242
11.5.2 基本作图函数 244
11.5.3 填充图形函数 246
11.5.4 视口、文字输出及屏幕图形的保存与恢复 248
11.5.5 简单的图形制作实例 250
11.6 C语言与汇编语言混合编程 252
11.6.1 在C程序中嵌入汇编语言代码 252
11.6.2 在C程序中调用汇编语言子程序 253
11.6.3 在汇编语言程序中调用C语言程序 254
附录A 基本ASCII码表 256
附录B C语言中的关键字 257
附录C C库函数 257
附录D C99标准 262
主要参考文献 268