第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.3 C语言概述 7
1.3.1 为什么叫“C语言” 7
1.3.2 C语言的版本 7
1.3.3 C语言的特点 7
1.3.4 C语言的应用 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.4 C程序结构特点解析 10
1.4.5 C程序是如何执行的 12
1.5 Microsoft 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.4 Microsoft Visual C++ 6.0的版本 15
1.5.5 Microsoft Visual C++ 6.0的安装 15
1.5.6 项目和工作区 18
1.5.7 VisualC++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.2 C语言中的数据类型 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.2 C语言中输入/输出的实现 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.1 C语言的位运算符 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.10 sizeof运算符 89
3.10.1 使用sizeof 89
3.10.2 sizeof的结果 90
3.10.3 sizeof的优先级 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.2 if语句的解释 101
4.3.3 if语句的3种形式 101
4.3.4 嵌套的if语句 105
4.3.5 应用if语句注意事项 106
4.3.6 条件运算符的解释 109
4.3.7 应用条件运算符注意事项 110
4.3.8 switch语句的解释 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.2 break语句 129
4.5.3 continue语句 131
4.5.4 goto语句 132
4.5.5 C语言中保留goto语句的原因 133
第5章 函数 136
5.1 函数与结构化程序设计 137
5.1.1 函数是“黑盒子” 137
5.1.2 数学函数与C语言函数 138
5.1.3 C语言函数中的库函数 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.1 auto变量 172
5.5.2 static局部变量 173
5.5.3 register变量 174
5.5.4 extern变量 176
5.5.5 static外部变量 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.4 Z字形编排过程 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.3 main()函数的参数 249
7.5.4 main()函数参数应用实例 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.3 typedef和#define 313
9.4.4 typedef的两个重要作用 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
参考文献
· · · · · · (
收起)