第1章 C语言概述 1
1.1 C语言的发展及特点 1
1.1.1 C语言的发展简史 1
1.1.2 C语言的特点 2
1.2 结构化程序设计的基本概念 3
1.2.1 顺序结构 3
1.2.2 选择结构 4
1.2.3 循环结构 4
1.3 简单的C程序介绍 5
1.4 C程序的上机步骤 7
1.4.1 运行一个C语言源程序的一般过程 8
1.4.2 TC的启动、退出与命令菜单 8
1.4.3 编辑并保存一个C语言源程序 10
1.4.4 编译、连接单个源程序文件 11
1.4.5 运行与查看结果 11
1.4.6 编辑下一个新的源程序 12
习题 12
第2章 数据类型、运算符和表达式 13
2.1 C语言的数据类型 13
2.2 常量、变量与标识符 14
2.2.1 标识符 14
2.2.2 常量 14
2.2.3 变量 15
2.3 整型数据 16
2.3.1 整型常量的表示方法 16
2.3.2 整型变量 16
2.3.3 整型常量的类型 18
2.4 实型数据 18
2.4.1 实型常量的表示方法 18
2.4.2 实型变量 19
2.4.3 实型常量的类型 20
2.5 字符型数据 20
2.5.1 字符型常量 20
2.5.2 字符型变量 21
2.5.3 字符型数据在内存中的存储形式及其使用方法 21
2.5.4 字符串常量 22
2.6 算术运算符与算术表达式 23
2.6.1 C运算符简介 23
2.6.2 算术运算符与算术表达式 23
2.7 赋值运算符与赋值表达式 25
2.7.1 赋值运算符 25
2.7.2 赋值表达式 26
2.8 C语言特有的运算和运算符 26
2.8.1 自增(++)、自减(--)运算 26
2.8.2 逗号运算符(,)和逗号表达式 27
习题 28
第3章 顺序结构 31
3.1 C语句概述 31
3.2 数据输入/输出的概念及在C语言中的实现 32
3.3 单个字符数据的输入/输出 33
3.3.1 putchar函数(单个字符的输出) 33
3.3.2 getchar函数(单个字符的输入) 33
3.4 格式化输出——printf()函数 34
3.4.1 printf()函数的一般格式 34
3.4.2 格式指示符 35
3.4.3 使用说明 38
3.5 格式化输入——scanf()函数 38
3.5.1 scanf()函数的一般格式 38
3.5.2 格式指示符 39
3.5.3 使用scanf()函数时应注意的问题 40
3.6 顺序结构程序设计举例 41
习题 44
第4章 选择结构 48
4.1 关系运算 48
4.1.1 关系运算符的分类及优先级 48
4.1.2 关系表达式 48
4.2 逻辑运算 48
4.2.1 逻辑运算符的分类及优先级 48
4.2.2 逻辑表达式 49
4.3 if语句 49
4.3.1 if语句的三种格式 49
4.3.2 if的嵌套 52
4.3.3 条件运算符 54
4.4 switch语句 54
4.5 选择结构程序设计举例 56
习题 58
第5章 循环控制 63
5.1 循环的概述及goto循环 63
5.1.1 循环的概述 63
5.1.2 goto语句 63
5.2 while循环 64
5.3 do-while循环 64
5.4 for循环 65
5.5 continue语句和break语句 68
5.5.1 continue语句 68
5.5.2 break语句 68
5.6 循环的嵌套 68
5.7 循环结构程序设计举例 69
习题 73
第6章 数组 79
6.1 一维数组 79
6.1.1 一维数组的定义 79
6.1.2 一维数组元素的引用 80
6.1.3 一维数组的初始化 80
6.1.4 一维数组程序举例 81
6.2 二维数组 83
6.2.1 二维数组的定义 83
6.2.2 二维数组的引用 84
6.2.3 二维数组的初始化 85
6.2.4 二维数组程序举例 86
6.3 字符数组 87
6.3.1 字符数组的定义 87
6.3.2 字符数组的初始化 87
6.3.3 字符数组的引用 88
6.3.4 字符串和字符串结束标志 89
6.3.5 字符数组的输入/输出 90
6.3.6 字符串处理函数 91
6.3.7 字符数组应用举例 93
6.4 数组程序举例 94
习题 99
第7章 函数 103
7.1 函数的基本知识 103
7.1.1 函数概述 103
7.1.2 函数的定义 105
7.2 函数的调用及其数据传送 106
7.2.1 形式参数和实际参数 106
7.2.2 函数的返回值 107
7.2.3 函数的调用 108
7.2.4 函数的嵌套调用 112
7.2.5 数组作为函数的参数 114
7.3 函数的递归 119
7.4 变量的作用范围 121
7.4.1 局部变量 121
7.4.2 全局变量 122
7.5 变量的存储类别 124
7.5.1 动态存储方式与静态存储方式 124
7.5.2 auto变量 125
7.5.3 static变量 125
7.5.4 register变量 127
7.5.5 extern变量 128
7.5.6 用static声明外部变量 130
7.6 内部函数和外部函数 130
7.6.1 内部函数 130
7.6.2 外部函数 131
7.7 运行一个多文件程序 131
习题 132
第8章 指针 137
8.1 地址和指针的概念 137
8.1.1 内存地址 137
8.1.2 直接和间接访问 138
8.2 指针的相关操作 138
8.2.1 指针变量的定义 138
8.2.2 指针变量的引用 139
8.2.3 指针变量的运算 140
8.2.4 指针变量作为函数参数 140
8.3 指针与数组 141
8.3.1 指针与一维数组 141
8.3.2 指针与二维数组 143
8.3.3 指针数组与数组指针 145
8.3.4 数组名作为函数参数 146
8.4 指针与字符串 147
8.4.1 字符串指针的定义 147
8.4.2 字符指针变量与字符数组的区别 148
8.4.3 指针数组与字符串应用 148
8.4.4 字符串指针作为函数的参数 149
8.5 指针与函数 150
8.5.1 指向函数的指针 150
8.5.2 返回指针值的函数(指针函数) 151
8.5.3 指针数组作为main函数的参数 152
习题 153
第9章 编译预处理 159
9.1 编译预处理的概念 159
9.2 宏定义 159
9.2.1 不带参数的宏定义 159
9.2.2 带参数的宏定义 160
9.3 文件包含 162
9.4 条件编译 162
习题 164
第10章 结构体与共用体 168
10.1 概述 168
10.2 结构体 168
10.2.1 结构体类型的定义方法 168
10.2.2 结构体变量的定义 169
10.2.3 结构体变量的引用 170
10.2.4 结构体变量的初始化 170
10.2.5 结构体数组 170
10.2.6 结构体指针 172
10.3 链表 175
10.3.1 链表的概念 175
10.3.2 链表的基本操作 176
10.4 联合 178
10.4.1 联合的概念 178
10.4.2 联合类型变量的引用 179
10.5 枚举类型变量的定义及引用 181
习题 182
第11章 位运算 188
11.1 位运算符和位运算 188
11.1.1 “按位取反”运算符(~) 188
11.1.2 “左移”运算符(<<) 189
11.1.3 “右移”运算符(>>) 189
11.1.4 “按位与”运算符(&) 189
11.1.5 “按位异或”运算符(^) 190
11.1.6 “按位或”运算符(|) 190
11.1.7 位运算赋值运算符 191
11.1.8 不同长度的数据进行位运算 191
11.2 位运算举例 191
11.3 位段 192
习题 194
第12章 文件 196
12.1 文件概述 196
12.2 文件指针 197
12.3 文件的打开与关闭 198
12.3.1 文件的打开(fopen函数) 198
12.3.2 文件的关闭(fclose函数) 199
12.4 文件的读写 199
12.4.1 读/写文件中的一个字符 200
12.4.2 读/写一个字符串 202
12.4.3 读/写一个数据块 204
12.4.4 文件的格式化读/写——fscanf()和fprintf()函数 205
12.5 文件的定位 206
12.5.1 rewind函数 206
12.5.2 随机读写与fseek()函数 206
12.5.3 ftell()函数 206
习题 207
附录 210
参考文献 220