第一篇 基础篇 1
第1章 学C语言还有用吗 1
1.1 引出问题 1
1.2 漫漫发展历程 2
1.3 C语言特点 2
1.4 工欲善其事,必先利其器 3
1.4.1 先看Turbo C/C++3.0 4
1.4.2 再看DEV-C++5 10
1.5 我的第一次C语言程序开发 11
1.5.1 第一步:编辑源代码 12
1.5.2 第二步:编译 13
1.5.3 第三步:运行 13
1.6 疱丁解牛C程序 13
1.6.1 C程序组成部分 14
1.6.2 C程序的书写格式 16
1.7 解决问题——究竟C语言还有用吗 17
1.8 我的总结 18
第2章 看人生算法 19
2.1 引出问题 19
2.2 何谓算法 20
2.2.1 算法的概念 20
2.2.2 用流程图表示算法 21
2.2.3 用C语言表示算法 22
2.3 不同的数据类型,品百态人生 23
2.4 变量和常量,体会变和不变 23
2.4.1 不变的常量 24
2.4.2 可变的变量 25
2.5 整型数据 28
2.5.1 整型常量 28
2.5.2 整型变量 29
2.6 实实在在的实型数据 31
2.6.1 不变的实型常量 31
2.6.2 变化的实型变量 32
2.6.3 实型常量的类型 33
2.7 字符型数据,人生如符号 34
2.7.1 字符常量 34
2.7.2 字符串常量 36
2.7.3 字符变量 36
2.8 从初始化变量谈人生初始化 38
2.9 整型、实型、字符型数据间的运算 39
2.9.1 自动转换 39
2.9.2 强制转换 40
2.10 解决问题——规划你的人生算法,两弊相衡取其轻 41
2.11 我的总结 42
第3章 运算符和表达式,选择你的生活方式 43
3.1 引出问题 43
3.2 人生有多种选择 44
3.2.1 运算符的种类 44
3.2.2 运算符的优先级 46
3.3 算术运算符拨慢时钟的运转 47
3.3.1 最简单的单目运算符 47
3.3.2 双目运算符 48
3.4 赋值运算符和赋值表达式 49
3.4.1 基本赋值运算符 50
3.4.2 复合赋值运算符 52
3.4.3 赋值表达式 53
3.5 关系运算下的男女关系 54
3.6 逻辑人生下的逻辑运算符和逻辑表达式 56
3.7 人生需要停顿的逗号运算 58
3.8 花落知多少,求字节数运算 60
3.9 解决问题——程序员的7种生活方式 62
3.10 我的总结 63
第4章 进进出出的C语句 64
4.1 引出问题 64
4.2 语句——C程序的最重要组成 65
4.2.1 C语句简介 65
4.2.2 看空白对语句的作用 67
4.2.3 赋值语句给你一个值 67
4.3 输入和输出,是一个进进出出的过程 68
4.3.1 putchar函数(字符输出函数) 69
4.3.2 getchar函数(字符输入函数) 70
4.3.3 printf函数(格式输出函数) 72
4.3.4 scanf函数(格式输入函数)&. 74
4.3.5 puts函数(字符串输出函数) 77
4.3.6 gets函数(字符串输入函数) 78
4.4 解决问题 79
4.5 我的总结 80
第5章 和人生一样的流程控制 82
5.1 引出问题 82
5.2 按部就班的顺序结构 83
5.3 人生可以选择 84
5.3.1 一个选择的单分支结构语句 85
5.3.2 有多个选择的双分支结构语句 86
5.3.3 复杂的多分支结构语句 88
5.3.4 条件运算符和条件表达式 89
5.4 人生是一个循环 91
5.4.1 for语句循环 92
5.4.2 while语句 94
5.4.3 do-while语句 96
5.4.4 循环语句的总结 97
5.4.5 goto语句 98
5.4.6 break语句 99
5.4.7 continue语句 100
5.4.8 死循环和退出程序 101
5.5 解决问题 103
5.6 我的总结 104
第6章 数组和字符串,心灵的港湾 105
6.1 引出问题 105
6.2 最简单的一维数组 106
6.2.1 定义一维数组 106
6.2.2 引用一维数组元素 107
6.2.3 初始化一维数组 108
6.3 纷乱思绪下的多维数组 110
6.3.1 二维数组 111
6.3.2 多维数组 114
6.4 功名利禄下的字符数组与字符串 117
6.4.1 字符数组 117
6.4.2 字符串与字符数组 118
6.4.3 字符数组的输入输出 119
6.5 净化心灵的字符串处理函数 121
6.5.1 测试字符串长度 121
6.5.2 字符串大小写转换 122
6.5.3 字符串复制 123
6.5.4 字符串比较 124
6.5.5 字符串连接 126
6.5.6 其他字符串函数 127
6.5.7 将字符串转换成数值的函数 127
6.6 豁然开朗的字符处理函数 128
6.6.1 字符检测函数 129
6.6.2 字符大小写转换函数 131
6.7 解决问题 132
6.8 我的总结 133
第7章 函数,最厉害的武器 134
7.1 引出问题 134
7.2 函数,一个个致命的武器 135
7.2.1 看函数的分类 135
7.2.2 函数的定义 137
7.3 第一步,函数的声明和函数原型 138
7.4 武器的零件——参数 140
7.4.1 形参和实参 140
7.4.2 数组名作为函数参数 142
7.4.3 数组作为函数参数 144
7.5 组装的结果——返回值 146
7.6 使用你的武器——调用函数 148
7.6.1 函数调用格式 149
7.6.2 调用函数的方式 149
7.6.3 对被调函数的召唤 150
7 6.4 调用函数方式的深入分析 151
7.7 函数嵌套和递归,组合你的武器 153
7.7.1 嵌套调用 153
7.7.2 递归调用 156
7.8 变量的作用域和生存期 157
7.8.1 变量作用域 158
7.8.2 静态存储变量和动态存储变量 160
7.9 内外兼修的内部函数和外部函数 167
7.9.1 内部函数 167
7.9.2 何谓外部函数 168
7.10 库函数我来了 169
7.10.1 C库函数介绍 169
7.10.2 C库函数分类 169
7.11 信心是最重要的武器 170
7.12 我的总结 173
第8章 一个萝卜一个坑的指针 174
8.1 引出问题 174
8.2 为需求而生的指针 175
8.3 变量的指针和指向变量的指针变量 175
8.3.1 声明 176
8.3.2 初始化 177
8.3.3 引用 178
8.3.4 最后几个说明 179
8.3.5 指针变量运算 180
8.3.6 指针变量作为函数参数 181
8.3.7 void类型的指针 184
8.4 双子星般的指针和数组 186
8.4.1 数组元素的指针 186
8.4.2 指向一维数组元素的指针变量 188
8.4.3 通过指针引用数组元素 189
8.4.4 使用指针变量应该注意的问题 192
8.4.5 数组名作函数参数 195
8.5 指针和多维数组 197
8.5.1 多维数组的地址 197
8.5.2 指向多维数组的指针变量 199
8.6 指针和字符串 201
8.6.1 指针访问字符串 202
8.6.2 字符串指针作函数参数 203
8.6.3 使用字符串指针变量与字符数组的区别 204
8.7 指针数组和多级指针 205
8.7.1 指针数组 206
8.7.2 多级指针的定义和应用 207
8.7.3 指向指针的指针 209
8.7.4 main函数的参数 209
8.8 指针函数和函数指针 210
8.9 解决问题 214
8.10 我的总结 214
第二篇 核心技术篇 216
第9章 结构体、共用体和枚举 216
9.1 引出问题 216
9.2 先谈结构体 216
9.2.1 定义结构体类型 217
9.2.2 结构体类型变量的定义 217
9.2.3 结构体变量的引用 220
9.2.4 结构体变量的初始化 221
9.3 结构体数组 223
9.3.1 结构体数组定义 223
9.3.2 结构体数组的初始化 225
9.3.3 结构体数组的引用 226
9.4 结构体指针 227
9.4.1 结构体指针变量的定义 228
9.4.2 结构体指针变量的初始化 228
9.4.3 结构体指针变量的引用 229
9.4.4 指向结构体变量的指针 229
9.4.5 指向结构体数组的指针 231
9.5 结构体和函数 231
9.5.1 结构体变量和结构体指针作为函数参数 232
9.5.2 返回结构体类型值的函数 233
9.6 朋友,共用体(联合) 234
9.6.1 共用体和共用体变量的定义 235
9.6.2 共用体变量的引用与初始化 236
9.6.3 结构体和共用体的区别 238
9.7 枚举 239
9.7.1 定义枚举类型 239
9.7.2 定义枚举变量 240
9.7.3 枚举变量的引用 241
9.8 用typedef定义类型 241
9.9 解决问题 243
9.10 我的总结 245
第10章 收放自如的链表 246
10.1 引出问题 246
10.2 动态内存分配 246
10.3 链表 249
10.3.1 侃侃链表 249
10.3.2 单向链表 251
10.3.3 创建链表 253
10.3.4 删除整个链表 253
10.3.5 在链表中插入结点 253
10.3.6 在链表中删除结点 253
10.3.7 双向链表 254
10.3.8 循环链表 257
10.4 解决问题 257
10.5 我的总结 258
第11章 更精细的位运算 259
11.1 引出问题 259
11.2 看6种位运算符和位运算 260
11.2.1 按位与运算 260
11.2.2 按位或运算 261
11.2.3 按位异或运算 262
11.2.4 取反运算 263
11.2.5 左移运算 264
11.2.6 右移运算 264
11.3 人生范围般的位域 265
11.4 解决问题 267
11.5 我的总结 268
第12章 预编译是一种准备活动 269
12.1 引出问题 269
12.2 三种预编译指令 270
12.3 何谓宏定义 270
12.3.1 不带参数的宏定义 271
12.3.2 带参数的宏定义 273
12.3.3 字符串化运算符 274
12.3.4 并接运算符 274
12.4 文件包含 275
12.5 条件编译 275
12.5.1 #ifdef...#else...#endif命令 276
12.5.2 #ifdefined...#else...#endif 277
12.5.3 #ifndef...#else...#endif 277
12.5.4 #if!defined...#else...#endif 278
12.5.5 #ifdef...#elif...#elif...#else...#endif 278
12.6 解决问题 280
12.7 我的总结 282
第三篇 提高篇 283
第13章 文件操作很重要 283
13.1 引出问题 283
13.2 说说文件 283
13.2.1 文本文件 284
13.2.2 文件分类 284
13.3 文件指针 285
13.4 文件打开与关闭 285
13.4.1 打开文件 286
13.4.2 关闭文件 288
13.5 文件读写操作 290
13.5.1 字符读写函数 290
13.5.2 字符串读写函数 292
13.5.3 格式化读写函数 294
13.5.4 读写数据块函数 295
13.5.5 其他读写函数 297
13.6 文件的随机读写 298
13.6.1 fseek函数 299
13.6.2 rewind函数 300
13.6.3 ftell函数 301
13.7 文件管理函数 302
13.7.1 删除文件 303
13.7.2 重命名文件 303
13.7.3 复制文件 304
13.8 检测你的状态 306
13.8.1 feof函数 306
13.8.2 ferror函数 306
13.8.3 clearerr函数 307
13.9 解决问题 308
13.10 我的总结 309
第14章 人孰能无错 310
14.1 引出问题 310
14.2 常见错误分析 310
14.3 今天你错了吗 316
14.4 知错就改 318
14.5 我的总结 321
第15章 C语言高级编程技术 323
15.1 引出问题 323
15.2 看C语言的高级编程技术 323
15.3 文本的屏幕输出和键盘输入 324
15.3.1 文本的屏幕输出 324
15.3.2 用键盘输入 330
15.3.3 应用实例 331
15.4 图形显示方式和鼠标输入 333
15.4.1 图形模式的初始化 334
15.4.2 清屏和恢复显示方式的函数 337
15.4.3 独立图形运行程序的建立 337
15.4.4 基本绘图函数 338
15.4.5 画线的线性函数 341
15.4.6 颜色控制函数 342
15.4.7 封闭图形的填色函数及有关画图函数 345
15.4.8 图形窗口函数 347
15.4.9 图形方式下的文本输出函数 348
15.5 不得不说的菜单 350
15.5.1 实现下拉式菜单 350
15.5.2 实现弹出式菜单 350
15.6 网络编程是全新的境界 356
15.6.1 常用协议报头 356
15.6.2 Winsock基础 360
15.7 解决问题 363
15.8 我的总结 364
第四篇 综合实战篇 365
第16章 俄罗斯方块游戏 365
16.1 老师的作业 365
16.2 游戏总体设计 366
16.2.1 规划设计 366
16.2.2 数据结构设计 368
16.3 构成函数介绍 370
16.4 游戏具体实现 371
16.4.1 预处理 371
16.4.2 主函数 375
16.4.3 初始化界面处理 377
16.4.4 时钟中断处理 378
16.4.5 成绩、速度和帮助处理 379
16.4.6 满行处理 380
16.4.7 方块显示和消除处理 382
16.4.8 游戏方块操作判断处理 385
16.5 我的总结 388
第17章 我的论文——UDP传输系统 389
17.1 我的毕业论文 389
17.2 实现流程 391
17.3 项目规划分析 391
17.3.1 功能描述 392
17.3.2 功能模块设计 392
17.4 设计数据结构 394
17.5 规划系统函数 395
17.6 写代码 397
17.6.1 预处理 397
17.6.2 初始化模块处理 398
17.6.3 获取参数 399
17.6.4 用户帮助模块 401
17.6.5 广播信息发送模块 402
17.6.6 广播消息接收模块 404
17.6.7 多播功能控制模块 405
17.6.8 多播消息发送模块 407
17.6.9 多播消息接收模块 408
17.6.10 主函数 409
17.7 项目调试 410
17.7.1 系统调试 411
17.7.2 验收 411
17.8 我的总结 411
第18章 学生成绩管理系统 412
18.1 求职路上 412
18.2 系统规划 414
18.2.1 项目的意义 414
18.2.2 功能描述 415
18.3 系统总体设计 416
18.3.1 功能模块设计 416
18.3.2 数据结构设计 418
18.3.3 构成函数介绍 419
18.4 具体实现 420
18.4.1 预处理 421
18.4.2 主函数main 421
18.4.3 系统主菜单函数 423
18.4.4 表格显示信息 424
18.4.5 信息查找定位 425
18.4.6 格式化输入数据 426
18.4.7 增加学生记录 426
18.4.8 查询学生记录 428
18.4.9 删除学生记录 429
18.4.10 修改学生记录 431
18.4.11 插入学生记录 432
18.4.12 统计学生记录 434
18.4.13 排序处理 435
18.4.14 存储学生信息 436
18.5 项目调试 437
18.6 我的总结 439