第1章 C语言程序设计基础 1
1.1 程序设计及程序设计语言 1
1.1.1 程序设计语言的发展 1
1.1.2 C语言的发展过程 3
1.2 C语言的特点 4
1.3 C程序结构 5
1.3.1 简单的C程序介绍 5
1.3.2 C程序结构 7
1.4 源程序的编辑、编译、链接与运行 8
习题 10
第2章 C语言的数据类型与基本操作 13
2.1 常量与变量 13
2.1.1 常量 13
2.1.2 变量 17
2.2 标识符和关键字 20
2.3 整型数在计算机中的存储方式 21
2.4 有符号的数据类型和无符号的数据类型 23
2.5 运算符和表达式 24
2.5.1 赋值运算符和赋值表达式 25
2.5.2 算术运算符和算术表达式 27
2.5.3 长度测试运算符sizeof 28
2.5.4 关系运算符和关系表达式 29
2.5.5 逻辑运算符与逻辑表达式 30
2.5.6 条件运算符与条件运算表达式 33
2.5.7 逗号运算符与逗号表达式 35
2.5.8 位运算 36
2.6 不同类型数据间的转换 39
习题 41
第3章 顺序结构程序设计 48
3.1 算法 48
3.1.1 算法的组成要素 48
3.1.2 算法的表示方法 49
3.1.3 自顶向下、逐步细化的设计过程 52
3.2 C语句概述 55
3.2.1 控制语句 55
3.2.2 表达式语句 55
3.2.3 复合语句 56
3.3 数据的输入和输出 57
3.3.1 数据的输出函数 57
3.3.2 刷新输出 63
3.3.3 scanf函数 63
3.4 getchar函数与putchar函数 67
3.4.1 字符输出函数putchar() 67
3.4.2 字符输入函数getchar() 68
习题 69
第4章 选择结构程序设计 75
4.1 if语句 75
4.1.1 if语句的形式 75
4.1.2 if语句的嵌套 81
4.1.3 良好结构的程序 84
4.2 switch语句 85
4.3 程序举例 87
习题 93
第5章 循环结构程序设计 100
5.1 while语句 100
5.2 do-while语句 107
5.3 for语句 109
5.4 三种循环语句的比较 113
5.5 循环的嵌套 114
5.6 break语句和continue语句 119
5.6.1 break语句 120
5.6.2 continue语句 121
5.7 综合实例 121
5.7.1 列举算法 121
5.7.2 试探算法 123
5.7.3 密码问题 125
习题 126
第6章 函数 135
6.1 函数概述 135
6.1.1 模块化程序设计方法 135
6.1.2 函数的概念 136
6.2 函数的定义与声明 138
6.2.1 函数定义 139
6.2.2 函数的参数和返回值 140
6.2.3 函数的声明 141
6.3 函数的调用 141
6.3.1 函数调用的一般形式 141
6.3.2 函数参数的传递方式 142
6.3.3 函数的嵌套调用 145
6.3.4 函数的递归调用 146
6.4 局部变量和全局变量 150
6.4.1 局部变量 150
6.4.2 全局变量 152
6.5 变量的存储属性 155
6.5.1 自动变量(auto) 156
6.5.2 寄存器变量(register) 157
6.5.3 静态变量(static) 158
6.5.4 外部变量 159
6.6 编译预处理 161
6.6.1 宏定义 161
6.6.2 文件包含 167
6.6.3 条件编译 169
6.7 应用举例 170
习题 179
第7章 地址和指针 188
7.1 地址和指针的概念 188
7.2 指针变量 190
7.2.1 指针变量的定义 190
7.2.2 指针变量的引用 190
7.2.3 指针变量作为函数的参数 192
7.3 指向指针的指针 195
习题 196
第8章 数组 200
8.1 一维数组 200
8.1.1 一维数组的定义 200
8.1.2 一维数组的初始化 201
8.1.3 一维数组元素的引用 202
8.1.4 一维数组的使用 202
8.2 二维数组和多维数组 208
8.2.1 二维数组和多维数组的概念及其定义 208
8.2.2 二维数组的初始化 210
8.2.3 二维数组和多维数组的引用 212
8.2.4 二维数组的经典实例 213
8.3 字符数组 216
8.3.1 字符数组的定义 217
8.3.2 字符数组的输入输出 218
8.3.3 常用字符串函数 219
8.3.4 字符数组的使用 222
8.3.5 常数数组 223
8.3.6 C99标准中的变长数组 224
8.4 数组应用实例 224
8.4.1 排序 224
8.4.2 二分查找 228
8.4.3 选择排序 230
8.4.4 扑克游戏的发牌 231
习题 233
第9章 指针的应用 239
9.1 一维数组与指针 239
9.1.1 数组名的特殊意义及其在访问数组元素中的作用 239
9.1.2 数组元素的指针 240
9.1.3 指针变量的运算 241
9.2 指针与二维数组 250
9.3 字符串与指针 255
9.3.1 字符串的表示形式 255
9.3.2 字符指针作为函数的参数 258
9.4 指针数组 261
9.4.1 指针数组的概念 261
9.4.2 指针数组与指向指针的指针变量 263
9.5 函数的指针 266
9.5.1 函数的指针和指向函数的指针变量 266
9.5.2 函数的指针作为函数参数 267
9.5.3 函数指针的应用 268
9.6 返回指针的函数 271
9.7 main()函数的返回值和参数 272
9.7.1 main()函数的返回值 273
9.7.2 main()函数的参数 273
习题 274
第10章 结构体和共用体 281
10.1 概述 281
10.2 结构体与结构体类型变量 281
10.2.1 结构体类型的定义 281
10.2.2 结构体类型变量的定义 282
10.2.3 结构体变量的引用 284
10.2.4 结构体变量的初始化 285
10.3 结构体数组 287
10.4 指向结构体类型数据的指针 290
10.4.1 指向结构体变量的指针 290
10.4.2 指向结构体数组的指针 291
10.4.3 结构体指针变量作为函数的参数 292
10.4.4 结构体与函数的类型 295
10.5 动态存储分配与链表 297
10.5.1 链表的概念 297
10.5.2 动态存储分配 298
10.5.3 建立和输出链表 300
10.5.4 链表的基本操作 300
10.6 共用体 309
10.6.1 共用体的概念和定义 309
10.6.2 共用体变量的引用 311
10.7 枚举类型 313
10.7.1 枚举的定义与说明 314
10.7.2 枚举类型变量的赋值与引用 314
10.8 用Typedef定义类型 315
10.9 应用实例——学生成绩管理系统 316
习题 327
第11章 文件 332
11.1 文件的概念 332
11.1.1 文件的类型 332
11.1.2 C语言对文件的处理方法 333
11.1.3 文件的访问方式 333
11.2 格式化数据文件操作 334
11.2.1 打开文件函数fopen() 334
11.2.2 关闭文件函数fclose() 336
11.2.3 从文件中格式化输入数据fscanf() 336
11.2.4 向文件中格式化输出函数fprintf() 337
11.2.5 文件建立 337
11.2.6 文件访问 338
11.2.7 文件修改 339
11.3 字符数据文件操作 340
11.3.1 fgetc()函数——从指定文件中读取一个字符 340
11.3.2 fputc()函数——指向文件输出一个字符 341
11.3.3 fgets()函数——从文件中读一个字符串 342
11.3.4 fputs()函数——向指定文件输出一个字符串 342
11.3.5 feof()函数——文件操作是否到文件尾的检测函数 343
11.4 fread()与fwrite()函数 343
11.5 文件位置定位与错误处理函数 345
11.5.1 rewind()函数——将文件读写指针定位于文件头 345
11.5.2 fseek()函数——重新定位文件位置指针 346
11.5.3 ftell()函数——测试当前读写指针位置 346
11.5.4 ferror()函数——检测文件流操作中的错误 346
11.5.5 clearerr()函数——清除出错标志 346
11.6 应用实例——大奖赛评分系统 346
习题 352
附录A ASCII字符编码一览表 356
附录B C语言的关键字和运算符 357
附录C C语言库函数 359
参考文献 366