本书为适应新工科复合型人才对计算思维和问题求解能力的要求而编写,全书共10章,主要内容包括:计算思维与问题求解、简单的C程序设计、程序结构、函数、数组、指针、结构体、文件、常用算法和经典人工智能算法。本书兼顾计算思维与程序设计基础知识,注重问题抽象,通过案例分析,逐步给出问题求解算法与程序实现,引导读者建立算法思维和程序设计思维。本书将数值计算贯穿于各章节,并通过“常用算法”和“经典人工智能算法”两章,进一步拓展读者问题求解思维,提高读者解决复杂专业领域问题的能力和学科交叉融合的能力。
样章试读
目录
- 目录
第1章 计算思维与问题求解 1
1.1 计算思维与程序设计 1
1.2 计算机内部数据表示及0-1符号化 2
1.2.1 位、字节与字长 2
1.2.2 二进制基本运算规则 3
1.2.3 进位制及其相互转换 6
1.2.4 数值型信息表示方法 8
1.2.5 非数值型信息表示方法 12
1.3 计算机结构与机器指令 16
1.3.1 存储器组成结构 18
1.3.2 运算器组成结构 19
1.3.3 控制器组成结构 20
1.3.4 机器指令表示方法 20
1.4 机器程序执行 22
1.5 计算机问题求解的灵魂——算法 24
1.5.1 算法及其特性 24
1.5.2 算法表示方法 24
1.6 程序设计中的数据和数据结构 27
1.7 计算机问题求解的步骤 28
1.7.1 求解问题的一般步骤 28
1.7.2 C语言程序开发步骤 30
1.8 C语言程序结构及实例 32
1.8.1 C程序构成 32
1.8.2 C编程风格 34
1.9 习题 34
第2章 简单的C程序设计 37
2.1 标准C程序基本框架 37
2.2 常量和变量 39
2.2.1 常量 39
2.2.2 变量 39
2.3 数据类型 40
2.3.1 数据类型的一般概念 40
2.3.2 整型数据 41
2.3.3 实型数据 45
2.3.4 字符型数据 47
2.4 运算符 50
2.4.1 赋值运算符 50
2.4.2 基本算术运算符 53
2.4.3 自增、自减运算符 54
2.4.4 逗号运算符 55
2.5 标准输入输出 56
2.5.1 输出字符函数putchar 56
2.5.2 输入字符函数getchar 57
2.5.3 输出函数printf 57
2.5.4 输入函数scanf 59
2.6 数值算法——线性插值 60
2.7 综合应用实例 61
2.7.1 估算身高 61
2.7.2 飞机升力系数 63
2.7.3 汽车停车视距 64
2.8 习题 65
第3章 程序结构 69
3.1 条件表达式 69
3.1.1 关系运算符 69
3.1.2 关系运算符实例解析 69
3.1.3 逻辑运算符 70
3.1.4 逻辑运算符实例解析 70
3.1.5 条件运算符 71
3.1.6 条件运算符实例解析 72
3.2 选择结构语句 73
3.2.1 单分支结构if语句 73
3.2.2 双分支结构if语句 73
3.2.3 多分支选择结构if语句 76
3.2.4 多分支选择结构switch语句 77
3.2.5 if语句的嵌套 80
3.3 循环结构语句 83
3.3.1 循环结构while语句 83
3.3.2 循环结构for语句 84
3.3.3 循环结构do-while语句 85
3.4 循环的嵌套 87
3.5 循环结构的讨论 88
3.5.1 while循环、for循环和do-while循环的比较 88
3.5.2 提前终止循环break语句 89
3.5.3 提前结束本次循环continue语句 89
3.6 数值方法——一元函数定积分近似求解 90
3.7 综合应用实例 91
3.7.1 摄氏度与华氏度的对照表 91
3.7.2 奖金发放情况 92
3.7.3 舰船识别 93
3.8 习题 95
第4章 函数 99
4.1 模块化程序设计与C函数 99
4.2 函数定义和函数声明 99
4.2.1 函数的定义 99
4.2.2 函数的声明 101
4.3 数的参数和返回值 102
4.3.1 形式参数和实际参数 102
4.3.2 函数的返回值 103
4.4 函数调用 103
4.4.1 函数调用的一般形式 103
4.4.2 函数的嵌套调用 104
4.4.3 函数的递归调用 104
4.5 变量的作用域 107
4.5.1 局部变量 107
4.5.2 全局变量 108
4.6 变量的存储类别 109
4.6.1 自动变量 110
4.6.2 寄存器变量 110
4.6.3 外部变量 111
4.6.4 静态变量 112
4.7 内部函数和外部函数 113
4.7.1 内部函数 113
4.7.2 外部函数 113
4.8 数值方法——非线性方程的解 114
4.8.1 简单迭代法 114
4.8.2 牛顿迭代法 116
4.8.3 弦截法 118
4.9 综合应用实例 120
4.9.1 随机数序列生成 120
4.9.2 气温模拟数据生成 123
4.9.3 系统可靠性仿真 124
4.10 习题 126
第5章 数组 131
5.1 一维数组 131
5.1.1 一维数组的定义和初始化 131
5.1.2 一维数组元素的引用 132
5.2 二维数组 132
5.2.1 二维数组的定义和初始化 132
5.2.2 二维数组元素的引用 133
5.3 字符数组 134
5.3.1 字符数组的初始化 134
5.3.2 字符数组的输入输出 135
5.3.3 字符串处理函数 135
5.4 数组作为参数 137
5.4.1 数组元素作为函数实参 137
5.4.2 数组名作为函数参数 138
5.5 数据序列的排序与查找 141
5.5.1 选择排序法 141
5.5.2 冒泡排序法 142
5.5.3 插入排序法 143
5.5.4 二分查找法 143
5.6 数值方法——线性方程组求解 145
5.7 综合应用实例 149
5.7.1 矩阵的应用 149
5.7.2 学生成绩统计 151
5.7.3 字符串截取 153
5.7.4 加密算法 154
5.8 习题 155
第6章 指针 161
6.1 地址和指针 161
6.1.1 指针的引入 161
6.1.2 内存数据的访问方式 163
6.2 指针变量的定义及使用 165
6.2.1 指针变量的定义 165
6.2.2 指针变量的使用方法 166
6.3 指针与数组 169
6.3.1 指针的加、减运算规则 170
6.3.2 访问数组元素的几种方法 171
6.3.3 多维数组与指针 172
6.3.4 使用指针处理数组举例 174
6.4 指针与字符串 177
6.4.1 用字符数组存放字符串 177
6.4.2 用字符指针指向字符串 178
6.4.3 使用指针处理字符串 181
6.5 指针与函数 182
6.5.1 指针作函数的参数 182
6.5.2 使用指针作参数传递一组
数据 184
6.6 指向指针的指针 185
6.6.1 指向指针的指针变量的定义 186
6.6.2 指向指针的指针变量的举例 187
6.7 综合应用实例 187
6.7.1 整数循环移位 187
6.7.2 数制间的转换 189
6.7.3 寻找区间内的素数 191
6.7.4 运用指针插入排序 192
6.8 习题 196
第7章 结构体 202
7.1 结构体类型 202
7.2 结构体类型变量 203
7.2.1 结构体类型变量的定义 203
7.2.2 结构体变量的引用 204
7.2.3 结构体变量的初始化 206
7.3 结构体数组 206
7.3.1 结构体数组的定义 207
7.3.2 结构体数组的引用 207
7.4 结构体类型的变量作为函数参数 209
7.4.1 结构体成员作为函数参数 209
7.4.2 结构体变量作为函数参数 210
7.5 结构体指针变量 211
7.6 链表 212
7.7 数值方法 215
7.7.1 复数的乘除 215
7.7.2 用二分法求解非线性方程 217
7.8 综合应用实例 219
7.8.1 学生成绩统计 219
7.8.2 “三天打鱼两天晒网”问题 221
7.8.3 税后工资计算 223
7.9 习题 225
第8章 文件 232
8.1 文件概述 232
8.2 文件型指针 233
8.3 文件的打开与关闭 234
8.3.1 文件的打开 235
8.3.2 文件的关闭 235
8.4 文件的读写 236
8.4.1 文件尾部测试函数 236
8.4.2 文件的字符读/写函数 236
8.4.3 文件的字符串读/写函数 237
8.4.4 文件的数据块读/写函数 237
8.4.5 文件的格式化读/写函数 238
8.5 文件定位 239
8.5.1 文件位置指针重置函数 239
8.5.2 文件位置指针定位函数 240
8.6 数值方法——拉格朗日插值 240
8.7 综合应用实例 241
8.7.1 统计文本文件中字符的个数 241
8.7.2 判断两个文件内容是否相同 242
8.7.3 逐行排序数据文件 243
8.7.4 读取数据文件计算拉格朗日插值 245
8.8 习题 247
第9章 常用算法 250
9.1 穷举法 250
9.2 分治法 251
9.3 递推法 252
9.4 递归法 253
9.5 迭代法 254
9.6 贪心算法 256
9.7 回溯法 258
9.8 动态规划算法 260
9.9 习题 263
第10章 经典人工智能算法 266
10.1 概述 266
10.2 K-Means聚类算法 267
10.2.1 K-Means聚类算法简介 267
10.2.2 K-Means聚类算法原理 267
10.2.3 K-Means聚类算法实例 269
10.3 KNN算法 270
10.3.1 KNN算法简介 270
10.3.2 KNN算法原理 270
10.3.3 KNN算法实例 272
10.4 朴素贝叶斯分类算法 274
10.4.1 朴素贝叶斯分类算法简介 274
10.4.2 朴素贝叶斯分类算法原理 274
10.4.3 朴素贝叶斯分类算法实例 276
10.5 单层感知机算法 277
10.5.1 单层感知机算法简介 277
10.5.2 单层感知机算法原理 278
10.5.3 单层感知机算法实例 281
10.6 遗传算法 284
10.6.1 遗传算法简介 284
10.6.2 遗传算法原理 284
10.6.3 遗传算法实例 289
10.7 决策树算法 290
10.7.1 决策树算法简介 290
10.7.2 决策树算法原理 291
10.7.3 决策树算法实例 293
10.8 习题 295
参考文献 300