第Ⅰ篇 基础入门 3
第1章 初识庐山真面目——走进C语言的世界 3
1.1 C语言概述 4
1.1.1 C语言的发展史 4
1.1.2 C语言的特点 5
1.1.3 C语言的应用 6
1.2 C语言的常用开发环境 6
1.2.1 Visual C++6.0开发环境 7
1.2.2 Turbo C2.0开发环境 11
1.3 编写第一个C语言程序 13
1.3.1 C语言编译机制 13
1.3.2 在Visual C++6.0中开发C程序 13
1.3.3 在Turbo C中开发C程序 17
1.4 C语言程序的组成 19
1.4.1 C语言程序整体风貌 19
1.4.2 #include的秘密 19
1.4.3 程序的出入口——main函数 20
1.4.4 数据集装箱——常量和变量 21
1.4.5 如何输出程序结果——输出函数 21
1.4.6 注释 21
1.4.7 代码书写规范 22
1.5 大神解惑 23
1.6 跟我学上机 23
第2章 程序中的变与不变——常量与变量 25
2.1 标识符和关键字 26
2.1.1 标识符 26
2.1.2 关键字 26
2.2 常量 27
2.2.1 整数常量 27
2.2.2 浮点常量 28
2.2.3 字符常量 28
2.2.4 字符串常量 30
2.2.5 符号常量 30
2.3 变量 31
2.3.1 变量的定义 32
2.3.2 变量的声明 32
2.3.3 变量的初始化与赋值 33
2.3.4 变量的分类 34
2.4 综合案例——处理学生的期末成绩 38
2.5 大神解惑 40
2.6 跟我学上机 40
第3章 程序中的数据种类——数据类型 41
3.1 数制 42
3.1.1 二进制 42
3.1.2 八进制 42
3.1.3 十六进制 42
3.1.4 数制间的转换 42
3.2 整型数据 45
3.2.1 整型数据的存放形式 46
3.2.2 整型变量的溢出 47
3.3 浮点型数据 48
3.3.1 浮点型数据的存放形式 48
3.3.2 有效数字 49
3.4 字符型数据 50
3.5 数据类型的转换 50
3.5.1 隐式转换 50
3.5.2 显式转换 52
3.6 综合案例——各种进制的转换 53
3.7 大神解惑 55
3.8 跟我学上机 55
第4章 用户与计算机的交互——输入和输出 57
4.1 标准输入输出 58
4.2 格式化输入输出 58
4.2.1 格式化输出函数 59
4.2.2 格式化输入函数 62
4.3 字符输入输出 65
4.3.1 字符的输出函数 65
4.3.2 字符的输入函数 66
4.4 字符串的输入输出 67
4.4.1 字符串的输出函数 67
4.4.2 字符串的输入函数 68
4.5 综合案例——输入和输出的综合应用 69
4.6 大神解惑 70
4.7 跟我学上机 70
第5章 谁来操作数据——运算符和表达式 71
5.1 运算符 72
5.1.1 运算符的分类 72
5.1.2 运算符的优先级和结合性 72
5.2 表达式 73
5.3 运算符与表达式 74
5.3.1 算术运算符与算术表达式 74
5.3.2 赋值运算符与赋值表达式 77
5.3.3 关系运算符与关系表达式 79
5.3.4 逻辑运算符与逻辑表达式 81
5.3.5 位运算符与位运算表达式 83
5.3.6 条件运算符与条件表达式 85
5.3.7 逗号运算符与逗号表达式 86
5.4 语句 87
5.4.1 表达式语句 87
5.4.2 函数调用语句 87
5.4.3 控制语句 88
5.4.4 复合语句 88
5.4.5 空语句 88
5.5 综合案例——关系运算符的应用 89
5.6 大神解惑 89
5.7 跟我学上机 90
第6章 程序的执行方向——程序流程控制结构 91
6.1 顺序结构 92
6.2 选择结构 93
6.2.1 if语句 93
6.2.2 if...else语句 94
6.2.3 选择嵌套语句 95
6.2.4 switch分支结构语句 99
6.3 循环结构 101
6.3.1 while语句 101
6.3.2 do...while语句 102
6.3.3 for语句 103
6.3.4 循环语句的嵌套 105
6.4 跳转语句 106
6.4.1 break语句 106
6.4.2 continue语句 107
6.4.3 goto语句 108
6.5 综合案例——制作简易计算器 109
6.6 大神解惑 111
6.7 跟我学上机 112
第Ⅱ篇 核心技术 115
第7章 特殊的元素集合——数组 115
7.1 数组概述 116
7.2 一维数组 116
7.2.1 一维数组的定义 116
7.2.2 一维数组的引用 118
7.2.3 一维数组的初始化 119
7.2.4 程序实例 121
7.3 二维数组 123
7.3.1 二维数组的定义 123
7.3.2 二维数组的引用 124
7.3.3 二维数组的初始化 125
7.3.4 多维数组 127
7.3.5 程序实例 128
7.4 字符数组 131
7.4.1 字符数组的定义和初始化 131
7.4.2 字符串和字符数组 133
7.4.3 字符数组的输出与输入 134
7.4.4 字符串处理函数 137
7.5 综合案例——矩阵的乘法 141
7.6 大神解惑 143
7.7 跟我学上机 143
第8章 程序描述——算法与流程图 145
8.1 算法概述 146
8.1.1 算法的概念 146
8.1.2 算法的特性 146
8.1.3 算法的优劣 147
8.2 流程图简介 148
8.2.1 传统流程图 148
8.2.2 N-S流程图 150
8.3 算法的表示 150
8.3.1 自然语言表示法 150
8.3.2 流程图表示法 152
8.3.3 N-S流程图表示法 156
8.3.4 伪代码表示法 159
8.3.5 计算机语言表示法 162
8.4 结构化程序设计方法 163
8.5 综合案例——求解一元二次方程的根 163
8.6 大神解惑 166
8.7 跟我学上机 166
第9章 C语言灵魂——函数与函数中变量 167
9.1 函数概述 168
9.1.1 函数的概念 168
9.1.2 函数的分类 169
9.1.3 函数的声明与定义 171
9.2 函数的返回语句 174
9.2.1 函数的返回值 175
9.2.2 函数的结束标志 176
9.2.3 函数的返回值类型 177
9.3 函数的参数 178
9.3.1 形式参数与实际参数 178
9.3.2 参数的传递方式 179
9.4 函数的调用 182
9.4.1 函数调用的方式 182
9.4.2 函数的嵌套调用 185
9.4.3 函数的递归调用 188
9.5 内部函数与外部函数 192
9.5.1 内部函数 192
9.5.2 外部函数 193
9.6 main()函数的参数 195
9.7 局部变量和全局变量 196
9.7.1 局部变量 196
9.7.2 全局变量 198
9.8 变量的存储类别 202
9.8.1 动态存储与静态存储 203
9.8.2 自动变量 203
9.8.3 静态变量 205
9.8.4 寄存器变量 209
9.8.5 外部变量 210
9.9 综合案例——求解非线性方程 212
9.10 大神解惑 215
9.11 跟我学上机 217
第10章 灵活调用内存地址——指针 219
10.1 指针概述 220
10.1.1 地址与指针 220
10.1.2 指针变量 221
10.1.3 指针变量的引用 223
10.2 指针与函数 226
10.2.1 指针变量作为函数参数 226
10.2.2 函数返回指针 229
10.2.3 指向函数的指针 231
10.3 指针与数组 233
10.3.1 数组元素的指针 234
10.3.2 指针的运算 234
10.3.3 通过指针引用数组元素 235
10.3.4 指向数组的指针变量作为函数参数 238
10.3.5 通过指针对多维数组进行引用 244
10.4 指针与字符串 250
10.4.1 字符指针 250
10.4.2 使用字符指针作函数参数 253
10.4.3 字符数组与字符指针变量的区别 256
10.5 指针数组和多重指针 258
10.5.1 指针数组 258
10.5.2 指向指针的指针 262
10.6 综合案例——使用指针操作数组 267
10.7 大神解惑 272
10.8 跟我学上机 275
第11章 数据存储——操作文件 277
11.1 文件概述 278
11.1.1 文件类型 278
11.1.2 文件指针 279
11.1.3 文件的缓冲区 280
11.2 文件的打开与关闭 281
11.2.1 文件的打开 281
11.2.2 文件的关闭 282
11.3 文件的读写 283
11.3.1 字符的读写 283
11.3.2 字符串的读写 287
11.3.3 数据块的读写 291
11.3.4 格式化读写函数 295
11.4 文件定位与文件的随机读写 298
11.4.1 文件头定位函数rewind() 299
11.4.2 当前读写位置函数ftell() 300
11.4.3 随机定位函数fseek() 301
11.5 文件检测函数 304
11.5.1 文件结束判断函数feof() 304
11.5.2 文件读写错误检测函数ferror() 305
11.5.3 文件错误标志清除函数clearerr() 307
11.6 综合案例——文件的综合操作 308
11.7 大神解惑 316
11.8 跟我学上机 316
第12章 未雨绸缪——编译与预处理指令 317
12.1 预处理指令 318
12.2 宏定义 318
12.2.1 变量式宏定义 318
12.2.2 宏定义的嵌套 321
12.2.3 宏定义的作用范围 322
12.2.4 带参数的宏定义 323
12.2.5 宏定义的多行表示 327
12.3 文件包含 327
12.4 条件编译 329
12.4.1 条件编译命令 329
12.4.2 调试中使用DEBUG宏 332
12.4.3 文件的嵌套包含与条件编译 333
12.5 综合案例——求解圆、矩形以及三角形的面积 334
12.6 大神解惑 335
12.7 跟我学上机 335
第13章 提高开发效率——使用库函数 337
13.1 标准C库函数 338
13.2 数学函数“math.h” 338
13.2.1 求幂函数与开平方函数 338
13.2.2 指数函数与对数函数 339
13.2.3 三角函数 340
13.2.4 绝对值函数 341
13.2.5 取整函数与取余函数 342
13.3 字符串函数“string.h” 343
13.3.1 字符串长度函数 343
13.3.2 字符串连接函数 344
13.3.3 字符串复制函数 345
13.3.4 字符串大小写转换函数 346
13.3.5 字符串查找函数 347
13.3.6 字符串比较函数 348
13.4 字符函数“ctype.h” 349
13.4.1 字符的类型判断函数 349
13.4.2 字符大小写转换函数 351
13.5 其他函数 352
13.5.1 随机函数 352
13.5.2 日期时间函数 353
13.5.3 结束程序函数 354
13.6 综合案例——创建报数游戏 355
13.7 大神解惑 356
13.8 跟我学上机 357
第Ⅲ篇 高级应用 361
第14章 内部数据操作——位运算 361
14.1 位(bit)与字节 (byte)的关系 362
14.2 位运算符 362
14.2.1 按位与运算符(&) 362
14.2.2 按位或运算符(|) 363
14.2.3 按位异或运算符(^) 364
14.2.4 按位取反运算符(~) 365
14.2.5 左移运算符(<<) 366
14.2.6 右移运算符(>>) 367
14.2.7 位复合赋值运算符 368
14.3 循环移位 368
14.3.1 循环左移 369
14.3.2 循环右移 370
14.4 位段 371
14.4.1 位段的定义 371
14.4.2 位段中数据的引用 371
14.5 综合案例——将十进制数转换为二进制数 373
14.6 大神解惑 374
14.7 跟我学上机 375
第15章 灵活定义数据类型——结构体、共用体和枚举 377
15.1 结构体概述 378
15.1.1 结构体类型 378
15.1.2 定义结构体变量 379
15.1.3 初始化结构体变量 381
15.1.4 结构体变量的引用 381
15.2 结构体数组 383
15.2.1 定义结构体数组 383
15.2.2 结构体数组的初始化 384
15.2.3 结构体数组元素的引用 385
15.2.4 结构体数组应用实例 386
15.3 结构体指针 388
15.3.1 指向结构体变量的指针 388
15.3.2 指向结构体数组的指针 390
15.3.3 结构体变量作为函数参数 391
15.3.4 指向结构体变量的指针作为函数参数 393
15.3.5 结构体作为函数的返回值 394
15.4 共用体 395
15.4.1 共用体的定义 395
15.4.2 共用体变量的定义 396
15.4.3 共用体变量的初始化以及引用 397
15.5 枚举 399
15.5.1 定义枚举类型 400
15.5.2 定义枚举类型变量 400
15.6 综合案例——创建学生信息结构体 402
15.7 大神解惑 403
15.8 跟我学上机 404
第16章 动态存储分配——动态数据结构 405
16.1 动态存储分配概述 406
16.1.1 malloc()函数 406
16.1.2 calloc()函数 407
16.1.3 realloc()函数 408
16.1.4 free()函数 409
16.2 链表概述 410
16.2.1 链表结点的定义 411
16.2.2 链表的建立 411
16.2.3 链表的遍历 412
16.2.4 链表结点的插入 413
16.2.5 链表结点的删除 417
16.3 综合案例——综合应用链表 420
16.4 大神解惑 421
16.5 跟我学上机 422
第17章 逻辑结构——数据结构进阶 423
17.1 数据结构概述 424
17.2 线性表 425
17.3 栈 426
17.3.1 栈的基本操作 427
17.3.2 顺序栈 427
17.3.3 链式栈 429
17.4 队列 431
17.4.1 队列的基本运算 432
17.4.2 顺序队列 432
17.4.3 链式队列 436
17.5 二叉树 441
17.5.1 二叉树的定义 441
17.5.2 二叉树的遍历 442
17.6 查找 442
17.6.1 顺序查找 442
17.6.2 折半查找 444
17.7 综合案例——使用栈转换数据的进制 446
17.8 大神解惑 447
17.9 跟我学上机 448
第18章 整理数据的妙招——排序 449
18.1 排序概述 450
18.2 插入排序 450
18.2.1 直接插入排序 450
18.2.2 希尔排序 452
18.3 选择排序 453
18.3.1 简单选择排序 453
18.3.2 堆排序 455
18.4 交换排序 457
18.4.1 冒泡排序 457
18.4.2 快速排序 458
18.5 归并排序 460
18.6 基数排序 462
18.7 大神解惑 464
18.8 跟我学上机 465
第Ⅳ篇 项目开发实战 469
第19章 项目实训1——开发日历查阅系统 469
19.1 需求分析 470
19.2 功能分析 470
19.3 开发前准备工作 472
19.4 系统代码编写 476
19.4.1 查询年历函数showCalendarOfYear() 476
19.4.2 查询月历函数showCalendarOfMonth() 477
19.4.3 日期查询模块 478
19.5 系统运行 485
19.6 项目总结 486
第20章 项目实训2——开发员工信息管理系统 487
20.1 需求分析 488
20.2 功能分析 489
20.3 开发前准备工作 490
20.4 系统代码编写 491
20.4.1 main.c文件 491
20.4.2 employee.c文件 495
20.5 系统运行 499
20.6 项目总结 500
第21章 项目实训3——开发迷宫小游戏 501
21.1 需求分析 502
21.2 功能分析 502
21.3 开发前准备工作 504
21.4 系统代码编写 505
21.4.1 main.c文件 505
21.4.2 mazeGame.c文件 507
21.5 系统运行 513
21.6 项目总结 514