第二版前言 1
第一版前言 1
第1章 C语言概述 1
1.1 C语言的发展简史和特点 1
序 1
1.2 C语言源程序的结构及其书写规则 2
1.2.1 C语言程序的总体结构 2
1.2.2 函数的一般结构与函数分类 4
1.2.3 源程序书写规则 6
1.3 C语言的语句和关键字 6
1.3.1 C语言的语句 6
1.3.2 C语言的关键字 7
1.4 Turbo C++ 3.0的基本操作 7
1.5.2 方法与技巧 11
1.6 本章小结 11
1.5 软件工程与方法 11
1.5.1 软件工程评述 11
1.7 习题 12
第2章 数据类型、运算符与表达式 13
2.1 程序设计概述 13
2.1.1 算法的概念和特性 14
2.1.2 算法设计的一般方法 14
2.1.3 算法描述 15
2.1.4 结构化程序设计方法 17
2.3.1 常量 18
2.3.2 变量与标识符 18
2.2 C语言的数据类型 18
2.3 常量和变量 18
2.4 整型数据 19
2.4.1 整型变量 19
2.4.2 整型常量 20
2.5 实型数据 20
2.5.1 实型变量 20
2.5.2 实型常量 20
2.6.1 字符常量 21
2.6 字符型数据 21
2.6.2 字符变量 22
2.6.3 字符串常量 23
2.7 算术运算与算术表达式 24
2.7.1 5种基本算术运算符 24
2.7.2 表达式和算术表达式 24
2.7.3 运算符的优先级与结合性 25
2.7.4 数据类型转换 25
2.8.2 复合赋值运算 26
2.8.1 赋值运算 26
2.8 赋值运算与赋值表达式 26
2.8.3 赋值表达式 27
2.9 C语言特有的运算 27
2.9.1 自增(++)、自减(--)运算 27
2.9.2 逗号运算(,)及其表达式 29
2.10 软件工程与方法 29
2.10.1 良好的源程序书写风格——见名知义 29
2.10.2 软件工程评述 29
2.11 本章小结 30
2.10.3 方法与技巧 30
2.12 习题 32
第3章 顺序结构程序设计 33
3.1 格式化输出——printf()函数 33
3.1.1 printf()函数的一般格式 33
3.1.2 格式指示符应用举例 36
3.1.3 使用说明 38
3.2 格式化输入——scanf()函数 38
3.2.1 scanf()函数的一般格式 38
3.2.2 格式指示符 40
3.2.3 数据输入操作 41
3.3 单个字符输入输出——getchar()和 putchar()函数 41
3.3.1 单个字符输putchar()函数 42
3.3.2 单个字符输入——getchar()函数 42
3.4 顺序结构程序设计 43
3.5 软件工程与方法 44
3.5.1 良好的源程序书写风格——左对齐 44
3.6 本章小结 45
3.5.2 软件工程评述 45
3.7 习题 46
第4章 选择结构程序设计 47
4.1 关系运算及其表达式 47
4.1.1 关系运算符及其优先级 48
4.1.2 关系表达式 48
4.2 逻辑运算及其表达式 48
4.2.1 逻辑运算及其优先级 49
4.2.2 逻辑表达式 49
4.3 if语句和条件运算 50
4.3.1 if语句 50
4.3.2 条件运算符 53
4.4 switch语句 54
4.5 选择结构程序设计 56
4.6 软件工程与方法 61
4.6.1 良好的源程序书写风格 61
4.6.2 软件工程评述 62
4.7 本章小结 63
4.6.3 方法与技巧 63
4.8 习题 64
第5章 循环结构程序设计 65
5.1 循环语句概述 65
5.2 for语句和while语句 66
5.2.1 for语句 66
5.2.2 while语句 68
5.3 直到型循环do-while语句 69
5.4 break语句与continue语句 70
5.5 循环结构程序设计 71
5.6 软件工程与方法 74
5.6.1 良好的源程序书写风格 74
5.6.2 软件工程评述 75
5.7 本章小结 75
5.8 习题 76
第6章 数组 77
6.1 1维数组的定义、存储和引用 78
6.1.1 1维数组的定义与存储 78
6.1.2 1维数组元素的引用 79
6.1.3 1维数组元素的初始化 80
6.2 2维数组的定义、存储和引用 80
6.2.1 2维数组的定义与存储 80
6.2.2 2维数组元素的引用 82
6.2.3 2维数组元素的初始化 82
6.3 字符数组与字符串 83
6.3.1 字符数组概述 83
6.3.2 字符数组的逐个字符处理 84
6.3.3 字符数组的整体处理 85
6.4 常用的字符串处理函数 87
6.4.1 字符串输入——gets()函数 87
6.4.2 字符串输出——puts()函数 88
6.4.3 字符串比较——strcmp()函数 88
6.4.4 拷贝字符串——strcpy()函数 89
6.4.5 连接字符串——strcat()函数 89
6.5 应用案例 90
6.4.8 将小写字母转换成大写——strupr()函数 90
6.4.7 将大写字母转换成小写——strlwr()函数 90
6.4.6 求字符串长度——strlen()函数 90
6.6 软件工程与方法 94
6.6.1 软件工程评述 94
6.6.2 方法与技巧 95
6.7 本章小结 95
6.8 习题 97
7.1 函数的定义与调用 98
第7章 函数与变量作用域 98
7.1.1 函数的定义 99
7.1.2 函数的返回值与函数类型 100
7.1.3 对被调用函数的说明和函数原型 100
7.1.4 函数调用与返回 102
7.1.5 参数传递——值传递方式 103
7.2 函数的嵌套调用与递归调用 104
7.2.1 函数的嵌套调用 104
7.2.2 函数的递归调用 105
7.3.1 内部函数(又称静态函数) 107
7.3.2 外部函数 107
7.3 内部函数与外部函数 107
7.3.3 多个源文件的编译和连接 109
7.4 内部变量与外部变量 110
7.4.1 内部变量 110
7.4.2 外部变量 110
7.5 变量的动态存储与静态存储 112
7.5.1 内部变量的存储方式 112
7.5.2 外部变量的存储方式及其作用域 114
7.6.1 良好的源程序书写风格——注释 115
7.6 软件工程与方法 115
7.6.2 软件工程评述 116
7.6.3 方法与技巧 116
7.7 本章小结 116
7.8 习题 118
第8章 编译预处理 119
8.1 宏定义与符号常量 119
8.1.1 无参宏定义 119
8.1.3 有参宏定义 121
8.1.2 符号常量 121
8.2.1 文件包含的概念 123
8.2 文件包含 123
8.2.2 文件包含的一般格式 124
8.2.3 使用文件包含的优点 124
8.2.4 说明 124
8.3 条件编译 125
8.3.1 #ifdef~#endif和#ifndef~#endif命令 125
8.4.2 方法与技巧 126
8.5 本章小结 126
8.4 软件工程与方法 126
8.4.1 软件工程评述 126
8.3.2 #if~#endif 126
8.6 习题 127
第9章 指针 128
9.1 指针和指针变量的概念 128
9.1.1 内存地址 128
9.1.3 变量值的存取 129
9.1.2 变量地址 129
9.1.4 指针与指针变量 130
9.2 指针变量及其应用 131
9.2.1 指针变量的定义与相关运算 131
9.2.2 指针变量作函数参数 133
9.3.1 维数组的指针与列指针变量 136
9.3.1 使用列指针变量引用1维数组的元素 136
9.3.2 数组作函数参数 138
9.4.1 2维数组的1维化处理 139
9.4 2维数组的指针与行指针变量 139
9.4.2 2维数组的指针 140
9.4.3 行指针变量——指向由n个元素组成的1维数组的指针变量 141
9.4.4 2维数组指针作函数参数 142
9.5 字符串的指针和指向字符串的指针变量 142
9.5.1 字符串的表示与引用 143
9.5.2 字符串指针作函数参数 144
9.6 指针数组与主函数main()的参数 145
9.6.1 指针数组 145
9.6.2 主函数main()的参数 147
9.6.3 指向指针的指针变量简介 148
9.7 返回指针值的函数 149
9.8 函数的指针和指向函数的指针变量简介 150
9.9 软件工程与方法 151
9.9.1 软件工程评述 151
9.9.2 方法与技巧 151
9.10 本章小结 153
9.11 习题 155
10.1.1 结构类型定义 156
第10章 结构类型与链表 156
10.1 结构类型与结构变量的定义 156
10.1.2 结构变量定义 157
10.2 结构变量的引用与初始化 158
10.3 结构数组 159
10.4 指向结构类型数据的指针 161
10.4.1 指向结构变量的指针 161
10.4.2 指向结构数组的指针 162
10.4.3 指向结构数据的指针作函数参数 163
10.5 链表处理——结构指针的应用 164
10.5.1 概述 164
10.5.2 创建一个新链表 165
10.5.3 对链表的插入操作 167
10.6 枚举型和共用型简介 169
10.6.1 枚举型 169
10.6.2 共用型 169
10.7 定义已有类型的别名 170
10.8 软件工程与方法 171
10.9 本章小结 172
10.10 习题 173
第11章 位运算 175
11.1 数值在计算机中的表示 175
11.2 位运算 176
11.2.1 位运算及其运算符 176
11.2.2 应用举例 177
11.3.2 说明 179
11.3.1 位段类型的概念与定义 179
11.3 位段简介 179
11.4 软件工程与方法 180
11.4.1 实现按位与( )、按位或(|)、按位异或(^)运算主要用途的方法 180
11.4.2 实现按位取反运算主要用途的方法 180
11.5 本章小结 180
11.6 习题 181
12.1.2 文件分类 182
12.1.1 文件与文件名 182
12.1 C语言文件概述 182
第12章 文件 182
12.1.3 C语言的流式文件 183
12.1.4 文件类型FILE 183
12.1.5 读文件与写文件 184
12.1.6 缓冲文件系统 184
12.2 文件的打开与关闭 184
12.2.1 文件的打开——fopen()函数 185
12.3 常用的文件读写操作库函数 186
12.3.1 读/写1个字符 186
12.2.2 文件的关闭——fclose()函数 186
12.3.2 读/写1个字符串——fgets()和fputs()函数 189
12.3.3 读/写1个数据块——fread()和fwrite()函数 191
12.3.4 对文件进行格式化读/写——fscanf()和fprintf()函数 191
12.3.5 读/写函数的选用原则 192
12.4 读写位置指针与文件定位 192
12.4.1 读写位置指针复位函数rewind() 192
12.4.2 随机读写与fseek()函数 192
12.5.1 ferror()函数 193
12.5.2 clearerr()函数 193
12.4.3 返回文件当前位置的函数ftell() 193
12.5 出错检测 193
12.6 软件工程与方法 194
12.6.1 软件工程评述 194
12.6.2 方法与技巧 194
12.7 本章小结 194
12.8 习题 195
13.1.1 FoxBASE+库文件的逻辑结构与存储结构 197
13.1 FoxBASE+及其模拟系统简介 197
第13章 综合应用——FoxBASE+模拟系统 197
13.1.2 模拟系统功能简介 199
13.2 算法设计要点与参考源程序 199
13.2.1 数据结构头文件(Foxsys.h) 199
13.2.2 源程序文件(Foxsys.c) 200
13.3 软件工程与方法 209
13.3.1 增强程序健壮性的基本方法——校验并规范化 209
13.4.1 理解题 210
13.4 C语言程序设计实训项目 210
13.3.2 处理可变长度数据的基本方法——动态处理 210
13.4.2 程序设计题 211
附录A ASCII编码表(基本部分) 212
附录B C语言的运算符和结合性 213
附录C 标准库函数 214
附录D 控制语句和编译预处理命令索引 219
附录E TC++ 3.0的安装、配置、多源文件的编译连接与程序调试 222
附录F 在VC++ 6.0环境中运行C语言程序的基本操作 227
参考文献 231