第1章 为什么要学C语言 1
1.1引言 1
1.2游戏、黑客和C语言 1
1.3 C语言,不老的传说 3
1.4 C语言的爱与恨 5
1.5 C语言教给我们的事 5
1.6什么是“编程” 7
1.7本章小结 8
习题1 8
第2章 C数据类型 11
2.1常量与变量 11
2.1.1常量 11
2.1.2变量 13
2.2简单的屏幕输出 15
2.3数据类型 16
2.4如何计算变量或数据类型所占内存空间的大小 18
2.5变量的赋值和赋值运算符 20
2.6本章扩充内容 21
2.7本章知识点小结 23
2.8本章常见错误小结 24
习题2 24
本章实验题 25
第3章 简单的算术运算和表达式 27
3.1C运算符和表达式 27
3.1.1算术运算符和表达式 27
3.1.2复合的赋值运算符 29
3.1.3增1和减1运算符 31
3.2宏常量与宏替换 33
3.3 const常量 35
3.4自动类型转换与强制类型转换运算符 36
3.5常用的标准数学函数 39
3.6本章知识点小结 41
3.7本章常见错误小结 41
习题3 42
本章实验题 43
第4章 键盘输入和屏幕输出 45
4.1单个字符的输入/输出 45
4.1.1字符常量 45
4.1.2字符的输入/输出 46
4.2数据的格式化屏幕输出 48
4.3数据的格式化键盘输入 51
4.4本章扩充内容 55
4.5本章知识点小结 58
4.6本章常见错误小结 58
习题4 59
本章实验题 61
第5章 选择控制结构 63
5.1生活中与计算机中的问题求解方法 63
5.2算法的概念及其描述方法 64
5.2.1算法的概念 64
5.2.2算法的描述方法 65
5.3关系运算符与关系表达式 66
5.4用于单分支控制的条件语句 68
5.5用于双分支控制的条件语句 69
5.6条件运算符和条件表达式 70
5.7用于多分支控制的条件语句 70
5.8用于多路选择的switch语句 75
5.9逻辑运算符和逻辑表达式 79
5.10本章扩充内容 82
5.10.1程序测试 82
5.10.2对输入非法字符的检查与处理 90
5.10.3位运算符 92
5.11本章知识点小结 95
5.12本章常见错误小结 96
习题5 98
本章实验题 99
第6章 循环控制结构 101
6.1循环控制结构与循环语句 101
6.2计数控制的循环 109
6.3嵌套循环 112
6.4条件控制的循环 115
6.5流程的转移控制 125
6.5.1goto语句 125
6.5.2 break语句 126
6.5.3 continue语句 127
6.5.4穷举法编程实例 129
6.6本章扩充内容 132
6.6.1结构化程序设计的核心思想 132
6.6.2常用的程序调试与排错方法 133
6.6.3类型溢出 134
6.7本章知识点小结 136
6.8本章常见错误小结 137
习题6 138
本章实验题 143
第7章 函数 145
7.1分而治之与信息隐藏 145
7.2函数的定义 146
7.2.1函数的分类 146
7.2.2函数的定义 146
7.3向函数传递值和从函数返回值 148
7.3.1函数调用 148
7.3.2函数原型 150
7.3.3函数封装与防御性程序设计 152
7.3.4函数设计的基本原则 158
7.4函数的递归调用和递归函数 159
7.5变量的作用域和存储类型 162
7.5.1变量的作用域 162
7.5.2变量的存储类型 164
7.6模块化程序设计 171
7.6.1模块分解的基本原则 171
7.6.2自顶向下、逐步求精 172
7.6.3模块化程序设计实例 173
7.7本章扩充内容 179
7.8本章知识点小结 181
7.9本章常见错误小结 182
习题7 183
本章实验题 186
第8章 数组 189
8.1一维数组的定义和初始化 189
8.2二维数组的定义和初始化 193
8.3向函数传递一维数组 197
8.4排序和查找 202
8.5向函数传递二维数组 214
8.6本章知识点小结 218
8.7本章常见错误小结 219
习题8 220
本章实验题 226
第9章 指针 227
9.1变量的内存地址 227
9.2指针变量的定义和初始化 228
9.3间接寻址运算符 231
9.4按值调用与模拟按引用调用 234
9.5用指针变量作函数参数的程序实例 239
9.6函数指针及其应用 242
9.7本章知识点小结 249
9.8本章常见错误小结 250
习题9 250
本章实验题 252
第10章 字符串 253
10.1字符串常量 253
10.2字符串的存储 253
10.3字符指针 255
10.4字符串的访问和输入/输出 256
10.4.1如何访问字符串中的单个字符 256
10.4.2字符串的输入/输出 256
10.5字符串处理函数 261
10.6向函数传递字符串 264
10.7从函数返回字符串指针 268
10.8本章扩充内容 271
10.9本章知识点小结 278
10.10本章常见错误小结 279
习题10 281
本章实验题 283
第11章 指针和数组 285
11.1指针和一维数组间的关系 285
11.2指针和二维数组间的关系 292
11.3指针数组及其应用 299
11.3.1指针数组用于表示多个字符串 299
11.3.2指针数组用于表示命令行参数 305
11.4动态数组 306
11.4.1 C程序的内存映像 306
11.4.2动态内存分配函数 307
11.4.3长度可变的一维动态数组 309
11.4.4长度可变的二维动态数组 311
11.5本章扩充内容 313
11.5.1常见的内存错误及其对策 313
11.5.2缓冲区溢出攻击 321
11.6本章知识点小结 323
11.7本章常见错误小结 324
习题11 324
本章实验题 328
第12章 结构体和共用体 331
12.1从基本数据类型到抽象数据类型 331
12.2结构体的定义 332
12.2.1为什么要定义结构体类型 332
12.2.2结构体变量的定义 334
12.2.3用typedef定义数据类型 336
12.2.4结构体变量的初始化 337
12.2.5嵌套的结构体 337
12.2.6结构体变量的引用 339
12.2.7结构体所占内存的字节数 342
12.3结构体数组的定义和初始化 344
12.3.1结构体数组的定义 344
12.3.2结构体数组的初始化 344
12.4结构体指针的定义和初始化 346
12.4.1指向结构体变量的指针 346
12.4.2指向结构体数组的指针 347
12.5向函数传递结构体 347
12.6共用体 353
12.7枚举数据类型 356
12.8动态数据结构——单向链表 358
12.8.1问题的提出 358
12.8.2链表的定义 359
12.8.3单向链表的建立 360
12.8.4单向链表的删除操作 363
12.8.5单向链表的插入操作 364
12.9本章知识点小结 367
12.10本章常见错误小结 368
习题12 369
本章实验题 370
第13章 文件操作 373
13.1二进制文件和文本文件 373
13.2文件的打开和关闭 374
13.3按字符读写文件 376
13.4按格式读写文件 382
13.5按数据块读写文件 388
13.6本章扩充内容 392
13.6.1文件的随机读写 392
13.6.2标准输入/输出重定向 395
13.7本章知识点小结 397
13.8本章常见错误小结 397
习题13 397
本章实验题 398
附录A C关键字 401
附录B Visual C++下基本数据类型的取值范围 402
附录C C运算符的优先级与结合性 403
附录D常用字符与ASCII值对照表 404
附录E常用的ANSI C标准库函数 405
参考文献 414