第1章 程序设计ABC 1
1.1计算机与人 1
1.2计算机与程序设计语言 3
1.3程序设计语言的故事 5
1.4 C语言的故事 6
1.5程序设计语言的工作原理 10
1.5.1运行 10
1.5.2内存 12
1.6本章小结 12
习题1 12
第2章 数据类型、运算符与表达式 13
2.1一个简单的C程序例子 13
2.2 C程序常见符号分类 15
2.3数据类型 16
2.3.1为什么引入数据类型 16
2.3.2从基本数据类型到抽象数据类型 17
2.3.3类型修饰符 17
2.3.4标识符命名 19
2.4常量 19
2.4.1整型常量 20
2.4.2实型常量 20
2.4.3字符常量 21
2.4.4字符串常量 21
2.4.5宏常量 21
2.4.6枚举常量 23
2.5变量 23
2.5.1变量的定义与初始化 23
2.5.2 const类型修饰符 24
2.5.3使用变量时的注意事项 25
2.6常用运算符及表达式 31
2.6.1运算符的优先级与结合性 31
2.6.2算术运算符 31
2.6.3关系运算符 33
2.6.4逻辑运算符 34
2.6.5赋值运算符 35
2.6.6增1和减1运算符 36
2.6.7类型强制转换运算符 37
2.6.8位运算符 38
2.6.9逗号运算符 40
2.7赋值和表达式中的类型转换 41
2.8本章小结 42
习题2 43
第3章 键盘输入与屏幕输出 44
3.1 C语句分类 44
3.2表达式语句 44
3.3复合语句和空语句 45
3.4基本的输入/输出操作 46
3.4.1字符输入/输出 46
3.4.2格式输入/输出 48
3.4.3使用函数scanf()时需要注意的问题 53
3.5本章小结 60
习题3 61
第4章 程序的控制结构 64
4.1算法及其描述方法 64
4.1.1算法的概念 64
4.1.2算法的描述方法 65
4.2顺序结构 67
4.2.1顺序结构的流程图表示 67
4.2.2应用程序举例 68
4.3选择结构 71
4.3.1应用场合 71
4.3.2选择结构的流程图表示 71
4.3.3条件语句 72
4.3.4开关语句 80
4.4循环结构 84
4.4.1应用场合 84
4.4.2循环结构的流程图表示 85
4.4.3循环语句 85
4.4.4单重循环程序实例 87
4.4.5嵌套循环及其程序实例 99
4.5流程转移控制语句 103
4.5.1 goto语句 103
4.5.2 break与continue语句 103
4.5.3程序实例 105
4.6程序调试与排错 110
4.6.1程序中常见的出错原因 110
4.6.2程序调试与排错的基本方法 111
4.6.3使用getchar()需要注意的问题 113
4.7结构化程序设计方法简介 119
4.7.1关于goto论战 119
4.7.2结构化程序设计的核心思想 119
4.7.3“自顶向下、逐步求精”的程序设计方法 120
4.8本章小结 123
习题4 124
第5章 函数 132
5.1程序设计的艺术 132
5.2函数的定义与使用 133
5.2.1函数的分类 133
5.2.2函数的定义 134
5.2.3函数的调用、参数传递和返回值 135
5.2.4函数原型 136
5.2.5主函数main()的特殊性 137
5.3变量的作用域和存储类型 138
5.3.1变量的作用域 138
5.3.2全局变量 140
5.3.3变量的存储类型 141
5.4函数封装 143
5.5预处理指令 144
5.5.1 #include 144
5.5.2 #define和#undef 145
5.5.3条件编译 146
5.6使用assert()查错 147
5.7模块和链接 148
5.8模块化程序设计方法简介 151
5.8.1模块划分的原则 151
5.8.2应用实例——“猜数”游戏 152
5.9递归 154
5.9.1递归问题的提出 154
5.9.2递归函数 155
5.10本章小结 159
习题5 159
第6章 数组 164
6.1数组类型的应用场合 164
6.2数组的定义、引用和初始化 164
6.2.1数组的定义 164
6.2.2数组的引用 166
6.2.3数组的初始化 166
6.2.4程序实例 167
6.3向函数传递一维数组 174
6.4向函数传递二维数组 184
6.5字符数组 188
6.5.1字符数组与字符串的关系 188
6.5.2字符数组的输入/输出 190
6.5.3字符串处理函数 191
6.5.4应用实例 192
6.6本章小结 193
习题6 194
第7章 指针 200
7.1指针概述 200
7.1.1指针的概念 200
7.1.2为什么引入指针的概念 202
7.1.3指针变量作函数参数 204
7.1.4字符指针作函数参数 212
7.2指针和数组间的关系 216
7.2.1一维数组的地址和指针 217
7.2.2二维数组的地址和指针 224
7.3指针数组 229
7.4函数指针 233
7.5带参数的main()函数 239
7.6动态数组的实现 240
7.6.1 C程序的内存映像 240
7.6.2动态内存分配函数 241
7.6.3一维动态数组的实现 243
7.6.4二维动态数组的实现 244
7.7使用const修饰指针变量 245
7.8代码风格 246
7.8.1程序版式 247
7.8.2命名规则 249
7.8.3函数设计 250
7.8.4防御性程序设计 250
7.9本章小结 251
习题7 252
第8章 结构体与共用体 258
8.1结构体的应用场合 258
8.2结构体类型与结构体变量 260
8.2.1结构体类型的声明 260
8.2.2用typedef定义结构体类型 261
8.2.3结构体变量的定义 261
8.2.4指向结构体变量的指针 264
8.2.5结构体变量的引用和初始化 264
8.3结构体数组 267
8.3.1结构体数组的定义 267
8.3.2结构体数组程序实例 268
8.3.3指向结构体数组的指针 271
8.4向函数传递结构体 272
8.5动态数据结构 274
8.5.1问题的提出 274
8.5.2链表的定义 275
8.5.3链表的特点及操作原理 276
8.5.4链表的建立 277
8.5.5链表的删除操作 279
8.5.6链表的插入操作 281
8.6共用体 283
8.7本章小结 285
习题8 286
第9章 文件操作 290
9.1计算机中的流 290
9.2文件 291
9.2.1存储设备的使用 291
9.2.2目录 292
9.2.3文件格式 292
9.3基本文件操作 293
9.3.1基本文件操作函数 293
9.3.2错误处理 296
9.3.3程序示例 297
9.3.4基本文件操作的意义 303
9.4高级文件操作 303
9.4.1文件的打开与关闭 303
9.4.2文件的读/写 304
9.4.3程序实例 305
9.4.4标准输入与标准输出 307
9.5本章小结 308
习题9 308
第10章 C程序设计常见错误及解决方案 309
条款1:使用未初始化和未赋值的变量 309
条款2:不考虑数值溢出的可能 310
条款3:不用sizeof()获得类型或变量的字长 310
条款4:假定类型取值范围 310
条款5:期望两个整数的运算自动得出浮点数的结果 311
条款6:不预先判断除数是否为 311
条款7:混淆“&,|”与“&&,||” 312
条款8:使用依赖编译器求值顺序的语句 312
条款9:使用依靠算符优先级的表达式 313
条款10:表达式过于复杂 313
条款11:用“=”时误用“=” 313
条款12:用“=”比较两个浮点数 314
条款13:使用幻数 314
条款14: printf()和scanf()中格式控制字符串与参数类型不匹配 315
条款15:循环或判断语句以“;”结尾 315
条款16:在循环体内改变循环结束条件 315
条款17: case分支不用break结束 316
条款18: switch-case语句没有default分支 316
条款19:不声明函数原型 316
条款20:不定义函数参数或返回值的类型 317
条款21:有返回值的函数不用return指明返回值 317
条款22:调用函数后,不检查函数是否正确执行 317
条款23:变量、函数和模块功能不单一 317
条款24:函数过长 318
条款25:函数的参数过于复杂 318
条款26:返回指向局部变量的指针 318
条款27:随意修改全局变量的值 318
条款28:数组下标越界 318
条款29:字符串没有‘\0’终结符 319
条款30:使用不限制最大处理长度的字符串处理函数 319
条款31:用malloc()申请的内存不用free() 319
条款32:使用已经被free()的指针 319
条款33:文件打开后不主动关闭 319
条款34:成对函数不在同一个模块或函数内调用 319
条款35:头文件不加宏定义锁 320
条款36:忽略编译器警告 320
条款37:用“复制+粘贴”的方式复用代码 320
条款38:在字符串和注释以外的地方使用全角字符 320
条款39:代码风格不佳 320
条款40:代码与注释不一致 321
附录A常用基本概念、名词、语句、运算符、数据类型和算法索引表 322
附录B C关键字 328
附录C Visual C++下各数据类型所占字节数和取值范围 328
附录D C运算符的优先级与结合性 329
附录E ASCII码的字符编码 330
附录F ASCII码和ASCII扩展码字符表 331
附录G 常用的ANSI C标准库函数 332
参考文献 339