第1章 C语言概述 1
1.1 程序设计语言 1
1.1.1 低级语言 2
1.1.2 高级语言 3
1.2 通过实例认识C程序的结构 3
1.2.1 问候界面 3
1.2.2 计算有线电视一年的费用 5
1.2.3 计算有线电视n年的费用 7
1.3 C语言的标准和编译器 8
1.3.1 C语言的标准 8
1.3.2 常用的C语言编译器 8
1.4 程序的调试 9
1.4.1 调试步骤 9
1.4.2 在Visual C++ 6.0调试环境下调试第一个程序 9
习题 13
第2章 C语言的基础知识 15
2.1 标识符、变量与常量 15
2.1.1 标识符 15
2.1.2 变量 17
2.1.3 常量 18
2.2 C语言的数据类型 19
2.2.1 为什么要讨论数据类型 19
2.2.2 C语言的数据类型种类 21
2.2.3 整型数据 22
2.2.4 字符型数据 28
2.2.5 浮点型数据 33
2.3 运算符和表达式 36
2.3.1 表达式与简单语句 36
2.3.2 算术运算符 36
2.3.3 赋值运算符 38
2.3.4 增1/减1运算符 39
2.3.5 位逻辑运算符 41
2.3.6 逗号运算符 42
2.3.7 求字节数运算符 43
2.3.8 不同数据类型数据间的混合运算 44
2.3.9 赋值表达式的类型转换 46
2.4 指针类型与指针运算符 51
2.4.1 指针概念和指针变量的定义 51
2.4.2 指针运算符&和*的使用 52
2.5 典型错误分析 55
习题 57
第3章 结构化程序设计 61
3.1 结构化程序设计 61
3.1.1 结构化程序设计思想的产生 61
3.1.2 结构化程序设计的三种基本结构 63
3.2 语句与分程序 66
3.3 顺序结构程序设计 68
3.4 关系运算符与逻辑运算符 69
3.4.1 关系运算符 69
3.4.2 逻辑运算符 71
3.5 选择结构程序设计 73
3.5.1 问题提出与程序示例 73
3.5.2 if语句的三种形式 74
3.5.3 嵌套的if语句 84
3.5.4 switch语句 88
3.5.5 条件运算符 91
3.5.6 选择结构程序举例 93
3.6 循环结构程序设计 96
3.6.1 问题提出与程序示例 97
3.6.2 while语句 99
3.6.3 do while语句 102
3.6.4 for语句 105
3.6.5 多重循环 107
3.6.6 break语句在循环语句中的用法 110
3.6.7 continue语句 112
3.6.8 循环结构程序举例 115
3.7 典型错误分析 122
习题 127
第4章 模块化程序设计 137
4.1 模块化程序设计思想 137
4.2 函数的定义、说明与调用 140
4.2.1 函数基础 140
4.2.2 函数的定义形式 141
4.2.3 函数的返回值 142
4.2.4 函数说明 142
4.2.5 函数调用 144
4.3 函数的参数传递 147
4.3.1 形参和实参的关系 147
4.3.2 普通变量作为函数的形式参数 148
4.3.3 指针变量作为函数的形式参数 149
4.4 程序举例 152
4.5 函数的递归调用 155
4.6 变量的存储类别 157
4.6.1 自动变量与外部变量 158
4.6.2 静态变量 166
4.6.3 寄存器变量 168
4.7 预处理命令 169
4.7.1 宏定义 169
4.7.2 文件包含 172
4.7.3 条件编译 174
4.8 典型错误分析 175
习题 178
第5章 数组和指针 185
5.1 一维数组 185
5.1.1 问题提出与程序示例 185
5.1.2 一维数组的定义 186
5.1.3 一维数组的引用 186
5.1.4 一维数组的初始化 188
5.1.5 程序举例 189
5.1.6 数组名作为函数的参数 192
5.2 指针与一维数组 200
5.2.1 指针值的算术运算 200
5.2.2 指针方式和数组方式对数组元素的操作 203
5.2.3 指向一组空间首地址的指针作为函数参数 204
5.3 动态的一维数组 205
5.3.1 空指针 205
5.3.2 存储器申请与释放 206
5.4 字符串与字符串函数 208
5.4.1 字符数组 208
5.4.2 字符串变量 208
5.4.3 字符串变量的输入与输出 209
5.4.4 指针与字符串 211
5.4.5 程序举例 212
5.4.6 字符串函数 215
5.5 二级指针 217
5.6 指针数组与命令行参数 219
5.6.1 指针数组 219
5.6.2 命令行参数 223
5.7 二维数组 224
5.7.1 二维数组的定义 225
5.7.2 二维数组的引用 225
5.7.3 二维数组的初始化 227
5.7.4 程序举例 228
5.7.5 用指针方法操作二维数组 232
5.8 典型错误分析 233
习题 237
第6章 结构体等构造数据类型 246
6.1 结构体 246
6.1.1 问题提出与程序示例 246
6.1.2 结构体的说明和定义 247
6.1.3 结构体成员的引用 250
6.1.4 结构体的初始化 251
6.2 结构体与数组 252
6.2.1 结构体包含数组 252
6.2.2 结构体数组 253
6.3 结构体与指针 254
6.3.1 指向结构体的指针 254
6.3.2 用结构体类型指针建立链表 257
6.4 结构体与函数 259
6.4.1 结构体数据作为函数的参数 259
6.4.2 返回指向结构体的指针的函数 261
6.5 联合体与枚举 262
6.5.1 使用联合体与枚举的目的 262
6.5.2 联合体与枚举的说明 262
6.5.3 联合体变量与枚举变量的定义 263
6.5.4 联合体变量成员的引用 264
6.5.5 枚举变量的使用 265
6.5.6 指向联合体变量的指针 267
6.5.7 联合体变量与函数 267
6.5.8 使用联合体与枚举的程序举例 268
6.6 类型定义 270
6.7 程序举例 271
6.8 典型错误分析 274
习题 277
第7章 文件 283
7.1 文件概述 283
7.1.1 问题提出与程序示例 283
7.1.2 文件“流” 284
7.1.3 文件操作的特点 285
7.1.4 缓冲文件系统 285
7.2 文件的打开与关闭 286
7.2.1 文件类型指针 286
7.2.2 文件的打开 286
7.2.3 文件的关闭 288
7.3 文件的读写操作 288
7.3.1 fputc函数与fgetc函数 288
7.3.2 fprintf函数与fscanf函数 293
7.3.3 fread函数与fwrite函数 296
7.3.4 fgets和fputs 300
7.4 文件的定位操作 301
7.4.1 文件的顺序存取和随机存取 301
7.4.2 rewind函数 301
7.4.3 fseek函数 302
7.4.4 ftell函数和feof函数 303
习题 303
第8章 案例 306
附录A ASCII代码与字符对照表 319
附录B 运算符的优先级和结合性 321
附录C printf函数的转换说明模式 322