第1章 C语言概述 1
1.1 程序和算法 2
1.2 C语言简介 2
1.2.1 C语言的产生与发展 2
1.2.2 C语言的主要特点 4
1.2.3 C语言程序的基本结构 4
1.3 C语言开发环境 7
1.3.1 编辑器、编译器和调试器 7
1.3.2 集成开发环境 9
1.4 Code∷Blocks开发环境 10
1.4.1 Code∷Blocks简介 10
1.4.2 使用Code∷Blocks开发环境运行C语言程序 10
1.5 案例:俄罗斯方块的欢迎界面 16
本章小结 17
习题 17
第2章 数据类型、运算符和表达式 19
2.1 C语言标识符与关键字 20
2.1.1 标识符 20
2.1.2 关键字 21
2.2 变量与常量 21
2.2.1 变量 21
2.2.2 常量 24
2.3 数据类型 25
2.3.1 整型数据 26
2.3.2 实型数据 27
2.3.3 字符型数据 28
2.3.4 字符串 29
2.3.5 转义字符 30
2.4 数据类型转换 31
2.4.1 选择正确数据类型的方法 31
2.4.2 强制类型转换 33
2.4.3 隐式类型转换 34
2.5 运算符与表达式 35
2.5.1 算术运算符与算术表达式 35
2.5.2 赋值运算符与赋值表达式 37
2.5.3 移位操作符 39
2.5.4 逗号运算符 40
2.6 多类型数据混合运算 41
2.7 案例:俄罗斯方块——计算玩家等级 42
本章小结 43
习题 43
第3章 顺序结构程序设计及输入/输出 46
3.1 结构化程序设计思想 47
3.2 C语句 49
3.2.1 简单语句 49
3.2.2 复合语句 50
3.3 数据的输入/输出 50
3.3.1 字符输出函数putchar 51
3.3.2 字符输入函数getchar 52
3.3.3 格式输出函数printf 53
3.3.4 格式输入函数scanf 58
3.4 案例:俄罗斯方块——信息提示面板 61
本章小结 63
习题 63
第4章 选择结构程序设计及其应用 67
4.1 二分支选择结构 68
4.1.1 关系运算符与关系表达式 68
4.1.2 逻辑运算符与逻辑表达式 70
4.1.3 基本if语句 74
4.2 多分支选择结构 78
4.2.1 嵌套的if-else语句 78
4.2.2 并列的if-else语句 82
4.2.3 switch语句 84
4.3 条件运算符与条件表达式 88
4.4 案例:俄罗斯方块——得分统计 90
本章小结 94
习题 94
第5章 循环结构程序设计及其应用 97
5.1 自增、自减运算符 98
5.1.1 简介及应用 98
5.1.2 自增、自减运算符的前置形式和后置形式 99
5.2 循环结构 101
5.3 前侧循环语句 102
5.3.1 while循环语句 102
5.3.2 for循环语句 104
5.4 后侧循环语句 109
5.5 循环嵌套 112
5.6 break语句和continue语句 114
5.6.1 break语句 114
5.6.2 continue语句 117
5.7 案例:俄罗斯方块——绘制边框 119
本章小结 121
习题 121
第6章 数组 125
6.1 数组 126
6.2 一维数组 126
6.2.1 一维数组的定义 127
6.2.2 一维数组元素的引用 128
6.2.3 一维数组的初始化 131
6.2.4 一维数组的应用 132
6.3 二维数组 138
6.3.1 二维数组的定义 138
6.3.2 二维数组元素的引用 139
6.3.3 二维数组的初始化 140
6.3.4 二维数组的应用 141
6.4 字符数组 144
6.4.1 字符数组和字符串 144
6.4.2 字符串的初始化 146
6.4.3 字符串的输入/输出 146
6.4.4 字符串处理函数 149
6.4.5 字符数组的应用 157
6.5 案例:俄罗斯方块——绘制具体图形 161
本章小结 163
习题 164
第7章 函数 167
7.1 模块化设计思想 168
7.1.1 模块划分标准 169
7.1.2 模块划分方法 170
7.2 函数概念 171
7.2.1 什么是函数 171
7.2.2 数类型 173
7.3 函数定义与返回值 176
7.3.1 函数定义的方法 176
7.3.2 函数的返回值 178
7.4 函数声明方法 179
7.4.1 函数的声明格式 179
7.4.2 函数声明和函数定义的区别 181
7.5 函数调用 181
7.5.1 函数调用方法 182
7.5.2 函数的执行过程 183
7.6 数组作为函数参数 185
7.6.1 数组元素作为函数参数 185
7.6.2 一维数组作为函数参数 187
7.6.3 二维数组作为函数参数 192
7.7 函数的嵌套与递归调用方法 195
7.7.1 函数的嵌套调用 195
7.7.2 函数的递归调用 198
7.8 变量的作用域和存储方式 204
7.8.1 变量的作用域 204
7.8.2 变量的存储类型 209
7.9 C语言编译预处理 213
7.9.1 文件包含(#include预处理语句) 213
7.9.2 宏定义 214
7.9.3 条件编译 220
7.10 多文件程序设计 221
7.11 案例:俄罗斯方块——绘制完整的初始化界面 223
本章小结 228
习题 229
第8章 俄罗斯方块游戏的总体设计 234
8.1 俄罗斯方块游戏的总体框架 234
8.1.1 游戏界面元素 235
8.1.2 游戏事件检测 236
8.1.3 游戏控制 237
8.2 游戏相关知识介绍 238
8.2.1 随机数 238
8.2.2 程序运行时间 240
8.2.3 键盘响应操作 240
8.2.4 设置隐藏光标 242
8.3 程序流程与框架结构 243
8.3.1 主函数流程 243
8.3.2 Run函数流程 243
8.3.3 其他函数的流程 245
本章小结 246
第9章 指针 247
9.1 地址和指针 248
9.1.1 变量地址与变量值 248
9.1.2 变量的间接访问 249
9.1.3 指针变量的声明 250
9.2 指针变量的引用 252
9.2.1 指针运算符 252
9.2.2 指针运算 254
9.2.3 用指针做函数参数 256
9.3 指针与数组 259
9.3.1 一维数组指针 259
9.3.2 二维数组指针 262
9.3.3 数组指针与函数参数 264
9.4 指针与字符串 267
9.5 指针数组与数组指针 271
9.6 指针与函数 277
9.6.1 指向函数的指针 277
9.6.2 函数返回指针 279
9.7 指向指针的指针 281
9.8 案例:俄罗斯方块程序的改进 283
本章小结 285
习题 285
第10章 结构体和共用体 290
10.1 结构体 291
10.1.1 结构体类型和结构体变量 291
10.1.2 结构体变量的初始化与引用 294
10.1.3 结构体变量作为函数参数 296
10.2 结构体数组 297
10.2.1 结构体数组的定义 298
10.2.2 结构体数组的初始化 298
10.3 结构体指针 301
10.3.1 结构体类型指针定义与引用 301
10.3.2 指向结构体数组的指针 303
10.3.3 结构体指针作为函数参数 305
10.4 共用体 306
10.4.1 共用体类型的定义 307
10.4.2 共用体与结构体的区别 308
10.5 枚举类型 310
10.6 typedef机制 312
10.7 案例:俄罗斯方块程序的改进——整合变量 314
本章小结 315
习题 315
第11章 文件操作 321
11.1 文件介绍 322
11.2 文件指针 322
11.3 文件的打开与关闭 323
11.3.1 文件打开 323
11.3.2 文件关闭 325
11.4 文件读/写 326
11.4.1 字符读/写函数——fgetc/fputc 326
11.4.2 数据块读/写函数——fread/fwrite 331
11.4.3 格式读/写函数——fprintf/fscanf 334
11.4.4 字符串读/写函数——fgets/fputs 337
11.5 文件定位 340
11.5.1 位置指针复位函数rewind 341
11.5.2 随机读/写与指针定位函数fseek 342
11.6 案例:俄罗斯方块程序的完善——英雄榜系统 344
本章小结 347
习题 347
附录A 常用字符与ASCII代码对照表 351
附录B 运算符的优先级与结合性 352
参考文献 353