第1章 C语言概述 1
1.1 C语言的发展和主要特点 1
1.1.1 C语言的起源 1
1.1.2 C语言的特点 1
1.2 第一个C程序的规划、设计和运行 3
1.2.1 程序的规划与操作 3
1.2.2 设计第一个C语言程序 6
1.2.3 C程序编译与执行的过程 6
小结 7
实验 C语言运行环境的介绍和使用 7
习题 11
第2章 C程序的基础知识 12
2.1 一个简单C程序的解析 12
2.2 变量与常量 14
2.2.1 变量的定义 14
2.2.2 变量的赋值 15
2.2.3 常量 15
2.3 C语言的基本数据类型 16
2.3.1 整型数据 16
2.3.2 字符型数据 18
2.3.3 浮点型数据 20
2.4 基本数据类型间的转换 21
2.4.1 自动转换 21
2.4.2 强制类型转换 23
2.4.3 赋值表达式的类型转换 24
2.5 C语言中运算符和表达式的使用 26
2.5.1 算术运算符及其表达式 26
2.5.2 赋值运算符及其表达式 28
2.5.3 关系运算符及其表达式 29
2.5.4 逻辑运算符及其表达式 30
2.5.5 运算符的优先级 31
2.5.6 自加与自减运算符 32
小结 33
实验 常量、变量和数据类型的使用 33
习题 35
第3章 顺序结构程序设计 37
3.1 程序设计基础 37
3.1.1 算法与数据结构 37
3.1.2 结构化程序设计方法 39
3.2 顺序结构 39
3.3 输入和输出函数的使用 40
3.3.1 printf()函数 41
3.3.2 scanf()函数 47
3.3.3 getchar()与putchar()函数 54
小结 55
实验 顺序结构程序设计 55
习题 57
第4章 选择结构程序设计 60
4.1 选择结构 60
4.2 if语句 61
4.3 其他选择 64
4.3.1 if...else语句 64
4.3.2 嵌套if语句 66
4.3.3 if...else if语句 67
4.3.4 if与else的配对问题 69
4.4 条件运算符 70
4.5 switch语句 72
4.5.1 switch语句与break语句 72
4.5.2 不加break语句的switch语句 78
小结 79
实验 选择结构程序设计应用 80
习题 82
第5章 循环结构程序设计 85
5.1 循环结构 85
5.2 for循环 85
5.3 while循环 88
5.3.1 使用while循环 88
5.3.2 无穷循环的产生 90
5.4 do...while循环 91
5.5 空循环 94
5.6 循环方式的选择 95
5.7 嵌套循环 96
5.8 循环的跳离 100
5.8.1 break语句 101
5.8.2 continue语句 102
小结 103
实验 循环结构程序设计应用 103
习题 105
第6章 函数与预处理命令 109
6.1 简单的函数 109
6.2 函数的基本结构 110
6.2.1 函数原型的声明、编写与调用 110
6.2.2 函数的自变量与参数 112
6.2.3 函数的常量返回值 114
6.3 变量的等级 118
6.3.1 局部变量 118
6.3.2 静态局部变量 119
6.3.3 外部变量 120
6.3.4 静态外部变量 122
6.3.5 寄存器变量 123
6.4 同时使用多个函数 125
6.4.1 调用多个函数 125
6.4.2 函数之间的相互调用 126
6.4.3 递归函数 127
6.5 预处理命令——#define 131
6.5.1 #define预处理命令 131
6.5.2 为什么要用#define 133
6.5.3 const修饰符 133
6.5.4 #define的另一功能——宏 134
6.5.5 使用自变量的宏 134
6.5.6 宏号的使用 135
6.5.7 函数与宏的选择 136
6.6 #include预处理命令 136
6.6.1 使用自定义的头文件 136
6.6.2 标准的头文件 138
6.6.3 头文件与函数原型 138
小结 138
实验 函数程序设计和编译预处理 139
习题 141
第7章 数组与字符串 145
7.1 一维数组 145
7.1.1 数组的声明 145
7.1.2 数组中元素的表示方法 146
7.1.3 数组初始化赋值 147
7.1.4 数组的输入与输出 147
7.1.5 数组越界的检查 150
7.2 二维数组以上的多维数组 152
7.2.1 二维数组的声明与初始化赋值 152
7.2.2 二维数组元素的引用及存取 153
7.2.3 多维数组 155
7.3 传递数组给函数 156
7.3.1 一维数组为自变量来传递 156
7.3.2 冒泡排序法 160
7.3.3 传递多维数组 163
7.3.4 传递“值”还是“地址”到函数 166
7.4 字符串 169
7.4.1 字符串常数 169
7.4.2 字符串的声明与初始化赋值 169
7.5 字符串的输入与输出函数 170
7.5.1 scanf()与printf()函数 170
7.5.2 gets()与puts()函数 171
7.6 字符串数组 172
7.6.1 字符串数组的声明与初始化赋值 172
7.6.2 字符串数组元素的引用及存取 173
小结 176
实验 数组及字符程序设计 177
习题 179
第8章 指针 183
8.1 指针概述 183
8.1.1 指针的概念 183
8.1.2 为什么要用指针 185
8.2 指针变量 185
8.2.1 指针变量的定义 186
8.2.2 指针变量的使用 186
8.3 指针运算符 189
8.3.1 地址运算符& 189
8.3.2 按照地址取值运算符 189
8.3.3 定义指针变量所指类型的重要性 190
8.4 指针的运算 191
8.4.1 指针的赋值运算与赋值 191
8.4.2 指针的加法与减法运算 192
8.4.3 指针的减法运算 194
8.5 指针与函数 195
8.6 指针与数组 201
8.6.1 指针与数组的关系 201
8.6.2 字符串数组与指针数组 205
8.7 指向指针的指针——双重指针 206
小结 210
实验 指针程序设计 210
习题 214
第9章 结构体与其他数据类型 218
9.1 结构体 218
9.1.1 结构体的声明 218
9.1.2 结构体变量的使用及初始化 219
9.2 嵌套结构体 222
9.3 结构体数组 224
9.4 结构体指针 228
9.5 结构体为自变量的函数传递 230
9.5.1 整个结构体传递到函数 230
9.5.2 结构体字段分别传递 232
9.5.3 传递结构体的地址 233
9.6 共用体 235
9.6.1 共用体的定义及声明 235
9.6.2 共用体与结构体的差异 236
9.6.3 共用体的使用及初始化 238
9.7 枚举类型 240
9.7.1 枚举类型的定义及声明 240
9.7.2 枚举类型的使用及初始化 241
9.8 使用自定义的类型——typedef 247
小结 249
实验 结构体程序设计 250
习题 253
第10章 文件 257
10.1 文件的概念 257
10.2 文件的操作方式 258
10.3 有缓冲区的文件处理函数 259
10.3.1 有缓冲区文件处理函数的整理 260
10.3.2 有缓冲区文件处理函数的练习 261
10.4 无缓冲区的文件处理函数 269
10.4.1 无缓冲区文件处理函数的整理 271
10.4.2 无缓冲区文件处理函数的练习 272
10.5 二进制文件的使用 274
10.5.1 二进制文件有缓冲区函数的使用 275
10.5.2 二进制文件无缓冲区函数的使用 277
10.6 文本模式及二进制模式的比较 280
10.6.1 以文本模式存储数值 280
10.6.2 以二进制模式存储数值 282
10.6.3 换行与文件结束的讨论 284
10.6.4 输出相对应字符的十六进制码 287
10.7 顺序存取与随机存取 288
10.7.1 顺序存取 289
10.7.2 随机存取 290
小结 292
实验 文件程序设计 293
习题 295
附录A 常用的函数库 299
附录B C语言的关键字 307
附录C ASCⅡ码表 308
附录D 运算符的优先级和结合性 310
参考文献 312