第1章 C程序设计的初步知识 1
1.1 简单C程序的组成和格式 1
1.2 十进制整型数和实型数 2
1.2.1 常量 2
1.2.2 十进制整型常量 3
1.2.3 浮点常量 3
1.2.4 用定义一个符号名的方法来代表一个常量 3
1.3 标识符 4
1.3.1 关键字 4
1.3.2 预定义标识符 4
1.3.3 用户标识符 4
1.4 整型变量和实型变量 5
1.4.1 变量 5
1.4.2 整型变量 5
1.4.3 浮点型变量 5
1.4.4 给变量置初值 6
1.4.5 定义不可变的变量 7
1.5 可进行算术运算的表达式 7
1.5.1 基本的算术运算符 7
1.5.2 运算符的优先级与结合性和算术表达式 8
1.5.3 强制类型转换表达式 9
1.6 赋值表达式 9
1.6.1 赋值运算符和赋值表达式 9
1.6.2 复合的赋值表达式 10
1.6.3 赋值运算中的类型转换 11
1.7 自加、自减运算符和逗号运算符 11
1.7.1 自加运算符(++)和自减运算符(--) 11
1.7.2 逗号运算符和逗号表达式 12
习题 12
第2章 简单的C语句及其顺序程序结构 15
2.1 赋值语句 15
2.2 整型数和实型数的简单输入和输出语句 16
2.2.1 调用printf函数输出数据到终端 16
2.2.2 调用scanf函数从终端键盘输入数据 17
2.3 复合语句和空语句 19
2.3.1 复合语句 19
2.3.2 空语句 19
习题 20
第3章 分支结构 22
3.1 关系运算和逻辑运算 22
3.1.1 C语言中的逻辑值 22
3.1.2 关系运算符和关系表达式 22
3.1.3 逻辑运算符和逻辑表达式 24
3.2 用if语句构成的分支结构 25
3.2.1 if语句 25
3.2.2 嵌套的if语句 29
3.3 由条件表达式构成的分支结构 33
3.4 由switch语句和break语句构成的分支结构 34
3.4.1 switch语句 34
3.4.2 switch语句的执行过程 35
3.4.3 在switch语句体中使用break语句 35
习题 37
第4章 循环结构 40
4.1 用for语句构成的循环结构 40
4.1.1 for循环的一般形式 40
4.1.2 for循环的执行过程 40
4.1.3 有关.for语句的说明 41
4.2 用while语句构成的循环结构 45
4.2.1 while循环的一般形式 45
4.2.2 while循环的执行过程 46
4.3 用do-while语句构成的循环结构 47
4.3.1 do-while循环的一般形式 47
4.3.2 do-while循环的执行过程 48
4.4 循环结构的嵌套 49
4.5 几种循环结构的比较 51
4.6 break和continue语句在循环体中的作用 52
4.6.1 break语句 52
4.6.2 continue语句 52
4.7 语句标号和goto语句 53
4.7.1 语句标号 53
4.7.2 goto语句 53
4.8 程序举例 54
习题 59
第5章 函数的初步知识 61
5.1 库函数 61
5.2 函数的定义和返回值 62
5.2.1 函数定义的语法 62
5.2.2 函数的返回值 63
5.3 函数的调用 64
5.3.1 函数的两种调用方式 64
5.3.2 函数调用时的语法要求 64
5.4 函数原型的说明 65
5.4.1 函数原型的说明语句 65
5.4.2 函数原型说明语句的位置 66
5.5 调用函数和被调用函数之间的数据传递 67
5.6 程序举例 69
习题 73
第6章 算法和结构化程序设计 76
6.1 程序和程序设计 76
6.1.1 程序 76
6.1.2 程序设计 76
6.2 算法 77
6.3 结构化程序设计和模块化结构 78
6.3.1 结构化程序 78
6.3.2 模块化结构 80
6.4 怎样评价一个程序 80
习题 82
第7章 字符数据和字符数据处理 83
7.1 字符常量 83
7.1.1 常规字符常量 83
7.1.2 转义字符常量 83
7.1.3 可对字符量进行的运算 84
7.2 字符变量 84
7.3 字符的输入和输出 84
7.3.1 调用printf和scanf函数 84
7.3.2 调用putchar和getchar函数 85
7.3.3 调用getche和putche函数 85
7.3.4 调用getch和putch函数 86
7.4 程序举例 86
习题 90
第8章 地址和指针 92
8.1 什么是地址?什么是指针? 92
8.2 指针变量的定义和指针变量的基类型 93
8.3 给指针变量赋值 93
8.3.1 使指针指向一个对象 93
8.3.2 给指针变量赋“空”值 94
8.4 对指针变量的操作 94
8.4.1 通过指针或地址来引用一个存储单元 94
8.4.2 移动指针 96
8.4.3 指针比较 98
8.5 函数之间地址值的传递 98
8.5.1 地址或指针变量作为实参 98
8.5.2 在被调用函数中直接改变调用函数中的变量的值 100
8.5.3 函数返回地址值 101
习题 101
第9章 一维数组 103
9.1 一维数组的定义和一维数组元素的引用 103
9.1.1 一维数组的定义 103
9.1.2 一维数组元素的引用 104
9.1.3 一维数组的初始化 105
9.1.4 通过赋初值定义数组的大小 105
9.2 一维数组的应用举例(一) 105
9.3 一维数组和指针 110
9.3.1 一维数组和数组元素的地址 110
9.3.2 通过数组的首地址引用数组元素 110
9.3.3 通过指针来引用一维数组元素 111
9.3.4 用指针带下标的形式引用一维数组元素 112
9.4 一维数组名或数组元素作实参 112
9.4.1 数组元素作实参 112
9.4.2 数组名作实参 112
9.4.3 数组元素地址作为实参 114
9.5 一维数组应用举例(二) 115
习题 127
第10章 二维数组 129
10.1 二维数组的定义和二维数组元素的引用 129
10.1.1 二维数组的定义 129
10.1.2 二维数组元素的引用 130
10.1.3 二维数组的初始化 130
10.1.4 通过赋初值定义二维数组的大小 131
10.2 二维数组的应用举例(一) 132
10.3 二维数组和指针 134
10.3.1 二维数组和数组元素的地址 134
10.3.2 通过地址来引用二维数组元素 135
10.3.3 通过建立指针数组来引用二维数组元素 136
10.3.4 通过建立行指针来引用二维数组元素 137
10.4 通过建立指针数组和一维数组来构造二维数组 137
10.5 二维数组名和指针数组作为实参 140
10.5.1 二维数组名作为实参 140
10.5.2 指针数组作为实参 141
10.6 二维数组应用举例(二) 141
习题 146
第11章 字符串 149
11.1 用一维字符数组来存放字符串 149
11.1.1 通过赋初值的方式给一维字符数组赋字符串 150
11.1.2 在C程序执行过程中给一维字符数组赋字符串 151
11.2 使用指针指向一个字符串 151
11.2.1 通过赋初值的方式使指针指向字符串 151
11.2.2 通过赋值运算使指针指向字符串 152
11.2.3 用字符数组作为字符串和用指针指向的字符串之间的区别 152
11.3 字符串的输入和输出 153
11.3.1 输入和输出字符串时的必要条件 153
11.3.2 逐个字符输入和输出 153
11.3.3 用格式说明符“?”进行整串输入和输出 154
11.3.4 调用gets和puts函数在终端按行输入输出字符 155
11.4 字符串数组 156
11.5 用于字符串处理的函数 158
11.6 程序举例 162
习题 167
第12章 对函数的进一步讨论 170
12.1 传给main()函数的参数 170
12.2 通过实参向函数传递函数名或指向函数的指针 172
12.3 函数的递归调用 174
习题 181
第13章 C语言中用户标识符的作用域和存储类 183
13.1 内部变量、外部变量和存储分类 183
13.1.1 用户标识符的作用域 183
13.1.2 内部变量、外部变量和存储分类 183
13.2 内部变量及其作用域和生存期 184
13.2.1 auto变量 184
13.2.2 register变量 185
13.2.3 静态存储类的内部变量 186
13.3 外部变量及其作用域和生存期 187
13.3.1 外部变量的作用域和生存期 187
13.3.2 在同一编译单位内使用extern说明符 188
13.3.3 在不同编译单位内使用extern说明符 189
13.3.4 静态外部变量 190
13.4 函数的存储分类 190
13.4.1 用extern说明函数 190
13.4.2 用static说明函数 191
13.5 在Turbo C集成环境下连接多个编译单位的方法 191
习题 193
第14章 编译预处理 195
14.1 宏替换 195
14.1.1 不带参数的宏定义 195
14.1.2 带参数的宏定义 196
14.1.3 终止宏定义 198
14.2 文件包含 198
14.3 条件编译 199
14.4 #line行 200
习题 201
第15章 动态存储分配 203
15.1 malloc函数和free函数 203
15.2 calloc函数 205
15.3 realloc函数 206
习题 207
第16章 结构体类型和用户定义类型 209
16.1 用typedef说明一种新类型名 209
16.2 结构体类型 210
16.3 结构体类型的说明 211
16.4 结构体类型的变量、数组和指针的定义 212
16.5 给结构体变量、数组赋初值 214
16.6 引用结构体类型变量中的数据 215
16.7 通过结构体组成较复杂的存储结构 218
16.8 函数之间结构体变量的数据传递 220
16.8.1 向函数传递结构体变量的成员 220
16.8.2 向函数传递结构体变量 220
16.8.3 传递结构体的地址 221
16.8.4 函数值为结构体类型 222
16.8.5 函数的返回值可以是指向结构体变量的指针类型 222
16.9 利用结构体变量构成链表 223
16.9.1 结构体中含有可以指向本结构体的指针成员 223
16.9.2 动态链表的概念 224
16.9.3 单向链表 225
16.9.4 单向环形链表 231
16.9.5 双向链表 233
习题 236
第17章 C语言中的整型数和整型变量 239
17.1 十进制数和二、八、十六进制数之间的转换 239
17.1.1 十进制数和二进制数之间的转换 239
17.1.2 十进制数和八进制数之间的转换 239
17.1.3 十进制数和十六进制数之间的转换 240
17.1.4 二进制数与八进制数、十六进制数间的转换 241
17.2 整数在内存中的存储形式 242
17.2.1 正整数 242
17.2.2 负整数 242
17.2.3 无符号整数 242
17.3 C语言中的八进制数和十六进制数 243
17.4 C语言中的整数类型 243
17.5 C语言中的整数类型之间的转换 244
习题 244
第18章 共用体、位段结构和枚举类型 246
18.1 共用体 246
18.1.1 共用体类型的说明和变量定义 246
18.1.2 共用体变量的引用 247
18.1.3 共用体应用举例 248
18.2 位段结构 250
18.3 枚举类型 253
习题 255
第19章 位运算 257
19.1 位运算符和位运算 257
19.1.1 位运算符 257
19.1.2 位运算符的运算功能 257
19.2 位运算的简单应用 260
习题 262
第20章 在终端上按格式进行数据的输入和输出 264
20.1 调用printf()在终端上按格式进行数据的输出 264
20.1.1 printf()函数的一般调用形式 264
20.1.2 printf()函数中常用的格式说明 264
20.1.3 调用printf()函数时的注意事项 268
20.2 调用scanf()在终端上按格式进行数据的输入 269
20.2.1 scanf()函数的一般调用形式 269
20.2.2 scanf()函数中常用的格式说明 269
20.2.3 通过scanf函数从键盘输入数据 270
习题 273
第21章 文件 276
21.1 文件的概念 276
21.2 文件指针 277
21.3 打开文件 277
21.4 关闭文件 279
21.5 getc(fgetc)函数和putc(fputc)函数 279
21.6 判文件结束函数feof 281
21.7 fscanf函数和fprintf函数 282
21.8 fgets函数和fputs函数 285
21.9 fread函数和fwrite函数 285
21.10 文件定位函数 287
21.10.1 fseek函数 287
21.10.2 ftell函数 289
21.10.3 rewind函数 289
习题 289
附录 291
附录A C语言的关键字 291
附录B 双目算术运算中两边运算量类型转换规律 291
附录C 运算符的优先级和结合性 291
附录D 常用字符与ASCⅡ代码对照表 292
附录E Turbo C 2.0常用库函数 293
附录F 简单的上机操作和程序的调试 297
参考文献 304