轻松学C语言
2013-4
电子工业出版社
邢太北
《轻松学C语言(图解版)》由浅入深,全面、系统地介绍了C语言的开发技术。《轻松学C语言(图解版)》改变了过去编程书籍枯燥乏味的文字讲解方式,采用大量的插图,生动形象地再现了C语言开发需要的所有知识,使读者能够轻松地掌握学习内容。同时,每一章配以习题,方便读者对该章的学习进行检测。另外作者还专门为《轻松学C语言(图解版)》录制了大量的配套教学视频,以帮助读者更好地了解《轻松学C语言(图解版)》内容。这些视频和书中的实例源代码一起收录于《轻松学C语言(图解版)》的配书光盘中。
全书共分3篇。第1篇“基础篇”介绍C语言的发展、C语言的开发工具的安装过程、第一个C语言程序和图形界面程序的运行过程等知识;第2篇“语法篇”介绍C语言中的数据、语句、程序控制结构、数组、函数、指针、结构体与共用体、编译预处理等技术;第3篇“应用篇”介绍了C语言的基本应用,文件和目录的操作运算、数值处理运算、字符串的处理运算、动态内存管理以及变量的存储类别,数据结构的操作、排序、经典的C语言例题分析等技术。
基 础 篇
第1章 第一个C语言程序 2
1.1 C语言开发概述 2
1.1.1 C语言的发展 2
1.1.2 C语言的特点 3
1.2 构建开发环境 3
1.2.1 Visual C++ 6.0的软硬件需求 3
1.2.2 安装Visual C++ 6.0 4
1.3 第一个C语言程序 5
1.3.1 C程序的结构 6
1.3.2 编写源程序 6
1.3.3 编译调试程序 7
1.3.4 运行程序 8
1.3.5 查看源文件 8
1.4 小结 8
1.5 习题 8
语 法 篇
第2章 数据的表示 12
2.1 数 12
2.1.1 十进制 12
2.1.2 二进制 13
2.1.3 八进制 15
2.1.4 十六进制 16
2.2 数据的描述 18
2.2.1 C的构词方式——标识符 18
2.2.2 特殊的标识符 19
2.2.3 整数类型 20
2.2.4 浮点类型 21
2.2.5 字符类型 22
2.3 变量 23
2.3.1 变量的声明和定义 23
2.3.2 不变的变量——常量 25
2.4 小结 27
2.5 习题 27
第3章 程序的基本单位——语句 31
3.1 语句的构成 31
3.2 运算符 32
3.2.1 赋值运算 32
3.2.2 数据类型的转换 35
3.3 常用的其他运算符 37
3.3.1 位运算符 37
3.3.2 算术运算符 39
3.3.3 自增、自减运算符 40
3.3.4 逗号运算符 41
3.3.5 复合赋值运算符 41
3.3.6 sizeof运算符 43
3.3.7 分隔符 43
3.3.8 运算符的优先级 44
3.4 语句块 45
3.4.1 语句块的构成 45
3.4.2 作用域 45
3.5 小结 46
3.6 习题 47
第4章 程序控制结构 51
4.1 语句块的执行方式—— 顺序结构 51
4.2 条件的表达 52
4.2.1 单一条件的表达—— 关系运算符 52
4.2.2 多条件的表达—— 逻辑运算符 53
4.3 选择结构 54
4.3.1 最简单的选择—— 条件运算符 54
4.3.2 if语句单分支形式 55
4.3.3 if else语句双分支形式 56
4.3.4 else if形式语句 57
4.3.5 嵌套if形式语句 58
4.3.6 switch语句 60
4.3.7 选择结构典型实例—— 两数计算器 63
4.4 循环结构 64
4.4.1 for语句 65
4.4.2 while语句 66
4.4.3 do while语句 66
4.4.4 循环语句的区别 67
4.5 意外情况的表达—— 转向语句 68
4.5.1 continue语句 68
4.5.2 break语句 68
4.5.3 goto语句 69
4.6 小结 70
4.7 习题 70
第5章 数组 73
5.1 数组简介 73
5.2 数组的来源 73
5.3 一维数组 74
5.3.1 一维数组的声明和定义 74
5.3.2 一维数组的初始化 74
5.3.3 一维数组的引用 75
5.3.4 一维数组程序举例 76
5.4 二维数组 76
5.4.1 二维数组的声明和定义 77
5.4.2 二维数组的初始化 77
5.4.3 二维数组的引用 77
5.4.4 二维数组程序举例 78
5.5 字符数组 79
5.5.1 字符数组的声明和定义 79
5.5.2 字符数组的初始化 79
5.5.3 字符数组的引用 80
5.5.4 字符数组的输入/输出 81
5.6 综合实例—— 杨辉三角 82
5.7 小结 84
5.8 习题 84
第6章 函数 91
6.1 函数概述 91
6.2 函数的声明与定义 92
6.2.1 无参函数的声明和定义的一般形式 92
6.2.2 有参函数的声明和定义的一般形式 93
6.2.3 空函数 94
6.3 函数的形式参数和函数的返回值 94
6.3.1 形式参数 94
6.3.2 函数的返回值 94
6.4 函数调用 95
6.4.1 函数调用的方式 96
6.4.2 函数的参数传递 97
6.5 函数的嵌套和递归 97
6.5.1 函数的嵌套 98
6.5.2 函数的递归 98
6.6 数组作为函数参数 100
6.6.1 数组元素作函数实参 100
6.6.2 数组名作函数实参 100
6.7 字符数组相关的输入/输出函数 101
6.7.1 逐个字符的输入和输出 101
6.7.2 字符串的输入和输出 103
6.8 函数应用举例——猴子吃桃问题 103
6.9 小结 105
6.10 习题 105
第7章 指针 111
7.1 地址和指针的概念 111
7.2 变量的指针和指向变量的指针变量 112
7.2.1 变量的指针与指针变量 112
7.2.2 指针变量的赋值与引用 112
7.2.3 指针变量作为函数的参数 113
7.3 指针与数组 114
7.3.1 指向数组元素的指针 114
7.3.2 通过指针引用数组元素 114
7.3.3 数组名作为函数参数 115
7.4 指针与字符串 117
7.5 函数指针与指针函数 118
7.5.1 用函数指针调用函数 118
7.5.2 使用函数指针作函数参数 119
7.5.3 指针函数——返回指针的函数 120
7.6 指针数组与二级指针 121
7.6.1 指针数组 121
7.6.2 二级指针——指向指针的指针 122
7.6.3 指针数组作为main()函数的参数 123
7.7 有关指针的数据类型和指针运算 125
7.7.1 有关指针的数据类型 125
7.7.2 指针运算 126
7.7.3 void指针类型 126
7.8 小结 126
7.9 习题 126
第8章 结构体与共用体 131
8.1 结构体的概念及结构体类型的定义 131
8.1.1 为什么使用结构体 131
8.1.2 定义结构体类型 132
8.2 结构体变量 133
8.2.1 结构体变量的定义 133
8.2.2 结构体变量的引用 133
8.2.3 结构体变量的初始化 134
8.2.4 结构体变量作为函数参数 135
8.3 结构体数组 136
8.3.1 结构体数组的定义 137
8.3.2 结构体数组的引用以及初始化 137
8.3.3 结构体数组作为函数的参数 139
8.4 结构体指针 140
8.4.1 指向结构体变量的指针 140
8.4.2 指向结构体数组的指针 141
8.4.3 指向结构体的指针作函数参数 142
8.5 位域 143
8.5.1 定义位域结构 143
8.5.2 位域的声明 144
8.5.3 位域的使用 144
8.6 共用体 145
8.6.1 共用体的概念 145
8.6.2 共用体变量的定义及引用 147
8.6.3 共用体与结构体的嵌套 149
8.7 枚举类型 149
8.7.1 枚举类型及其变量的定义 149
8.7.2 枚举类型应用举例 151
8.8 typedef自定义类型 151
8.9 小结 153
8.10 习题 153
第9章 编译预处理 157
9.1 宏定义 157
9.1.1 不带参数的宏定义 158
9.1.2 带参数的宏定义 159
9.1.3 宏的取消 160
9.1.4 标准宏对象 161
9.2 “文件包含”处理 161
9.3 条件编译 163
9.3.1 #ifdef命令 163
9.3.2 #ifndef 163
9.3.3 #if命令 164
9.4 小结 165
9.5 习题 165
应 用 篇
第10章 文件和目录操作运算 170
10.1 C文件概述 170
10.2 文件的处理形式 171
10.3 文件型指针 172
10.4 文件打开与关闭 173
10.4.1 打开文件—— fopen()函数 173
10.4.2 打开文件是否成功 174
10.4.3 关闭文件—— fclose()函数 174
10.5 文件读写函数 174
10.5.1 字符读写函数—— fputc()函数和fgetc()函数 175
10.5.2 块读写函数—— fread函数和fwrite函数 177
10.5.3 格式化文件输入输出—— fprintf函数和fscanf函数 178
10.6 文件的定位 179
10.6.1 是否到文件末尾—— feof()函数 179
10.6.2 移到开头—— rewind函数 179
10.6.3 fseek()函数和ftell()函数 180
10.7 出错检测 181
10.7.1 ferror()函数 181
10.7.2 clearerr()函数 181
10.8 目录基本操作 182
10.9 文件存储路径操作 183
10.10 保存文件信息的结构 184
10.11 文件管理 184
10.11.1 文件重命名 184
10.11.2 删除文件 185
10.11.3 使用临时文件 186
10.12 小结 187
10.13 习题 188
第11章 数值处理运算 193
11.1 绝对值运算 193
11.2 指数与对数运算 194
11.3 三角形运算函数 194
11.3.1 正余弦与反正余弦函数 194
11.3.2 正切与反正切函数 195
11.3.3 直角三角形斜边运算 196
11.4 比较运算 197
11.5 双精度分解运算 197
11.6 随机数运算 198
11.7 小结 199
11.8 习题 199
第12章 字符串处理运算 203
12.1 字符串的输入 203
12.1.1 逐个字符输入 203
12.1.2 整个字符串输入 203
12.2 将其他数据类型转换成字符串的运算 204
12.3 字符串的操作 206
12.3.1 字符串的复制 206
12.3.2 字符串的比较 207
12.3.3 字符串大小写转换 209
12.3.4 字符串的字符个数相关运算 209
12.4 字符串的输出 211
12.4.1 逐个字符的输出 211
12.4.2 整个字符串的输出 211
12.4.3 字符串输入输出小结 212
12.5 小结 212
12.6 习题 212
第13章 动态内存管理及变量的存储类别 217
13.1 动态内存管理的来源 217
13.2 动态内存管理 218
13.2.1 动态存储区域分配空间 219
13.2.2 释放动态分配的存储空间 220
13.2.3 重新分配内存空间 221
13.2.4 sizeof—— 判断数据类型长度符 222
13.3 变量的存储类别 223
13.3.1 静态存储方式与动态存储方式 223
13.3.2 static—— 声明静态局部变量 224
13.3.3 自动变量 225
13.3.4 register—— 寄存器变量 226
13.3.5 extern声明外部变量 227
13.3.6 static的使用 229
13.4 小结 229
13.5 习题 230
第14章 简单数据结构 234
14.1 线性表 234
14.1.1 线性表的基本概念 234
14.1.2 线性表的基本操作 235
14.1.3 线性表的顺序存储结构 236
14.1.4 顺序表的基本操作 237
14.1.5 顺序表的插入 238
14.1.6 顺序表的查找 240
14.1.7 顺序表的删除 241
14.1.8 顺序表操作的算法典型案例 242
14.1.9 线性表的链式存储结构 242
14.1.10 单链表的基本操作 243
14.1.11 单链表的插入结点运算 245
14.1.12 单链表的删除结点运算 247
14.1.13 单链表的查找结点运算 248
14.2 栈 249
14.2.1 栈的定义和基本运算 249
14.2.2 栈的顺序存储 250
14.2.3 栈的链式存储 254
14.3 队列 256
14.3.1 队列的定义和基本运算 257
14.3.2 非循环队列的顺序存储 257
14.3.3 循环队列的顺序存储 260
14.3.4 队列的链式存储 262
14.4 小结 264
14.5 习题 265
第15章 排序 269
15.1 冒泡排序 269
15.1.1 冒泡排序算法描述 269
15.1.2 冒泡排序算法实现 270
15.1.3 冒泡排序算法实例 270
15.2 快速排序 271
15.2.1 快速排序算法描述 271
15.2.2 快速排序算法实现 272
15.2.3 快速排序算法实例 273
15.3 简单选择排序 273
15.3.1 简单选择排序算法描述 273
15.3.2 选择排序算法实现 274
15.3.3 选择排序算法实例 274
15.4 堆排序 275
15.4.1 堆排序算法描述 275
15.4.2 堆排序算法实现 277
15.4.3 堆排序算法实例 277
15.5 直接插入排序 278
15.5.1 直接插入排序算法描述 278
15.5.2 直接插入排序算法实现 278
15.5.3 直接插入排序算法示例 278
15.6 希尔排序 278
15.6.1 希尔(Shell)排序算法描述 278
15.6.2 希尔排序算法实现 281
15.6.3 希尔排序算法实例 281
15.7 合并排序 282
15.7.1 合并排序算法描述 282
15.7.2 合并排序算法实现 283
15.7.3 合并排序算法实例 284
15.8 基数排序 284
15.8.1 基数排序的算法描述 284
15.8.2 基数排序算法实现 286
15.9 小结 286
15.10 习题 286
第16章 经典例题分析 292
16.1 八皇后问题 292
16.1.1 八皇后的问题分析 292
16.1.2 八皇后的算法设计 293
16.2 汉洛塔问题 294
16.2.1 汉洛塔问题分析 294
16.2.2 汉洛塔的算法设计 295
16.3 猴子选大王 296
16.3.1 猴子选大王问题分析 296
16.3.2 猴子选大王的算法设计 297
16.4 三个数的最小公倍数 298
16.4.1 三个数的最小公倍数的问题分析 298
16.4.2 三个数的最小公倍数的算法设计 299
16.5 背包问题 300
16.5.1 背包问题分析 300
16.5.2 背包问题的算法设计 301
16.6 循环赛问题 302
16.6.1 循环赛问题分析图 302
16.6.2 循环赛问题的算法设计 303
16.7 马遍历问题 304
16.7.1 马遍历问题分析图 304
16.7.2 马遍历算法设计 305
16.8 魔术方阵 307
16.8.1 魔术方阵的分析图 307
16.8.2 魔术方阵的算法设计 307
16.9 三色旗 309
16.9.1 三色旗的分析图 309
16.9.2 三色旗的算法设计 309
16.10 迷宫问题 312
16.10.1 迷宫的问题分析图 312
16.10.2 迷宫的算法实现 312
16.11 小结 315
16.12 习题 315