第1章 计算思维与程序设计 2
1.1 计算思维 2
1.1.1 计算科学 2
1.1.2 思维基础 3
1.1.3 计算思维概念 5
1.2 计算原理与模型 7
1.2.1 计算原理 7
1.2.2 计算模型 8
1.2.3 数值计算方法 9
1.3 计算思维与问题求解 10
1.3.1 问题抽象 10
1.3.2 问题映射 11
1.3.3 算法设计 12
1.3.4 编写程序 13
1.4 C语言求解问题初步 13
1.4.1 程序设计语言发展过程 13
1.4.2 C语言简介 16
1.4.3 C语言程序求解问题的过程 18
本章小结 20
习题 21
第2章 C语言基础知识 23
2.1 引例 23
2.1.1 问题描述 23
2.1.2 问题分析 23
2.2 数据类型 24
2.3 标识符与关键字 25
2.4 常量 25
2.4.1 数值常量 25
2.4.2 字符型常量 26
2.4.3 字符串常量 27
2.4.4 符号常量 27
2.5 变量 28
2.6 运算符与表达式 29
2.6.1 算术运算 29
2.6.2 赋值运算 31
2.6.3 逗号运算 33
2.6.4 强制类型转换 33
2.6.5 求字节数运算 34
2.6.6 取地址运算 34
2.7 引例的实现 34
本章小结 35
习题 35
第3章 简单问题求解 39
3.1 引例 39
3.1.1 问题描述 39
3.1.2 问题分析 39
3.1.2 算法设计 39
3.2 C语言程序的结构 40
3.2.1 简单的C程序结构 40
3.2.2 C语言程序的一般格式 41
3.2.3 C语言语句概述 43
3.2.4 C语言程序的书写规范 43
3.3 输入输出操作 43
3.3.1 格式化输入/输出函数 43
3.3.2 字符输入/输出函数 49
3.4 简单C程序设计 51
3.5 结构化程序设计与算法 53
3.5.1 结构化程序设计的基本思想 54
3.5.2 三种基本程序结构 54
3.5.3 算法 54
3.5.4 流程图 55
3.6 C语言程序的执行 57
3.7 引例的实现 58
本章小结 59
习题 59
第4章 选择问题求解 62
4.1 引例 62
4.1.1 问题描述 62
4.1.2 问题分析 62
4.1.3 算法设计 63
4.2 关系运算与逻辑运算 63
4.2.1 关系运算及其表达式 63
4.2.2 逻辑运算及其表达式 64
4.3 if条件语句 65
4.3.1 if语句 66
4.3.2 if-else语句 67
4.3.3 条件表达式 69
4.3.4 if条件语句的嵌套 70
4.3.5 引例的if条件语句实现 76
4.4 switch语句 78
4.4.1 switch语句的格式 79
4.4.2 switch中的break语句 80
4.4.3 引例的switch语句实现 84
本章小结 86
习题 86
第5章 重复问题求解 90
5.1 引例 90
5.1.1 问题描述 90
5.1.2 问题分析 90
5.1.3 算法设计 91
5.2 for语句 91
5.2.1 for语句的一般格式 91
5.2.2 引例的for语句实现 95
5.3 while语句 97
5.3.1 while语句的一般格式 97
5.3.2 引例的while语句实现 100
5.4 do-while语句 101
5.4.1 do-while语句的一般格式 101
5.4.2 三种循环语句的比较 103
5.5 循环嵌套 104
5.5.1 引例扩展 104
5.5.2 循环的嵌套结构 104
5.5.3 扩展引例的循环嵌套实现 107
5.6 break语句和continue语句 109
5.6.1 break语句 109
5.6.2 continue语句 110
5.7 引例的实现 111
本章小结 113
习题 113
第6章 多维批量数据处理 117
6.1 引例 117
6.1.1 问题描述 117
6.1.2 问题分析 118
6.2 一维数组 118
6.2.1 一维数组的定义 118
6.2.2 一维数组的初始化 119
6.2.3 数组元素的引用 120
6.2.4 数组元素的输入与输出 121
6.3 二维数组 130
6.3.1 二维数组的定义 130
6.3.2 二维数组的初始化 130
6.3.3 二维数组元素的引用 132
6.4 字符数组 136
6.4.1 字符数组的定义 136
6.4.2 字符数组的初始化 137
6.4.3 字符数组的输入与输出 138
6.4.4 字符串处理函数 140
6.5 引例的实现 143
本章小结 145
习题 146
第7章 问题模块化求解 152
7.1 引例 152
7.1.1 问题描述 152
7.1.2 问题分析 153
7.1.3 算法设计 154
7.2 函数的定义 154
7.3 函数的调用和声明 157
7.3.1 函数的调用 157
7.3.2 函数的声明 160
7.4 函数间的参数传递 161
7.5 数组作函数参数 162
7.6 函数的递归调用 168
7.7 exit()函数 170
7.8 变量的作用域与存储类型 171
7.8.1 变量的作用域 171
7.8.2 变量的存储类型 172
7.9 C语言的编译预处理 175
7.9.1 宏定义 175
7.9.2 文件包含 176
7.9.3 条件编译 176
7.10 引例的实现 177
本章小结 182
习题 183
第8章 内存高效管理 191
8.1 引例 191
8.1.1 问题描述 191
8.1.2 问题分析 191
8.1.3 算法设计 191
8.2 指针 192
8.2.1 变量的内存地址 192
8.2.2 指针与指针变量 193
8.2.3 指针运算 195
8.3 指针与函数 197
8.3.1 指针作函数参数 197
8.3.2 返回指针的函数 199
8.4 指针与数组 201
8.4.1 指针与一维数组 201
8.4.2 指针与二维数组 205
8.4.3 指针数组 208
8.5 动态存储分配 209
8.5.1 malloc()函数 210
8.5.2 free()函数 211
8.6 引例的实现 212
本章小结 213
习题 213
第9章 复杂结构数据处理 217
9.1 引例 217
9.1.1 问题描述 217
9.1.2 问题分析 217
9.2 结构体类型的定义 218
9.2.1 定义结构体类型的一般格式 218
9.2.2 嵌套结构体的定义 219
9.3 结构体类型变量的定义和引用 220
9.3.1 定义结构体类型变量的方法 220
9.3.2 结构体变量的初始化 222
9.3.3 结构体变量的引用 222
9.4 结构体类型数组的定义和引用 225
9.4.1 结构体数组的定义 225
9.4.2 结构体数组的初始化和引用 226
9.5 结构体指针变量的定义和引用 229
9.5.1 结构体指针的定义 229
9.5.2 结构体指针的赋值和引用 230
9.6 结构体与函数 233
9.6.1 结构体变量作函数的形参 234
9.6.2 结构体指针作函数的形参 235
9.6.3 结构体数组作函数的形参 236
9.7 结构体与链表 237
9.7.1 链表的相关概念 237
9.7.2 链表的建立及其操作 238
9.8 用typedef声明新类型 242
9.8.1 声明新类型名 242
9.8.2 用typedef定义结构体类型 242
9.9 枚举 243
9.9.1 枚举类型的定义 243
9.9.2 枚举变量的定义和引用 244
9.10 引例的实现 245
本章小结 247
习题 247
第10章 数据文件管理 251
10.1 引例 251
10.1.1 问题描述 251
10.1.2 问题分析 251
10.1.3 算法设计 251
10.2 文件概述 252
10.3 文件的打开与关闭 252
10.3.1 文件的打开 253
10.3.2 文件的关闭 254
10.4 文本文件的读写 254
10.4.1 按字符读写文件 255
10.4.2 按字符串读写文件 257
10.4.3 格式化读写文件 260
10.5 二进制文件的读写 265
10.5.1 fwrite()函数 265
10.5.2 fread()函数 267
10.6 文件的定位 269
10.6.1 fseek()函数 269
10.6.2 ftell()函数 269
10.6.3 rewind()函数 269
10.7 文件的更新 272
10.8 引例的实现 275
10.8.1 需要明确的几个问题 275
10.8.2 算法实现 276
本章小结 281
习题 282
附录1 C语言关键字 284
附录2 ASCII码对照表 285
附录3 常用的ANSI C标准库函数 287
参考文献 296