本书以程式设计为主线,在详细阐述程式设计基本概念、原理和方法的基础上,结合实践教学和学科竞赛的实际情况,通过经典实例讲解和实训,使学生掌握利用C语言进行结构化程式设计的技术和方法。注重培养良好的编程风格,掌握常见的算法思路,真正提高学生运用C语言编程以解决实际问题的综合能力,为后续课程实践环节的教学打下良好基础。
基本介绍
- 书名:C语言程式设计与实践(第2版)
- 作者:凌 云 谢满德 陈志贤 吴海燕
- ISBN:978-7-111-55849-1
- 定价:¥39.00
- 出版社:机械工业出版社
- 出版时间:2017-02
- 开本:16
本书特色
实例丰富。在介绍理论知识的同时,书中还给出了大量的实例和实训内容,以提高学生的动手实践能力。
重点突出。针对C语言语法庞杂、有些语句可以相互替代、有些语法不常使用的情况,本书重点介绍了基本的、常用的C语言语法知识,使学生容易理解和掌握。
融会贯通。着重介绍程式设计语言的共性,培养学生自学其他程式设计语言的能力。
重点突出。针对C语言语法庞杂、有些语句可以相互替代、有些语法不常使用的情况,本书重点介绍了基本的、常用的C语言语法知识,使学生容易理解和掌握。
融会贯通。着重介绍程式设计语言的共性,培养学生自学其他程式设计语言的能力。
本书目录
前言
教学建议
第1章 C语言与程式设计概述 1
1.1 初见C语言程式 1
1.2 计算机与程式设计 2
1.2.1 指令与程式 2
1.2.2 程式与程式设计 3
1.2.3 程式设计和程式设计语言 3
1.2.4 程式设计过程 4
1.3 C语言学习与自然语言学习的关係 5
1.4 C语言的发展历史、现状与特点 6
1.4.1 C语言的发展历史和现状 6
1.4.2 C语言的特点 7
习题 7
第2章 示例驱动的C语言语法元素 8
2.1 变数与表达式 8
2.2 分支语句 9
2.2.1 if语句 9
2.2.2 switch语句 11
2.3 循环语句 12
2.3.1 while循环语句 12
2.3.2 for循环语句 12
2.4 符号常量 13
2.5 输入/输出 14
2.6 数组 15
2.7 函式 15
2.8 算法 17
2.8.1 算法概念 17
2.8.2 流程图与算法描述 18
习题 19
第3章 基本数据类型和表达式 20
3.1 基本语法单位 20
3.1.1 基本符号 20
3.1.2 关键字 20
3.1.3 标识符 20
3.2 数据类型 21
3.3 常量与变数 22
3.3.1 常量 22
3.3.2 变数 25
3.3.3 变数的初始化 27
3.4 表达式和运算符 28
3.4.1 算术运算符 28
3.4.2 赋值运算符 30
3.4.3 关係运算符 31
3.4.4 逻辑运算符 33
3.4.5 位运算符 35
3.4.6 逗号运算符 38
3.4.7 条件运算符 39
3.4.8 运算符的优先权和结合性 39
3.5 各类数值型数据间的混合运算 41
习题 41
第4章 输入/输出语句 43
4.1 putchar函式 43
4.2 printf函式 44
4.2.1 printf函式的形式 44
4.2.2 格式说明字元 45
4.3 getchar函式 51
4.4 scanf函式 51
4.4.1 一般形式 51
4.4.2 格式说明 52
4.4.3 执行scanf函式过程中应注意的问题 53
4.5 程式示例 55
习题 56
第5章 C语言程式结构 58
5.1 C语句 58
5.2 程式设计基础 59
5.3 结构化程式设计的三种基本结构 60
5.3.1 顺序结构 60
5.3.2 选择结构 60
5.3.3 循环结构 61
5.4 if分支语句 62
5.4.1 第一种if语句形式 62
5.4.2 第二种if语句形式 62
5.4.3 第三种if语句形式 63
5.4.4 if语句的嵌套 65
5.4.5 程式示例 67
5.5 switch分支语句 68
5.6 while循环语句 71
5.7 do…while循环语句 73
5.8 for循环语句 75
5.9 break语句和continue语句 79
5.9.1 break语句 80
5.9.2 continue语句 80
5.10 多重循环的嵌套 81
5.11 程式示例 83
习题 85
第6章 数组 88
6.1 一维数组 88
6.1.1 一维数组的定义 88
6.1.2 一维数组元素的引用 89
6.1.3 一维数组元素的初始化 89
6.2 二维数组 96
6.2.1 双下标变数 97
6.2.2 二维数组及其定义 97
6.2.3 二维数组的初始化 98
6.2.4 二维数组套用示例 99
6.3 综合套用示例 100
6.4 字元数组 103
6.4.1 字元串和字元串结束标誌 105
6.4.2 字元数组的输入/输出 105
6.4.3 字元串函式 106
6.4.4 二维的字元数组 110
6.4.5 字元数组套用示例 111
习题 116
第7章 函式 118
7.1 函式的定义 119
7.2 函式的一般调用 121
7.2.1 函式调用的形式 121
7.2.2 形式参数和实际参数 121
7.2.3 函式的返回值 124
7.2.4 函式调用的方式 125
7.2.5 主调函式和被调函式的相对位置关係 126
7.2.6 函式调用时值的单向传递性 128
7.2.7 函式调用示例 128
7.3 函式的嵌套调用 130
7.4 递归调用 133
7.4.1 函式的递归调用 133
7.4.2 递归调用套用示例 134
7.5 用数组作为函式参数 137
7.5.1 用数组元素作为函式实参 137
7.5.2 用数组名作为函式参数 138
7.5.3 用多维数组作为函式参数 139
7.6 变数的作用域——局部变数和全局变数 140
7.6.1 局部变数 140
7.6.2 全局变数 142
7.7 变数的存储类别和生存期 144
7.7.1 变数的存储类别 144
7.7.2 动态变数 144
7.7.3 静态变数 148
7.7.4 外部变数 149
7.8 内部函式和外部函式 153
7.8.1 内部函式 153
7.8.2 外部函式 153
习题 154
第8章 编译预处理 159
8.1 宏定义 159
8.1.1 不带参数的宏定义 159
8.1.2 带参数的宏定义 161
8.2 档案包含 165
8.3 条件编译 167
8.3.1 条件编译语句1 167
8.3.2 条件编译语句2 168
8.3.3 条件编译语句3 169
习题 170
第9章 指针 175
9.1 地址和指针的概念 175
9.2 指针变数和地址运算符 175
9.2.1 指针变数的定义 175
9.2.2 指针变数的使用 176
9.3 指针和数组 177
9.3.1 通过指针存取数组元素 177
9.3.2 字元串和指针 179
9.4 指针和函式 180
9.4.1 用指针作为函式的参数 180
9.4.2 用指针作为函式的返回值 182
9.4.3 指向函式的指针 184
9.5 多级指针 187
9.5.1 多级指针的概念和使用 187
9.5.2 多级指针和多级数组 188
9.5.3 命令行参数 190
9.6 指针和动态存储管理 191
9.6.1 概述 191
9.6.2 malloc函式和free函式 192
9.6.3 动态存储管理的套用 192
9.7 指针和指针运算小结 195
习题 196
第10章 结构与联合 199
10.1 结构体类型变数的定义和引用 199
10.1.1 结构体类型变数的定义 201
10.1.2 结构体类型变数的引用 201
10.1.3 结构体类型变数的初始化 201
10.2 结构体数组的定义和引用 203
10.3 结构体指针的定义和引用 204
10.3.1 指向结构体类型变数的指针的使用 204
10.3.2 指向结构体类型数组的指针的使用 205
10.4 鍊表的定义和操作 208
10.4.1 鍊表 208
10.4.2 鍊表的建立 209
10.4.3 输出鍊表元素 211
10.4.4 删除鍊表元素 211
10.4.5 插入鍊表元素 212
10.4.6 查询鍊表元素 213
10.5 联合 213
10.5.1 联合的定义 213
10.5.2 联合成员的引用 215
10.5.3 套用示例 216
10.5.4 数组、结构和联合类型的比较 217
10.6 枚举类型 217
10.7 用typedef定义类型名 219
习题 220
第11章 档案操作 223
11.1 档案的基本概念 223
11.1.1 概述 223
11.1.2 档案分类 223
11.1.3 缓冲档案系统和非缓冲档案系统 223
11.1.4 流式档案 224
11.2 标準档案 224
11.3 档案类型指针 225
11.4 档案的打开与关闭 225
11.4.1 档案的打开 225
11.4.2 档案的关闭 226
11.5 档案的顺序读写 227
11.6 档案顺序读写的常用函式 227
11.7 档案顺序读写的套用示例 234
11.8 档案的随机读写 235
11.8.1 档案的定位 235
11.8.2 档案操作的出错检测 238
11.9 非缓冲档案系统 238
习题 241
第12章 综合实训 243
12.1 综合实训1:俄罗斯方块游戏 243
12.1.1 问题描述 243
12.1.2 问题分析 243
12.1.3 数据结构分析 244
12.1.4 程式执行流程和设计分析 246
12.1.5 程式运行和测试 251
12.2 综合实训2:五子棋游戏 252
12.2.1 问题描述 252
12.2.2 问题分析 252
12.2.3 数据结构分析 252
12.2.4 程式执行流程和设计分析 254
12.2.5 程式运行和测试 258
12.3 综合实训3:员工管理系统 258
12.3.1 问题描述 258
12.3.2 问题分析 259
12.3.3 数据结构分析 259
12.3.4 程式执行流程和设计分析 260
12.3.5 程式运行和测试 262
12.4 综合实训设计中的分析与讨论 263
第13章 初涉ACM/ICPC 266
13.1 ACM/ICPC概述 266
13.2 迷宫问题与深度优先搜寻 267
13.2.1 问题描述 267
13.2.2 问题分析与求解 267
13.2.3 问题小结 269
13.3 斐波那契数列 269
13.3.1 问题描述 269
13.3.2 问题分析与求解 269
13.3.3 问题小结 270
13.4 8枚银币 271
13.4.1 问题描述 271
13.4.2 问题分析与求解 271
13.4.3 问题小结 273
13.5 筛选求质数 273
13.5.1 问题描述 273
13.5.2 问题分析与求解 273
13.5.3 问题小结 274
13.6 超长整数运算(大数运算) 275
13.6.1 问题描述 275
13.6.2 问题分析与求解 275
13.6.3 问题小结 276
13.7 经典01背包问题与动态规划算法 276
13.7.1 问题描述 276
13.7.2 问题分析与求解 276
13.7.3 问题小结 278
13.8 二分图的最大匹配、完美匹配和匈牙利算法 278
13.8.1 问题描述 278
13.8.2 问题分析与求解 278
13.8.3 问题小结 281
13.9 中序式转后序式(前序式) 281
13.9.1 问题描述 281
13.9.2 问题分析与求解 281
13.9.3 问题小结 283
13.10 一些提供练习服务的网站 283
参考文献 285
教学建议
第1章 C语言与程式设计概述 1
1.1 初见C语言程式 1
1.2 计算机与程式设计 2
1.2.1 指令与程式 2
1.2.2 程式与程式设计 3
1.2.3 程式设计和程式设计语言 3
1.2.4 程式设计过程 4
1.3 C语言学习与自然语言学习的关係 5
1.4 C语言的发展历史、现状与特点 6
1.4.1 C语言的发展历史和现状 6
1.4.2 C语言的特点 7
习题 7
第2章 示例驱动的C语言语法元素 8
2.1 变数与表达式 8
2.2 分支语句 9
2.2.1 if语句 9
2.2.2 switch语句 11
2.3 循环语句 12
2.3.1 while循环语句 12
2.3.2 for循环语句 12
2.4 符号常量 13
2.5 输入/输出 14
2.6 数组 15
2.7 函式 15
2.8 算法 17
2.8.1 算法概念 17
2.8.2 流程图与算法描述 18
习题 19
第3章 基本数据类型和表达式 20
3.1 基本语法单位 20
3.1.1 基本符号 20
3.1.2 关键字 20
3.1.3 标识符 20
3.2 数据类型 21
3.3 常量与变数 22
3.3.1 常量 22
3.3.2 变数 25
3.3.3 变数的初始化 27
3.4 表达式和运算符 28
3.4.1 算术运算符 28
3.4.2 赋值运算符 30
3.4.3 关係运算符 31
3.4.4 逻辑运算符 33
3.4.5 位运算符 35
3.4.6 逗号运算符 38
3.4.7 条件运算符 39
3.4.8 运算符的优先权和结合性 39
3.5 各类数值型数据间的混合运算 41
习题 41
第4章 输入/输出语句 43
4.1 putchar函式 43
4.2 printf函式 44
4.2.1 printf函式的形式 44
4.2.2 格式说明字元 45
4.3 getchar函式 51
4.4 scanf函式 51
4.4.1 一般形式 51
4.4.2 格式说明 52
4.4.3 执行scanf函式过程中应注意的问题 53
4.5 程式示例 55
习题 56
第5章 C语言程式结构 58
5.1 C语句 58
5.2 程式设计基础 59
5.3 结构化程式设计的三种基本结构 60
5.3.1 顺序结构 60
5.3.2 选择结构 60
5.3.3 循环结构 61
5.4 if分支语句 62
5.4.1 第一种if语句形式 62
5.4.2 第二种if语句形式 62
5.4.3 第三种if语句形式 63
5.4.4 if语句的嵌套 65
5.4.5 程式示例 67
5.5 switch分支语句 68
5.6 while循环语句 71
5.7 do…while循环语句 73
5.8 for循环语句 75
5.9 break语句和continue语句 79
5.9.1 break语句 80
5.9.2 continue语句 80
5.10 多重循环的嵌套 81
5.11 程式示例 83
习题 85
第6章 数组 88
6.1 一维数组 88
6.1.1 一维数组的定义 88
6.1.2 一维数组元素的引用 89
6.1.3 一维数组元素的初始化 89
6.2 二维数组 96
6.2.1 双下标变数 97
6.2.2 二维数组及其定义 97
6.2.3 二维数组的初始化 98
6.2.4 二维数组套用示例 99
6.3 综合套用示例 100
6.4 字元数组 103
6.4.1 字元串和字元串结束标誌 105
6.4.2 字元数组的输入/输出 105
6.4.3 字元串函式 106
6.4.4 二维的字元数组 110
6.4.5 字元数组套用示例 111
习题 116
第7章 函式 118
7.1 函式的定义 119
7.2 函式的一般调用 121
7.2.1 函式调用的形式 121
7.2.2 形式参数和实际参数 121
7.2.3 函式的返回值 124
7.2.4 函式调用的方式 125
7.2.5 主调函式和被调函式的相对位置关係 126
7.2.6 函式调用时值的单向传递性 128
7.2.7 函式调用示例 128
7.3 函式的嵌套调用 130
7.4 递归调用 133
7.4.1 函式的递归调用 133
7.4.2 递归调用套用示例 134
7.5 用数组作为函式参数 137
7.5.1 用数组元素作为函式实参 137
7.5.2 用数组名作为函式参数 138
7.5.3 用多维数组作为函式参数 139
7.6 变数的作用域——局部变数和全局变数 140
7.6.1 局部变数 140
7.6.2 全局变数 142
7.7 变数的存储类别和生存期 144
7.7.1 变数的存储类别 144
7.7.2 动态变数 144
7.7.3 静态变数 148
7.7.4 外部变数 149
7.8 内部函式和外部函式 153
7.8.1 内部函式 153
7.8.2 外部函式 153
习题 154
第8章 编译预处理 159
8.1 宏定义 159
8.1.1 不带参数的宏定义 159
8.1.2 带参数的宏定义 161
8.2 档案包含 165
8.3 条件编译 167
8.3.1 条件编译语句1 167
8.3.2 条件编译语句2 168
8.3.3 条件编译语句3 169
习题 170
第9章 指针 175
9.1 地址和指针的概念 175
9.2 指针变数和地址运算符 175
9.2.1 指针变数的定义 175
9.2.2 指针变数的使用 176
9.3 指针和数组 177
9.3.1 通过指针存取数组元素 177
9.3.2 字元串和指针 179
9.4 指针和函式 180
9.4.1 用指针作为函式的参数 180
9.4.2 用指针作为函式的返回值 182
9.4.3 指向函式的指针 184
9.5 多级指针 187
9.5.1 多级指针的概念和使用 187
9.5.2 多级指针和多级数组 188
9.5.3 命令行参数 190
9.6 指针和动态存储管理 191
9.6.1 概述 191
9.6.2 malloc函式和free函式 192
9.6.3 动态存储管理的套用 192
9.7 指针和指针运算小结 195
习题 196
第10章 结构与联合 199
10.1 结构体类型变数的定义和引用 199
10.1.1 结构体类型变数的定义 201
10.1.2 结构体类型变数的引用 201
10.1.3 结构体类型变数的初始化 201
10.2 结构体数组的定义和引用 203
10.3 结构体指针的定义和引用 204
10.3.1 指向结构体类型变数的指针的使用 204
10.3.2 指向结构体类型数组的指针的使用 205
10.4 鍊表的定义和操作 208
10.4.1 鍊表 208
10.4.2 鍊表的建立 209
10.4.3 输出鍊表元素 211
10.4.4 删除鍊表元素 211
10.4.5 插入鍊表元素 212
10.4.6 查询鍊表元素 213
10.5 联合 213
10.5.1 联合的定义 213
10.5.2 联合成员的引用 215
10.5.3 套用示例 216
10.5.4 数组、结构和联合类型的比较 217
10.6 枚举类型 217
10.7 用typedef定义类型名 219
习题 220
第11章 档案操作 223
11.1 档案的基本概念 223
11.1.1 概述 223
11.1.2 档案分类 223
11.1.3 缓冲档案系统和非缓冲档案系统 223
11.1.4 流式档案 224
11.2 标準档案 224
11.3 档案类型指针 225
11.4 档案的打开与关闭 225
11.4.1 档案的打开 225
11.4.2 档案的关闭 226
11.5 档案的顺序读写 227
11.6 档案顺序读写的常用函式 227
11.7 档案顺序读写的套用示例 234
11.8 档案的随机读写 235
11.8.1 档案的定位 235
11.8.2 档案操作的出错检测 238
11.9 非缓冲档案系统 238
习题 241
第12章 综合实训 243
12.1 综合实训1:俄罗斯方块游戏 243
12.1.1 问题描述 243
12.1.2 问题分析 243
12.1.3 数据结构分析 244
12.1.4 程式执行流程和设计分析 246
12.1.5 程式运行和测试 251
12.2 综合实训2:五子棋游戏 252
12.2.1 问题描述 252
12.2.2 问题分析 252
12.2.3 数据结构分析 252
12.2.4 程式执行流程和设计分析 254
12.2.5 程式运行和测试 258
12.3 综合实训3:员工管理系统 258
12.3.1 问题描述 258
12.3.2 问题分析 259
12.3.3 数据结构分析 259
12.3.4 程式执行流程和设计分析 260
12.3.5 程式运行和测试 262
12.4 综合实训设计中的分析与讨论 263
第13章 初涉ACM/ICPC 266
13.1 ACM/ICPC概述 266
13.2 迷宫问题与深度优先搜寻 267
13.2.1 问题描述 267
13.2.2 问题分析与求解 267
13.2.3 问题小结 269
13.3 斐波那契数列 269
13.3.1 问题描述 269
13.3.2 问题分析与求解 269
13.3.3 问题小结 270
13.4 8枚银币 271
13.4.1 问题描述 271
13.4.2 问题分析与求解 271
13.4.3 问题小结 273
13.5 筛选求质数 273
13.5.1 问题描述 273
13.5.2 问题分析与求解 273
13.5.3 问题小结 274
13.6 超长整数运算(大数运算) 275
13.6.1 问题描述 275
13.6.2 问题分析与求解 275
13.6.3 问题小结 276
13.7 经典01背包问题与动态规划算法 276
13.7.1 问题描述 276
13.7.2 问题分析与求解 276
13.7.3 问题小结 278
13.8 二分图的最大匹配、完美匹配和匈牙利算法 278
13.8.1 问题描述 278
13.8.2 问题分析与求解 278
13.8.3 问题小结 281
13.9 中序式转后序式(前序式) 281
13.9.1 问题描述 281
13.9.2 问题分析与求解 281
13.9.3 问题小结 283
13.10 一些提供练习服务的网站 283
参考文献 285