第1篇 C语言开发基础 3
第1章 扎马步——认识C语言 3
1.1 程序设计语言 3
1.1.1 程序设计语言的发展 3
1.1.2 C语言的发展 4
1.1.3 C语言的特点 4
1.2 结构化程序设计 5
1.2.1 程序设计的概念 5
1.2.2 程序的灵魂——算法 6
1.2.3 程序设计三剑客——三大基本结构 10
1.2.4 实现“结构化程序设计”的方法 12
1.3 C语言程序设计的特点 15
1.3.1 C程序实例 15
1.3.2 C程序的结构特点 16
1.3.3 C语言中的名字规则——标识符 17
1.4 C程序变成EXE文件的过程——编译、连接和执行 19
1.5 编译和运行C程序的一般步骤 21
1.5.1 使用Turbo C 2.0开发 21
1.5.2 使用Visual C++6.0开发 24
1.6 小结 28
1.7 习题 28
第2章 地形:C语言的血液——数据类型、运算符、表达式和输入/输出函数 30
2.1 不可以改变的数据——常量 30
2.1.1 常量的定义 30
2.1.2 进化版的常量——符号常量 30
2.2 可以改变的数据——变量 31
2.2.1 变量的定义 31
2.2.2 给变量起名字——变量的命名规则 31
2.2.3 变量的出生和成长——初始化和赋值 32
2.2.4 变量的寿命——作用域 32
2.2.5 使用extern声明变量 34
2.3 C语言的细胞——数据类型 35
2.3.1 整型(int) 35
2.3.2 实型(float) 37
2.3.3 字符型(char) 38
2.4 运算符和表达式 40
2.4.1 运算符和表达式 41
2.4.2 赋值运算符和赋值表达式 41
2.4.3 算术运算符和算术表达式 42
2.4.4 关系运算符和关系表达式 43
2.4.5 逻辑运算符和逻辑表达式 44
2.4.6 条件运算符和条件表达式 46
2.4.7 逗号运算符和逗号表达式 47
2.4.8 运算符的优先级 47
2.5 不同类型数据之间的转换 48
2.5.1 隐式转换 48
2.5.2 显式转换 49
2.6 数据的输入Input 50
2.6.1 使用scanf()函数实现数据输入 50
2.6.2 一个字符的输入函数——getchar() 52
2.7 数据的输出Output 54
2.7.1 使用printf()函数实现数据格式输出 54
2.7.2 使用putchar()函数实现字符输出 57
2.8 顺序结构程序设计举例 57
2.9 本章知识点综合应用 59
案例一 59
案例二 60
案例三 62
2.1 0小结 63
2.1 1 习题 64
第2篇 C语言编程入门 67
第3章 迎战:选择结构设计 67
3.1 入门——选择结构简介 67
3.2 选择结构设计的实现——if语句 67
3.2.1 if结构语法 67
3.2.2 if结构程序实例 68
3.3 选择结构设计实现——if...else法 70
3.3.1 if...else结构语法 70
3.3.2 if...else结构程序实例 71
3.4 选择结构设计——多重if法 72
3.4.1 多重if结构的语法格式 72
3.4.2 多重if结构程序实例 73
3.5 选择结构设计——if嵌套法 74
3.5.1 if嵌套结构语法 75
3.5.2 if和else配对问题 75
3.5.3 if嵌套结构程序实例 76
3.6 选择结构设计——switch法 77
3.6.1 switch结构语法 77
3.6.2 switch语句的注意事项 78
3.6.3 switch的执行过程 79
3.6.4 switch结构程序实例 79
3.7 switch和多重if的比较 82
3.8 选择结构程序设计举例 84
3.9 本章知识点综合应用 87
案例一 87
案例二 88
案例三 90
3.1 0小结 92
3.1 1 习题 92
第4章 火攻:循环结构设计 96
4.1 循环结构 96
4.2 while循环 97
4.2.1 while循环语法及含义 97
4.2.2 使用while循环程序举例 98
4.3 do...while循环 100
4.3.1 do...while循环结构及含义 100
4.3.2 使用do...while循环程序实例 101
4.4 for循环 103
4.4.1 for循环结构及含义 103
4.4.2 for循环的注意事项 105
4.4.3 使用for循环程序举例 106
4.5 循环嵌套 107
4.5.1 循环嵌套原则 107
4.5.2 使用循环嵌套程序举例 108
4.6 三种循环的比较 110
4.7 跳转语句 112
4.7.1 使用break语句实现循环程序中的跳转 112
4.7.2 使用continue语句实现程序跳转 113
4.7.3 使用goto语句实现程序跳转 114
4.8 循环结构程序设计举例 115
4.9 本章知识点综合应用 118
案例一 118
案例二 119
案例三 121
4.1 0小结 123
4.1 1习题 124
第3篇 数组应用 127
第5章 兵势一:数组 127
5.1 一维数组 127
5.1.1 定义一维数组 127
5.1.2 访问一维数组元素 128
5.1.3 初始化一维数组 129
5.1.4 数组的存储形式 132
5.1.5 注意事项 133
5.1.6 一维数组示例 135
5.2 二维数组 138
52.1 定义二维数组 138
5.2.2 访问二维数组元素 139
5.2.3 二维数组的存储方式 140
5.2.4 初始化二维数组 140
5.2.5 二维数组示例 142
5.3 多维数组 145
5.3.1 定义多维数组 145
5.3.2 多维数组示例 146
5.4 本章知识点综合应用 147
案例一 147
案例二 149
案例三 151
5.5 小结 153
5.6 习题 153
第6章 兵势二:字符串 157
6.1 字符数组 157
6.1.1 字符数组的定义 157
6.1.2 字符数组的初始化 159
6.1.3 二维字符数组 160
6.1.4 字符数组实例 162
6.2 字符串 165
6.2.1 字符串常量 166
6.2.2 字符串变量 168
6.2.3 格式化输出字符串 169
6.2.4 格式化输入字符串 170
6.3 字符串应用示例 171
6.3.1 取字符串长度 171
6.3.2 统计字符串中的单词个数 172
6.3.3 颠倒单词顺序 174
6.3.4 改进的颠倒单词顺序实现 176
6.4 本章知识点综合应用 179
案例一 179
案例二 180
案例三 181
6.5 小结 182
6.6 习题 183
第4篇 函数及指针应用 189
第7章 谋攻:函数 189
7.1 函数的概念 189
7.1.1 什么是函数 189
7.1.2 函数的分类 190
7.1.3 函数的定义 191
7.1.4 main()函数 193
7.2 函数的工作过程 194
7.2.1 程序结构 194
7.2.2 函数执行过程 195
7.3 编写函数 196
7.3.1 函数头 196
7.3.2 返回值类型 196
7.3.3 参数列表 197
7.3.4 函数体 198
7.3.5 函数原型 198
7.4 函数的参数 199
7.4.1 形参和实参 200
7.4.2 参数传递过程 200
7.4.3 函数参数的“值调用” 200
7.4.4 引用调用 202
7.4.5 数组作为函数参数 204
7.4.6 指针作为函数参数 208
7.4.7 main()函数的参数 209
7.5 函数调用 210
7.5.1 函数调用方式 210
7.5.2 被调函数的说明 211
7.5.3 函数的返回值 212
7.6 几种典型的函数调用形式 214
7.6.1 赋值调用与引用调用 214
7.6.2 嵌套调用 215
7.6.3 递归调用 219
7.7 函数及其变量的作用域 225
7.7.1 函数的作用域 225
7.7.2 函数的变量作用域 226
7.8 本章知识点综合应用 227
案例一 227
案例二 229
案例三 230
7.9 小结 234
7.1 0习题 234
第8章 虚实:指针 236
8.1 内存和变量的关系 236
8.1.1 计算机内存 236
8.1.2 变量的存储 236
8.2 指针和简单变量 238
8.2.1 指针的概念 238
8.2.2 指针的创建 239
8.2.3 指针变量的初始化 240
8.2.4 指针变量的引用 241
8.2.5 给函数传递指针 245
8.3 指针变量的赋值 246
8.3.1 初始化赋值 246
8.3.2 取地址赋值 247
8.3.3 指针之间赋值 247
8.3.4 数组赋值 247
8.3.5 字符串赋值 248
8.3.6 函数入口赋值 248
8.4 指针和数组的关系 248
8.4.1 指针、数组和地址间的关系 248
8.4.2 指针变量的运算 250
8.4.3 用指针操作数组元素 251
8.5 指向多维数组的指针 254
8.5.1 理解二维数组的地址 254
8.5.2 多维数组的指针表示 257
8.5.3 指向多维数组的指针变量 258
8.5.4 数组名作为函数的参数 263
8.5.5 指向数组的指针小结 267
8.6 指针和字符串 267
8.6.1 指针表示字符串 267
8.6.2 字符串指针作函数参数 269
8.6.3 字符数组和字符指针的区别 271
8.7 指针数组 272
8.7.1 指针数组的概念 272
8.7.2 用指针数组处理字符串 275
8.7.3 指针数组作函数参数 277
8.8 指向指针的指针 278
8.8.1 理解指向指针的指针 279
8.8.2 二级指针变量与数组 281
8.9 指针和函数 286
8.9.1 返回指针的函数 286
8.9.2 指向函数的指针 288
8.1 0指针和const变量 291
8.1 0.1 用const控制指针 291
8.1 0.2 const的几种特殊用法 292
8.1 1 指针总结 294
8.1 1.1 明确分辨各种指针类型 294
8.1 1.2 正确理解指针 294
8.1 2本章知识点综合应用 295
案例一 295
案例二 297
案例三 300
8.1 3小结 303
8.1 4习题 304
第5篇 C语言高级数据类型 307
第9章 用间一:新的数据类型 307
9.1 结构的定义 307
9.2 结构变量的定义 308
9.2.1 先定义结构,再定义结构变量 308
9.2.2 在定义结构的同时,定义结构变量 309
9.2.3 直接说明结构变量 309
9.3 结构变量的使用 310
9.4 结构变量的初始化 311
9.5 结构数组 313
9.5.1 结构数组的定义和引用 313
9.5.2 结构数组的初始化 315
9.5.3 结构数组实例 316
9.6 结构指针 317
9.6.1 定义结构指针 317
9.6.2 结构指针的引用 318
9.6.3 用指针处理结构数组 320
9.7 嵌套结构 322
9.7.1 内含数组的结构 322
9.7.2 包含指针的结构 323
9.7.3 包含结构的结构 323
9.8 向函数传递结构型参数 327
9.8.1 传递结构变量的值 327
9.8.2 传递结构指针到函数 329
9.9 本章知识点综合应用 331
案例一 331
案例二 333
案例三 335
9.1 0小结 336
9.1 1 习题 336
第10章 用间二:联合、枚举和位域 338
10.1 联合体(union) 338
10.1.1 定义联合类型 338
10.1.2 定义联合变量 339
10.1.3 联合变量成员的引用 339
10.1.4 联合体型变量数组 340
10.1.5 联合体型变量指针 341
10.1.6 在结构中嵌套联合类型 342
10.1.7 结构体和联合体的区别 345
10.2 枚举 346
10.2.1 定义枚举类型 346
10.2.2 定义枚举变量 347
10.2.3 枚举类型变量的赋值 348
10.3 类型说明 350
10.4 二进制数据存储 351
10.4.1 数据的存储 352
10.4.2 不同数据类型的二进制表示 352
10.5 位运算 355
10.5.1 位逻辑运算符 355
10.5.2 移位运算符 358
10.5.3 位运算的复合赋值运算符 359
10.5.4 位运算的用途 359
10.6 位域 360
10.6.1 定义位域结构 360
10.6.2 位域变量的声明 362
10.6.3 位域的使用 362
10.6.4 位域与联合的使用 364
10.7 本章知识点综合应用 366
案例一 366
案例二 367
案例三 368
10.8 小结 370
10.9 习题 370
第11章 作战:预处理 372
11.1 预处理简介 372
11.1.1 预处理功能 372
11.1.2 预处理命令 372
11.2 宏定义命令 373
11.2.1 无参数的宏定义 373
11.2.2 带参数的宏定义 376
11.2.3 #undef命令 377
11.2.4 预处理操作符#和## 378
11.3 文件包含指令 381
11.4 条件编译指令 382
11.4.1 #if、#else、#endif命令 382
11.4.2 #elif命令 384
11.4.3 #ifdef、#ifndef命令 386
11.4.4 使用#defined和#undef 387
11.5 其他预处理命令 387
11.5.1 预定义的宏名 387
11.5.2 重置行号和文件名命令#line 388
11.5.3 修改编译器设置命令#pragma 389
11.5.4 产生错误信息命令#error 389
11.6 内联函数 390
11.7 小结 392
11.8 习题 392
第6篇 实战篇 395
第12章 白鹤亮翅:文件操作 395
12.1 打开、关闭和检测文件 395
12.1.1 打开文件 395
12.1.2 文件检查函数 399
12.1.3 读写文件数据 399
12.1.4 关闭文件 410
12.2 文件定位函数 410
12.2.1 fseek()函数 410
12.2.2 ftell()函数 413
12.2.3 rewind()函数 414
12.3 文件管理函数的应用 416
12.3.1 删除文件 416
12.3.2 重命名文件 417
12.4 使用临时文件 418
12.5 非缓冲文件系统 419
12.5.1 open()函数 420
12.5.2 close()函数 420
12.5.3 create()函数 420
12.5.4 read()函数 421
12.5.5 write()函数 421
12.5.6 lseek()函数 421
12.6 小结 422
12.7 习题 423
第13章 收兵:C语言程序综合应用 425
13.1 八皇后问题 425
13.2 汉诺塔问题 429
13.3 循环赛问题 430
13.4 猴子选大王 432
13.5 三个数的最小公倍数问题 433
13.6 背包问题 436
13.7 马遍历问题 438
13.8 流水线作业问题 440
13.9 迷宫问题 441
13.1 0关键路径 443
13.1 1 推箱子小游戏的大致实现 445
13.1 2小结 471
13.1 3 习题 471