第1篇 入门篇 2
第1章 初识C语言 2
1.1 C语言介绍 3
1.1.1 简述编程语言 3
1.1.2 了解C语言发展史 3
1.1.3 C语言程序的特点 4
1.2 C语言程序的组成与格式 5
1.2.1 组成C程序的各部分 5
1.2.2 C语言的编程格式 5
1.3 编程开发环境 6
1.3.1 Visual C++6.0简介 6
1.3.2 使用Visual C++6.0编程 13
1.3.3 使用Turbo C 2.0编程 17
1.4 综合应用 20
1.4.1 输出名言 20
1.4.2 求和程序 21
1.5 本章小结 21
1.6 跟我上机 22
第2章 编写一个简单的C程序 23
2.1 自己动手创建程序 24
2.1.1 创建工程 24
2.1.2 添加源文件 26
2.1.3 编写代码 26
2.1.4 编译运行 27
2.2 分析C程序各组成部分 27
2.3 查看C程序执行过程 30
2.3.1 单步调试 30
2.3.2 断点调试 31
2.4 综合应用 32
2.4.1 求圆面积 32
2.4.2 求平均值 33
2.5 本章常见错误 33
2.5.1 提示函数没定义 33
2.5.2 缺少分号 34
2.6 本章小结 34
2.7 跟我上机 34
第3章 数据类型 35
3.1 数据类型概述 36
3.1.1 数据类型的概念 36
3.1.2 数据类型的分类 36
3.2 关键字与标识符 38
3.2.1 解读关键字 38
3.2.2 理解标识符 39
3.3 常量 40
3.3.1 整型常量 40
3.3.2 实型常量 42
3.3.3 字符型常量 42
3.3.4 转义字符 46
3.4 变量 48
3.4.1 整型变量 48
3.4.2 实型变量 50
3.4.3 字符型变量 50
3.5 4种进制形式 52
3.5.1 进制表示形式 52
3.5.2 进制转换 53
3.6 综合应用 53
3.6.1 求圆的周长 53
3.6.2 求一元二次方程ax2+bx+c=0的根 54
3.6.3 进制转换 55
3.7 本章常见错误 55
3.7.1 error C2143:syntax error:missing‘;’before‘type’ 55
3.7.2 scanf输入数据要用地址 56
3.8 本章小结 56
3.9 跟我上机 56
第4章 运算符与表达式 57
4.1 认识C语言运算符及表达式 58
4.1.1 赋值运算符和赋值表达式 58
4.1.2 算术运算符和算术表达式 60
4.1.3 关系运算符和关系表达式 63
4.1.4 逻辑运算符和逻辑表达式 65
4.1.5 位运算符与位逻辑表达式 67
4.1.6 逗号运算符和逗号表达式 67
4.1.7 条件运算符 69
4.1.8 运算符的优先级和结合性 69
4.2 混合运算与类型转换 71
4.2.1 混合运算 71
4.2.2 转换数据类型 71
4.3 综合应用 74
4.3.1 水仙花数 74
4.3.2 可逆素数 75
4.4 本章常见错误 76
4.4.1 逻辑运算部分执行 76
4.4.2 表达式“a=b”和“a==b” 77
4.5 本章小结 77
4.6 跟我上机 77
第5章 数据的输入与输出 79
5.1 五类C语言语句 80
5.1.1 表达式语句 80
5.1.2 空语句 80
5.1.3 复合语句 81
5.1.4 函数调用语句 82
5.1.5 程序流程控制语句 83
5.2 输入与输出数据 83
5.2.1 字符数据输入/输出 83
5.2.2 字符串输入/输出 85
5.2.3 格式控制输入/输出 86
5.3 顺序结构应用实例 92
5.4 综合应用 93
5.4.1 用*输出图案 93
5.4.2 输出一个字符的前驱字符 94
5.5 本章常见错误 94
5.5.1 用scanf输入字符串不能接受空格 94
5.5.2 scanf格式控制用逗号问题 95
5.6 本章小结 95
5.7 跟我上机 95
第6章 算法 96
6.1 算法概述 97
6.1.1 算法的概念 97
6.1.2 算法的特征 97
6.2 描述算法 97
6.2.1 用流程图描述 97
6.2.2 三种基本结构 99
6.2.3 N-S流程图 101
6.2.4 用伪代码描述算法 101
6.3 综合应用 102
6.3.1 计算某日是该年第几天 102
6.3.2 百钱百鸡问题 103
6.4 本章常见错误 104
6.4.1 合理安排基本结构 104
6.4.2 全面考虑 104
6.5 本章小结 104
6.6 跟我上机 104
第7章 选择结构程序设计 108
7.1 if判断语句 109
7.1.1 if语句的基本形式 109
7.1.2 嵌套多个if语句 113
7.2 Switch分支语句 115
7.2.1 switch语句的基本形式 115
7.2.2 多路开关模式的switch语句 118
7.2.3 剖析if和switch语句 119
7.3 选择程序设计举例 120
7.4 综合应用 123
7.4.1 判断三角形的类型 123
7.4.2 计算增加后的工资 124
7.5 本章常见错误 125
7.5.1 if else的匹配问题 125
7.5.2 注意case后不要跟变量 125
7.5.3 if判断表达式的比较问题 126
7.6 本章小结 126
7.7 跟我上机 126
第8章 循环结构程序设计 128
8.1 循环结构概述 129
8.2 while和do-while循环 129
8.2.1 实现while循环 129
8.2.2 编写do-while语句 130
8.2.3 对比while和do-while语句 132
8.3 深入理解for循环 132
8.3.1 for语句的一般形式 132
8.3.2 for语句的变体 134
8.3.3 比较三种循环语句 137
8.3.4 嵌套循环 137
8.4 跳转执行 139
8.4.1 goto语句 139
8.4.2 break语句 141
8.4.3 continue语句 142
8.4.4 比较三种转移语句 143
8.5 循环程序设计应用 143
8.6 综合应用 145
8.6.1 婚礼上的谎言 145
8.6.2 一元钱的兑换方案 146
8.7 本章常见错误 146
8.7.1 在循环中注意清零 146
8.7.2 注意循环条件 147
8.8 本章小结 147
8.9 跟我上机 147
第2篇 提高篇 150
第9章 数组 150
9.1 一维数组 151
9.1.1 定义及引用一维数组 151
9.1.2 初始化一维数组 152
9.1.3 一维数组应用 154
9.2 二维数组 156
9.2.1 定义及引用二维数组 156
9.2.2 初始化二维数组 157
9.2.3 二维数组应用 159
9.3 多维数组 160
9.4 综合应用 161
9.4.1 统计学生成绩 161
9.4.2 相邻元素之和 162
9.5 本章常见错误 163
9.5.1 输出数组内容时后面出现乱码 163
9.5.2 sizeof(a)和sizeof(a+1) 163
9.6 本章小结 163
9.7 跟我上机 164
第10章 字符串 167
10.1 存储字符串的数组 168
10.1.1 定义及引用字符数组 168
10.1.2 初始化字符数组 168
10.1.3 输入/输出字符数组 171
10.1.4 字符数组的应用 173
10.2 解析字符串处理 174
10.2.1 复制字符串 174
10.2.2 连接字符串 176
10.2.3 比较字符串 177
10.2.4 获取字符串长度 179
10.2.5 转换字符串大小写 180
10.3 综合应用 181
10.3.1 设计复制函数 181
10.3.2 名字排序 182
10.4 本章常见错误 183
10.4.1 不能对数组名直接赋值 183
10.4.2 注意区分数组指针和指针数组 184
10.5 本章小结 184
10.6 跟我上机 184
第11章 封装函数 186
11.1 函数概述 187
11.2 定义函数 189
11.2.1 函数定义的一般形式 189
11.2.2 定义与声明函数 191
11.3 函数的返回 192
11.3.1 设置多个返回点 193
11.3.2 获取返回值 193
11.3.3 return使用说明 194
11.4 函数的参数 195
11.4.1 形式参数与实际参数 195
11.4.2 数组作为参数 197
11.4.3 main函数传参 201
11.4.4 参数校验 202
11.5 调用函数 202
11.5.1 函数调用方式 202
11.5.2 嵌套调用函数 203
11.5.3 递归调用函数 204
11.6 内部函数与外部函数 207
11.7 区分局部变量与全局变量 209
11.8 综合应用 213
11.8.1 判断素数 213
11.8.2 最大数与最小数的差 213
11.9 本章常见错误 215
11.9.1 函数定义时容易犯的错误 215
11.9.2 函数中返回的数组地址无效 215
11.9.3 声明函数时不要忘记加分号 216
11.10 本章小结 216
11.11 跟我上机 216
第12章 指针 218
12.1 指针相关概念 219
12.1.1 地址与指针 219
12.1.2 指针变量 220
12.1.3 指针的自加/自减运算 225
12.2 使用指针操作数组 227
12.2.1 一维数组与指针 227
12.2.2 二维数组与指针 230
12.2.3 比较char a[]与char*a 233
12.3 字符与指针 234
12.3.1 字符指针 234
12.3.2 字符串数组 236
12.4 在函数中传递指针 238
12.4.1 指针变量作函数参数 238
12.4.2 传递数组指针 241
12.4.3 传递字符指针 244
12.5 指向指针的指针 245
12.6 从函数中返回指针 247
12.7 指针数组作为main函数的参数 250
12.8 综合应用 252
12.8.1 查找成绩不及格的学生 252
12.8.2 逆序输出数组元素 253
12.9 本章常见错误 254
12.9.1 通过指针修改字符串出错 254
12.9.2 释放内存提示错误 254
12.9.3 释放空间以后,记得给指针赋空 254
12.10 本章小结 254
12.11 跟我上机 255
第13章 构造数据类型 257
13.1 结构体概述 258
13.1.1 结构体的结构 258
13.1.2 定义和引用结构体 259
13.1.3 初始化结构体 261
13.2 结构体数组 262
13.2.1 定义结构体数组 262
13.2.2 初始化结构体数组 263
13.3 结构体指针 266
13.3.1 定义结构体指针 267
13.3.2 指向结构体数组的指针 269
13.3.3 结构体作为函数参数 271
13.4 建立链表 273
13.4.1 链表的概念 273
13.4.2 建立单向链表 274
13.4.3 链表的相关操作 277
13.5 共用体 286
13.5.1 理解共用体 286
13.5.2 定义和引用共用体 287
13.6 认识枚举类型 288
13.7 typedef重命名数据类型 291
13.8 综合应用 294
13.8.1 输出火车票价 294
13.8.2 制作花束 295
13.9 本章常见错误 297
13.9.1 结构体字节对齐问题 297
13.9.2 用指针动态申请结构体内存时失败 297
13.9.3 忘记分号 298
13.10 本章小结 298
13.11 跟我上机 298
第14章 位运算 300
14.1 按位运算 301
14.1.1 按位与 301
14.1.2 按位或 303
14.1.3 取反操作 304
14.1.4 按位异或 305
14.1.5 左移运算 307
14.1.6 右移运算 308
14.2 循环移位 309
14.3 位段概述 311
14.4 综合应用 314
14.4.1 求一个数的补码 314
14.4.2 取出给定16位二进制数的奇数位 315
14.4.3 计算如下位运算 315
14.5 本章常见错误 316
14.5.1 区分&&和‖与&和| 316
14.5.2 注意位运算的数据类型 317
14.6 本章小结 317
14.7 跟我上机 317
第15章 内存管理 318
15.1 内存结构 319
15.1.1 内存组织方式 319
15.1.2 堆和栈 319
15.2 动态分配内存 322
15.2.1 申请成块的内存 322
15.2.2 重新分配内存 324
15.2.3 释放内存 325
15.3 内存泄漏 326
15.4 变量的存储类别 327
15.4.1 动态存储与静态存储 327
15.4.2 auto变量 328
15.4.3 用static修饰变量 328
15.4.4 用register修饰变量 329
15.4.5 extern变量 330
15.5 综合应用 334
15.5.1 商品信息动态存放 334
15.5.2 调用calloc函数动态分配内存 335
15.5.3 学生信息管理 336
15.6 本章常见错误 338
15.6.1 分配了一块内存空间,但没有初始化 338
15.6.2 释放内存空间后继续引用其内容 339
15.6.3 没有保存内存地址,造成此内存不可用 339
15.6.4 指针无法访问register变量 339
15.7 本章小结 340
15.8 跟我上机 340
第16章 编译预处理 342
16.1 宏定义 343
16.1.1 定义不带参数的宏 343
16.1.2 定义带参数的宏 345
16.2 #include文件包含 346
16.3 应用条件编译 349
16.3.1 使用#if命令 349
16.3.2 #ifdef和#ifndef命令 351
16.3.3 #undef命令 352
16.3.4 #line命令 353
16.3.5 #pragma命令 353
16.4 综合应用 354
16.4.1 使用带参数宏求圆面积 354
16.4.2 使用条件编译隐藏密码 355
16.5 本章常见错误 355
16.5.1 带参数的宏最好加括号 355
16.5.2 使用宏时的注意事项 356
16.5.3 文件包含的嵌套 356
16.6 本章小结 356
16.7 跟我上机 357
第17章 使用文件处理数据 358
17.1 文件概述 359
17.2 文件基本操作 359
17.2.1 文件指针 359
17.2.2 文件的打开 360
17.2.3 文件的关闭 362
17.3 文件的读写 362
17.3.1 字符形式读写文件 362
17.3.2 字符串形式读写文件 365
17.3.3 数据块形式读写文件 367
17.3.4 格式化读写函数 370
17.3.5 随机读写文件 373
17.4 综合应用 376
17.4.1 复制文件中的数据 376
17.4.2 显示奇数条学生信息 377
17.4.3 文件内容加密 379
17.5 本章常见错误 382
17.5.1 以“a”或“a+”的方式打开文件,指针却不在文件末尾 382
17.5.2 忘记调回指针,读不到内容 383
17.5.3 绝对路径要用双斜线\\ 383
17.5.4 用scanf输入时,%s格式后面不能用逗号 383
17.6 本章小结 383
17.7 跟我上机 384
第18章 制作图形图像 387
18.1 制作文本窗口 388
18.1.1 定义文本窗口 388
18.1.2 设置窗口颜色 388
18.1.3 文本的输入和输出 389
18.1.4 掌握屏幕操作函数 391
18.2 显示图形 393
18.2.1 初始化图形模式 393
18.2.2 设置屏幕颜色 396
18.2.3 基本图形函数 398
18.2.4 填充封闭图形 408
18.3 绘制图像 410
18.4 图形模式下输出文本 413
18.4.1 文本输出函数 413
18.4.2 设置文本属性 414
18.5 综合应用 415
18.5.1 填充八边形 415
18.5.2 以不同的字体输出当前时间 416
18.6 本章常见错误 417
18.6.1 头文件和返回值 417
18.6.2 TC图形库 417
18.7 本章小结 418
18.8 跟我上机 418
第3篇 实战篇 422
第19章 C语言游戏开发 422
19.1 推箱子游戏 423
19.1.1 概述 423
19.1.2 设计思路 423
19.1.3 技术要点 423
19.1.4 实现过程 424
19.2 贪吃蛇游戏 433
19.2.1 概述 433
19.2.2 设计思路 434
19.2.3 技术要点 434
19.2.4 实现过程 437
19.3 俄罗斯方块游戏 442
19.3.1 概述 442
19.3.2 设计思路 443
19.3.3 技术要点 443
19.3.4 实现过程 444
19.4 本章小结 451
第20章 窗体版图书管理系统 452
20.1 开发背景 453
20.2 需求分析 453
20.3 系统设计 453
20.3.1 数据库建模 453
20.3.2 系统功能结构 454
20.3.3 建立数据库 454
20.3.4 系统预览 456
20.4 技术指南 456
20.4.1 Win32程序的入口 456
20.4.2 WinMain函数的设计 458
20.4.3 对话框窗体的产生与销毁 458
20.4.4 消息响应函数 459
20.5 工具模块的设计 459
20.6 登录模块设计 461
20.7 客户端主界面设计 465
20.8 基本信息管理模块 470
20.9 库存管理模块 478
20.10 查询模块 485
20.11 本章小结 488