第1章 程序设计与C语言概述 1
1.1计算机程序 2
1.1.1什么是程序 2
1.1.2什么是计算机程序 3
1.1.3程序设计 4
1.2计算机语言 4
1.2.1语言 4
1.2.2什么是计算机语言 4
1.2.3计算机语言简史 4
1.2.4高级语言的执行方式 6
1.3C语言概述 7
1.3.1为什么叫“C语言” 7
1.3.2C语言的版本 7
1.3.3C语言的特点 7
1.3.4C语言的应用 9
1.4第一个C程序 9
1.4.1为什么选“Hello,World” 9
1.4.2“Hello,World”程序 10
1.4.3“Hello,World”程序解析 10
1.4.4C程序结构特点解析 10
1.4.5C程序是如何执行的 12
1.5Microsoft Visual C++6.0集成开发环境简介 13
1.5.1集成开发环境(IDE) 13
1.5.2集成开发环境的功能 13
1.5.3为什么选择Microsoft Visual C++6.0 14
1.5.4Microsoft Visual C++6.0的版本 15
1.5.5Microsoft Visual C++6.0的安装 15
1.5.6项目和工作区 18
1.5.7Visual C++6.0界面简介 19
1.5.8常用菜单项 21
1.5.9常用工具栏 22
1.5.10视图窗格简介 23
1.5.11代码颜色 26
1.5.12使用Visual C++6.0编写和运行“Hello,World”程序 26
第2章 数据及数据类型 30
2.1数据在计算机中的表示 31
2.1.1数据 31
2.1.2字符集和标识符 31
2.1.3数据在计算机中的表示 33
2.2数据类型 34
2.2.1数据类型的解释 35
2.2.2C语言中的数据类型 35
2.3常量 36
2.3.1整型常量 36
2.3.2实型常量 38
2.3.3字符常量 39
2.3.4字符串常量 40
2.3.5符号常量 41
2.4变量 42
2.4.1给变量命名 42
2.4.2变量定义 42
2.4.3变量名与变量的值 43
2.4.4变量初始化 44
2.4.5赋值 44
2.4.6整型变量 45
2.4.7实型变量 48
2.4.8字符变量 50
2.5数据的输入/输出 50
2.5.1什么是输入/输出 51
2.5.2C语言中输入/输出的实现 51
2.5.3格式化输出——printf()函数 51
2.5.4格式化输入——scanf()函数 56
2.5.5字符的输出——putchar()函数 60
2.5.6字符的输入——getchar()函数 61
2.5.7输出字符串——puts()函数 61
2.5.8读取字符串——gets()函数 62
第3章 运算符、表达式和语句 64
3.1运算符和表达式概述 65
3.1.1运算符 65
3.1.2表达式 65
3.1.3运算符的优先级和结合性 66
3.2算术运算符与算术表达式 67
3.2.1算术运算符 67
3.2.2算术表达式 68
3.2.3算术表达式的求值 68
3.3赋值运算符与赋值表达式 69
3.3.1简单赋值 69
3.3.2左值和右值 70
3.3.3复合赋值 71
3.3.4赋值运算符的副作用 71
3.3.5子表达式的求值顺序 72
3.4类型转换 72
3.4.1类型转换简述 72
3.4.2自动类型转换 73
3.4.3强制类型转换 76
3.5自增和自减运算符 78
3.5.1简化特殊的运算符 78
3.5.2使用自增和自减运算符注意事项 79
3.6逗号运算符与逗号表达式 79
3.6.1逗号表达式 80
3.6.2使用逗号表达式注意事项 80
3.7关系运算符与关系表达式 81
3.7.1关系运算符 81
3.7.2关系表达式的值 81
3.7.3使用关系运算符注意事项 81
3.8逻辑运算符与逻辑表达式 82
3.8.1逻辑运算符 82
3.8.2逻辑表达式 82
3.8.3“短路”计算 83
3.9位运算符 83
3.9.1C语言的位运算符 83
3.9.2按位与运算符 84
3.9.3按位或运算符 85
3.9.4按位异或运算符 85
3.9.5按位取反运算符 86
3.9.6左移运算符 87
3.9.7右移运算符 88
3.9.8位运算中的整数提升 88
3.9.9位运算赋值运算符 89
3.10sizeof运算符 89
3.10.1使用sizeof 89
3.10.2sizeof的结果 90
3.10.3sizeof的优先级 91
3.10.4各种类型数据长度的计算 91
3.11语句 91
3.11.1什么是语句 92
3.11.2语句类型 92
3.11.3赋值语句 93
第4章 流程控制 95
4.1流程的表示方法 96
4.1.1自然语言表示法 96
4.1.2流程图表示法 96
4.2顺序结构 97
4.2.1什么是顺序结构 97
4.2.2顺序结构程序设计方法 98
4.3分支结构 100
4.3.1什么是分支结构 100
4.3.2if语句的解释 101
4.3.3if语句的3种形式 101
4.3.4嵌套的if语句 105
4.3.5应用if语句注意事项 106
4.3.6条件运算符的解释 109
4.3.7应用条件运算符注意事项 110
4.3.8switch语句的解释 111
4.3.9应用switch语句注意事项 113
4.3.10分支结构程序设计方法 113
4.4循环结构 116
4.4.1什么是循环结构 116
4.4.2关于while语句的解释 116
4.4.3应用while语句注意事项 117
4.4.4关于do…while语句的解释 118
4.4.5应用do…while语句时防止死循环 119
4.4.6不确定循环和计数循环 119
4.4.7关于for语句的解释 120
4.4.8使用for语句注意事项 121
4.4.9选择哪种循环实现方式 123
4.4.10循环中的循环 124
4.4.11循环结构程序设计方法 125
4.5跳转结构 128
4.5.1什么是跳转结构 128
4.5.2break语句 129
4.5.3continue语句 131
4.5.4goto语句 132
4.5.5C语言中保留goto语句的原因 133
第5章 函数 136
5.1函数与结构化程序设计 137
5.1.1函数是“黑盒子” 137
5.1.2数学函数与C语言函数 138
5.1.3C语言函数中的库函数 139
5.1.4结构化的程序设计 139
5.2函数的使用 140
5.2.1函数的定义 140
5.2.2函数的类型 141
5.2.3函数的返回值 142
5.2.4函数的参数 145
5.2.5函数的调用 148
5.2.6函数的嵌套——蒙特卡罗法求圆周率π 151
5.3递归 153
5.3.1递归的定义 154
5.3.2使用递归的原则 155
5.3.3分治法与汉诺塔 162
5.3.4回溯法与八皇后问题 164
5.4变量的作用域 168
5.4.1局部变量 168
5.4.2局部变量的作用域 168
5.4.3全局变量 169
5.5变量的存储类型 171
5.5.1auto变量 172
5.5.2static局部变量 173
5.5.3register变量 174
5.5.4extern变量 176
5.5.5static外部变量 178
5.6执行多文件程序 179
5.6.1内部函数 179
5.6.2外部函数 179
5.6.3多文件程序实例 181
第6章 数组与字符串 183
6.1一维数组的使用 184
6.1.1数组概念的引入——中国古代军队编制 184
6.1.2数组元素的使用 185
6.1.3数组的初始化 185
6.1.4小心访问越界 187
6.1.5数组应用举例 187
6.2数组类型的参数 190
6.2.1以数组作为参数 190
6.2.2避免数组被修改 191
6.2.3函数返回数组的两种方法 192
6.3多维数组的使用 195
6.3.1从一维到二维 195
6.3.2初始化及使用二维数组 195
6.3.3多维数组应用举例 197
6.4字符数组 201
6.4.1定义与初始化 201
6.4.2字符串的使用 201
6.4.3字符串的处理——大小写转换函数 203
6.4.4字符串的处理——字符串比较函数 203
6.4.5字符串的处理——字符串长度的获得 204
6.4.6字符串的处理——字符串连接函数 204
6.4.7字符串的处理——字符串复制函数 205
6.4.8字符串应用举例 207
第7章 指针 210
7.1指针与地址 211
7.1.1内存和地址的概念 211
7.1.2定义指针变量 213
7.1.3使用指针变量 214
7.2指针与数组 217
7.2.1用指针访问数组元素 217
7.2.2直接插入排序 219
7.2.3用指针操作多维数组 220
7.2.4Z字形编排过程 223
7.2.5复杂指针运算的解析 225
7.3使用字符串指针变量 226
7.3.1指向字符串的指针 226
7.3.2与字符数组的比较 230
7.3.3如何输出其自身的程序 233
7.4指针与函数 234
7.4.1将指针用作函数参数 234
7.4.2指向函数的指针 236
7.4.3指针对于指令的访问是受限制的 238
7.4.4使用指向函数指针的语法来实现编程 238
7.4.5返回值为指针的函数 240
7.5复合多维指针的使用 244
7.5.1指针数组的使用 244
7.5.2指向指针的指针 247
7.5.3main()函数的参数 249
7.5.4main()函数参数应用实例 249
第8章 预处理 252
8.1预处理器概述 253
8.1.1预处理器的工作方式 253
8.1.2使用Microsoft Visual C++6.0生成预编译程序 254
8.1.3预处理指示分类 256
8.1.4预处理指示规则 256
8.2宏定义 257
8.2.1无参宏定义 257
8.2.2带参宏定义 258
8.2.3带参宏定义与函数 259
8.2.4使用宏时注意事项 261
8.2.5至关重要的圆括号 262
8.2.6预定义宏 263
8.3条件编译 264
8.3.1条件编译的形式 264
8.3.2条件编译的作用 267
8.4文件包含 268
8.4.1头文件 268
8.4.2文件包含的形式 269
8.4.3使用文件包含时注意事项 270
8.5其他指示 271
8.5.1#error指示 271
8.5.2#line指示 271
8.5.3#pragma指示 272
8.6“#”和“##”运算符 272
8.6.1“#”运算符 272
8.6.2“##”运算符 273
8.7预处理实例 273
8.7.1简单计算器程序 273
8.7.2程序分析 276
8.7.3程序中的预处理 277
第9章 结构体与共用体 279
9.1结构体 280
9.1.1什么是结构体 280
9.1.2结构体实例——《水浒传》中的一百单八将 280
9.1.3结构体类型与结构体变量 281
9.1.4结构体变量的定义 282
9.1.5定义结构体变量注意事项 283
9.1.6结构体变量的初始化 283
9.1.7结构体变量的引用 284
9.1.8引用结构体变量注意事项 285
9.1.9结构体数组 286
9.1.10指向结构体的指针 289
9.1.11结构体与函数 291
9.1.12位域 298
9.2共用体 301
9.2.1什么是共用体 301
9.2.2共用体与结构体 302
9.2.3共用体变量的初始化 303
9.2.4使用共用体注意事项 304
9.2.5结构体和共用体综合实例——“梁山好汉的比武大会” 305
9.3枚举 308
9.3.1什么是枚举 308
9.3.2枚举变量的定义与取值 309
9.3.3“表里不一”的类型 310
9.3.4枚举应用举例——“向你问好的程序” 311
9.4用户自定义类型——typedef 312
9.4.1什么是typedef 312
9.4.2创建typedef简单方法 313
9.4.3typedef和#define 313
9.4.4typedef的两个重要作用 314
第10章 文件 316
10.1理解文件的基本概念 317
10.1.1什么是文件 317
10.1.2什么是流 318
10.1.3处理文件的方法 319
10.1.4缓存 320
10.1.5文本文件和二进制文件 321
10.2文件的打开与关闭 321
10.2.1文件类型指针 321
10.2.2文件的打开 323
10.2.3文件操作类型及应用 323
11.2.4文件的关闭 325
10.3文件的基本操作 327
10.3.1文件中的字符读/写 327
10.3.2按字符进行读/写文件——文件复制的功能 329
10.3.3文件中字符串读/写 330
10.3.4其他文件读/写函数 334
10.3.5文件位置定位 334
10.3.6数据块的读/写 336
10.4处理二进制文件 338
10.5文件缓冲区处理 341
10.5.1文件缓冲区的清除 341
10.5.2文件缓冲区的设置 343
10.6文件操作的检测 345
第11章 动态数据结构 347
11.1动态内存管理 348
11.1.1为什么使用动态内存分配 348
11.1.2如何实现动态内存管理 348
11.1.3关于动态内存分配的说明 351
11.2链表概述 352
11.2.1单向链表与数组 353
11.2.2单向链表——老鹰捉小鸡 353
11.2.3链表存储方式优缺点 354
11.2.4不同单向链表间的合并 354
11.3链表的操作及实现 355
11.3.1链表的建立 355
11.3.2链表的遍历 358
11.3.3链表结点的删除 359
11.3.4链表结点的增加 361
11.3.5结点删除函数中的free()函数 363
11.3.6链表的应用实例 363
11.4栈 364
11.4.1栈定义——散乱的盘子 364
11.4.2栈的特点 365
11.4.3栈工作原理 365
11.4.4栈与链表 366
11.4.5栈的应用举例——括号匹配问题 368
11.5队列 369
11.5.1队列的特点 369
11.5.2队列定义——排队等待买票的人 370
11.5.3队列应用 370
11.5.4队列与栈的不同 370
11.5.5队列创建 370
11.5.6基于链表实现的队列——链式队列 371
11.5.7队列的实现 372
附录Ⅰ C语言运算符及其优先级汇总表 376
附录Ⅱ 标准ASCII码字符集 378
附录Ⅲ 编程能力的培养与提高 380
附录Ⅳ 程序人生 395
参考文献 415