第1章 C语言语法提要与常见错误分析 1
1.1 数据类型、常量与变量、运算符与表达式 1
1.1.1 标识符 1
1.1.2 关键字 2
1.1.3 C语言程序的书写规则 2
1.1.4 C程序的组成与执行 2
1.1.5 数据类型 3
1.1.6 常量及其数据类型与表示形式 4
1.1.7 变量及其数据类型与基本操作 6
1.1.8 运算符与表达式 10
1.1.9 数据类型的转化及其转化规则 15
1.2 数据的输入/输出与顺序结构程序设计 17
1.2.1 格式化输入/输出 17
1.2.2 非格式化输入/输出及其函数 20
1.2.3 C语言的语句 23
1.2.4 顺序结构与语句顺序执行 26
1.3 选择结构程序设计及其应用 27
1.3.1 if语句结构的3种形式及其执行过程 27
1.3.2 switch语句 29
1.3.3 switch语句和if语句之间的相互转化与等价性 30
1.4 循环结构程序设计及其应用 32
1.4.1 while循环语句 32
1.4.2 do-while循环语句 32
1.4.3 for循环语句 33
1.4.4 3种循环结构的嵌套与等价性 33
1.4.5 跳转语句 34
1.5 指针与数组 37
1.5.1 指针、变量的指针与指针变量 37
1.5.2 一维数组 38
1.5.3 二维数组 46
1.5.4 指针数组与二重指针及其关系 52
1.5.5 字符数组与字符串及其处理函数 53
1.6 函数、变量的存储属性、预处理 56
1.6.1 函数的结构与定义 56
1.6.2 函数的声明与函数的调用 57
1.6.3 函数的递归调用 58
1.6.4 函数的参数与参数传递机制 59
1.6.5 函数的类型与返回值 60
1.6.6 内部函数与外部函数及其作用域 61
1.6.7 变量的存储属性、作用域与生存周期 61
1.6.8 预处理命令 66
1.6.9 指针函数、函数的指针、函数指针变量 72
1.6.10 指向指针函数的指针变量 74
1.7 结构体、共同体、动态分配函数与单向链表 76
1.7.1 typedef命令的作用和具体应用 76
1.7.2 结构体类型 77
1.7.3 结构体指针、结构体数组、结构体函数 80
1.7.4 结构体变量和结构体数组作为函数参数与结构体函数 83
1.7.5 共同体类型 83
1.7.6 枚举类型 85
1.7.7 动态分配函数、单向链表的基本操作 86
1.8 文件操作及其简单应用 91
1.8.1 文件的打开与关闭 91
1.8.2 文本文件的读写与随机访问 93
1.8.3 二进制文件的(块方式)读写函数 94
1.8.4 文件指针定位、文件状态测试与随机读写函数 94
1.8.5 文件的格式化读写及其函数 96
第2章 C语言理论学习中的关键性问题 99
2.1 数据类型、常量与变量、运算符与表达式 99
2.1.1 C语言的数据类型 99
2.1.2 运算符 100
2.1.3 变量的几个要素及其类型对运算的影响 100
2.1.4 自增++、自减--运算 101
2.1.5 逻辑运算的几种特殊规则 103
2.1.6 复合赋值运算的几个要点 105
2.1.7 学习和使用函数的几个关键问题 106
2.2 数据的输入/输出与顺序结构程序设计 107
2.2.1 格式化输入函数 107
2.2.2 格式化输出函数 111
2.2.3 顺序结构 113
2.3 选择结构程序设计及其应用 113
2.3.1 if语句及其与条件运算(?:)的等价性 113
2.3.2 if语句的嵌套、else与if的配对原则及其副作用 114
2.3.3 switch结构的几种具体情况分析 115
2.4 循环结构程序设计及其应用 116
2.4.1 循环结构使用的几个关键问题 116
2.4.2 循环条件“表达式”的形式和循环体语句的形式 117
2.4.3 break、continue、exit()的作用与区别 118
2.4.4 编程解决数值问题的基本步骤 119
2.5 指针与数组 120
2.5.1 变量指针与指针变量、指向交换与交换值 120
2.5.2 一维数组 122
2.5.3 二维数组 124
2.5.4 字符数组和字符串及其处理函数 126
2.5.5 指针数组与二重指针变量及其关系 127
2.5.6 主函数的参数与指针数组 130
2.6 函数、变量的存储属性、预处理 131
2.6.1 函数的结构与函数自定义的基本步骤 131
2.6.2 函数的声明、定义、调用及其区别 132
2.6.3 函数递归实现的原理与递归终结条件 133
2.6.4 变量的存储属性及其互不影响的几种情况 134
2.6.5 静态变量初始化与赋值的区别 137
2.6.6 指针作为函数参数的几种具体情况及其作用 139
2.6.7 有参数的宏定义与有参数函数之间的区别 141
2.6.8 指针函数及其返回值 142
2.7 结构体、共同体、枚举类型、动态分配函数与单向链表 144
2.7.1 结构体类型与结构体变量的区别 144
2.7.2 结构体类型与共同体类型的区别 145
2.7.3 结构体变量与数组名的区别 146
2.7.4 枚举类型定义、引用时的几个要点 148
2.7.5 动态分配函数与单向链表 148
2.8 文件操作及其简单应用 151
2.8.1 编程处理文件数据的基本步骤 151
2.8.2 fopen()函数参数含义解析 152
2.8.3 块方式操作文件函数fread、fwrite参数解析及其应用 154
2.8.4 文件数据格式化操作函数fscanf()、fprintf()使用要领 156
第3章 典型例题与解析 159
3.1 数据类型、常量与变量、运算符与表达式 159
3.1.1 基础数据类型、常量与变量、数据运算 159
3.1.2 数据类型的不同转化与运算的优先级 161
3.1.3 复合赋值运算的运算规则 162
3.1.4 自加、自减运算与逗号运算符 163
3.2 数据的输入/输出与顺序结构程序设计 164
3.2.1 数值类数据输入时数据的分隔问题与典型的顺序结构程序设计 164
3.2.2 数值类数据与字符类数据混合输入时的数据分隔 166
3.2.3 整数的格式控制输出 167
3.2.4 实数的格式控制输出 170
3.2.5 字符(串)数据的格式控制输出 172
3.2.6 练习题 173
3.3 选择结构程序设计及其应用 176
3.3.1 if语句的几种形式及其应用与相互转化 176
3.3.2 switch语句及其应用 179
3.3.3 switch结构、if结构、条件运算之间的转化应用 180
3.3.4 break对嵌套的switch结构的终止及其应用 181
3.4 循环结构程序设计及其应用 183
3.4.1 单循环结构程序设计及其应用 183
3.4.2 多重循环结构及其应用 193
3.4.3 break、continue语句及其应用 194
3.4.4 迭代与穷举原理在循环中的应用 195
3.4.5 选择、循环结构嵌套应用实例 197
3.5 指针与数组 199
3.5.1 指针、变量的指针与指针变量 199
3.5.2 指针及指针变量实施的运算及其含义 200
3.5.3 数组的静态定义与元素的下标表示法 201
3.5.4 数组的动态定义与元素的指针表示法 202
3.5.5 数组的指针与指向数组的指针变量 204
3.5.6 二维数组的行列指针与指向二维数组的行列指针变量 205
3.5.7 指针数组和二级指针及其关系 208
3.6 函数、变量的存储属性、预处理 210
3.6.1 函数的声明、定义、调用与函数的返回值 210
3.6.2 函数的参数与地址传递机制 213
3.6.3 函数的递归调用与静态变量、自动变量结合的实例 220
3.6.4 函数的递归调用与指针作为函数参数结合的实例 222
3.6.5 指针函数与自定义字符串处理函数 223
3.6.6 函数的指针与指向函数的指针变量及其应用 227
3.6.7 主函数的参数与指针数组 228
3.6.8 变量的存储属性及其作用域与生存期 229
3.6.9 外部变量作用域的扩展与多个源文件的编译和连接 233
3.6.10 宏替换与函数的区别 236
3.7 结构体、共同体、动态分配函数与单向链表 240
3.7.1 结构体 240
3.7.2 结构体数组 243
3.7.3 结构体变量指针和指针变量及其应用 244
3.7.4 共同体类型、共同体变量及指针变量的应用 246
3.7.5 结构体与共同体的嵌套应用 249
3.7.6 动态分配函数和动态释放函数的应用与单向链表的基本操作 251
3.8 文件操作及其简单应用 255
3.8.1 文本类文件的处理 255
3.8.2 二进制数据文件的处理 258
3.8.3 数据的格式化操作与文件的随机读写 261
3.8.4 文件的综合应用 264
第4章 C语言实验 271
4.1 【实验一】C语言的集成开发环境与源程序的编辑和运行方法 271
4.2 【实验二】数据类型、常量与变量、运算符与表达式 276
4.3 【实验三】数据的输入/输出与顺序结构程序设计 286
4.4 【实验四】选择结构程序设计及其应用 294
4.5 【实验五】循环结构程序设计及其应用 303
4.6 【实验六】指针与数组 308
4.7 【实验七】函数、变量的存储属性、预处理 318
4.8 【实验八】结构体、共同体、动态分配函数与单向链表 325
4.9 【实验九】文件操作及其简单应用 330
第5章 C语言实践环境与上机指南 336
5.1 Turbo C 2.0上机操作指南 336
5.1.1 Turbo C 2.0的安装 336
5.1.2 Turbo C 2.0的启动和关闭 336
5.1.3 Turbo C 2.0的工作窗口 337
5.1.4 设置Turbo C 2.0的工作环境和用户目录 338
5.1.5 Turbo C 2.0中源文件的编辑、保存、加载、更名 339
5.1.6 Turbo C 2.0单文件源程序的编译和连接 340
5.1.7 Turbo C 2.0多文件源程序的组合、编译、连接 342
5.1.8 Turbo C 2.0程序的静态检查与动态调试方法 344
5.1.9 Turbo C 2.0程序的运行 346
5.2 Turbo C++ 3.0上机操作 347
5.2.1 Turbo C++ 3.0的安装、启动、关闭、工作路径的设置 347
5.2.2 Turbo C++ 3.0的集成开发环境 349
5.2.3 Turbo C++ 3.0中源文件的建立、编辑、保存、加载 351
5.2.4 Turbo C++ 3.0中源文件的编译、连接、运行 352
5.2.5 Turbo C++ 3.0中程序的动态调试与单步执行和断点设置 353
5.2.6 Turbo C++ 3.0多个文件程序的编译、连接、运行 355
5.3 Visual C++ 6.0上机操作 357
5.3.1 Visual C++ 6.0的安装、启动、退出 358
5.3.2 Visual C++ 6.0中工作路径的设置与保存 359
5.3.3 Visual C++ 6.0中源程序的建立、编辑、保存、加载 361
5.3.4 Visual C++ 6.0源程序的编译、连接和运行 363
5.3.5 在Visual C++ 6.0中关闭当前工作空间 365
5.3.6 在Visual C++ 6.0中建立项目文件、组合编译多个文件 365
5.3.7 Visual C++ 6.0中源程序的调试与调试器的使用 368
附录 373
附录A C语言的关键字及其作用 373
附录B C语言的运算符及其结合方向 374
附录C Turbo C 2.0各菜单的功能 376
附录D Turbo C 2.0常用功能键 380
附录E Turbo C库函数头文件 381
附录F C语言编译错误信息 382
参考文献 404