第1章 绪论 1
1.1 问题求解与程序设计 1
1.1.1 程序、程序设计与程序设计语言 2
1.1.2 程序设计的一般过程 2
1.2 算法及其描述方法 4
1.2.1 算法及其特性 4
1.2.2 算法的描述方法 5
1.3 程序设计语言 7
1.3.1 程序设计语言的发展 7
1.3.2 程序设计语言的排名 10
1.4 程序的基本构成 11
1.4.1 基本字符集 12
1.4.2 词法单位 12
1.4.3 语法单位 13
1.4.4 程序 15
1.5 程序的上机过程 16
1.5.1 编程环境 17
1.5.2 程序编辑 18
1.5.3 程序编译 19
1.5.4 程序连接 21
1.5.5 运行调试 23
1.6 程序风格 24
1.6.1 标识符的命名规则 24
1.6.2 注释 24
1.6.3 缩进 25
1.6.4 行文格式 25
习题1 27
第2章 数据的存储和组织 29
2.1 数据的存储介质——存储器 29
2.1.1 二进制 29
2.1.2 存储器 31
2.2 数据的组织 32
2.3 基本数据类型 33
2.3.1 整型 34
2.3.2 实型 36
2.3.3 字符型 37
2.3.4 逻辑型 38
习题2 39
第3章 数据的基本表现形式 41
【任务3.1】计算圆的面积 41
3.1 常量 41
3.1.1 字面常量 42
3.1.2 符号常量 44
3.2 变量 45
3.2.1 变量的概念 46
3.2.2 变量的定义和初始化 46
3.2.3 变量的赋值 48
3.2.4 强制类型定义 50
3.3 解决任务3.1的程序 51
3.4 程序设计实例 52
3.4.1 实例1——华氏温度转换为摄氏温度 52
3.4.2 实例2——计算本息和 52
习题3 53
第4章 数据的基本处理 55
4.1 输入输出 55
【任务4.1】计算圆的面积(改进版) 55
4.1.1 输入输出的概念 55
4.1.2 格式化输入输出函数 56
4.1.3 解决任务4.1的程序 58
4.2 数据的基本运算 59
【任务4.2】疯狂赛车 59
4.2.1 算术运算 59
4.2.2 逻辑运算 61
4.2.3 运算符的优先级和结合性 63
4.2.4 运算对象的类型转换 64
4.2.5 解决任务4.2的程序 67
4.3 程序设计实例 67
4.3.1 实例1——华氏温度转换为摄氏温度(改进版) 67
4.3.2 实例2——通用产品代码UPC 68
习题4 69
第5章 程序的基本控制结构 71
5.1 顺序结构 71
【任务5.1】整数的逆值 71
5.1.1 复合语句实现顺序结构 72
5.1.2 解决任务5.1的程序 73
5.2 选择结构 73
【任务5.2】水仙花数 73
5.2.1 逻辑值控制的选择结构 74
5.2.2 算术值控制的选择结构 78
5.2.3 解决任务5.2的程序 80
5.3 循环结构 80
【任务5.3】鸡兔同笼问题 80
5.3.1 当型循环结构 81
5.3.2 直到型循环结构 83
5.3.3 计数型循环结构 85
5.3.4 循环结构的嵌套 87
5.3.5 解决任务5.3的程序 88
5.4 其他控制语句 88
【任务5.4】素数判定 88
5.4.1 break语句 89
5.4.2 continue语句 90
5.4.3 解决任务5.4的程序 91
5.5 程序设计实例 91
5.5.1 实例1——百元买百鸡问题 91
5.5.2 实例2——歌德巴赫猜想 93
习题5 94
第6章 程序的组装单元——函数 97
6.1 用户定义的函数——自定义函数 97
【任务6.1】欧几里得算法(函数版) 97
6.1.1 函数定义 98
6.1.2 函数调用 100
6.1.3 函数声明 102
6.1.4 解决任务6.1的程序 103
6.2 系统定义的函数——库函数 104
【任务6.2】素数判定(函数版) 104
6.2.1 头文件与文件包含 104
6.2.2 标准输入输出函数 106
6.2.3 数学函数 110
6.2.4 随机函数 111
6.2.5 解决任务6.2的程序 112
6.3 变量的作用域 113
【任务6.3】鸡兔同笼问题(全局变量版) 113
6.3.1 局部变量 114
6.3.2 全局变量 116
6.3.3 解决任务6.3的程序 116
6.4 变量的生存期 117
【任务6.4】字数统计(静态变量版) 118
6.4.1 自动变量 118
6.4.2 静态变量 119
6.4.3 解决任务6.4的程序 120
6.5 程序设计实例 121
6.5.1 实例1——三角函数表 121
6.5.2 实例2——猜数游戏 122
习题6 124
第7章 变量的间接访问——指针 126
7.1 指针 126
【任务7.1】获取密电码 126
7.1.1 指针的概念 127
7.1.2 指针变量的定义和初始化 128
7.1.3 指针变量的赋值 130
7.1.4 指针所指变量的间接访问 131
7.1.5 解决任务7.1的程序 132
7.2 指针作为函数的参数 132
【任务7.2】鸡兔同笼问题(函数版) 132
7.2.1 值传递方式——函数的输入 133
7.2.2 指针传递方式——函数的输出 134
7.2.3 指针传递方式——函数的输入输出 136
7.2.4 解决任务7.2的程序 138
7.3 程序设计实例 139
7.3.1 实例1——歌德巴赫猜想(函数版) 139
7.3.2 实例2——求一元二次方程的根 141
习题7 142
第8章 批量同类型数据的组织——数组 144
8.1 一维数组 144
【任务8.1】舞林大会 144
8.1.1 一维数组的定义和初始化 145
8.1.2 一维数组的操作 147
8.1.3 一维数组作为函数的参数 149
8.1.4 解决任务8.1的程序 152
8.2 二维数组 153
【任务8.2】幻方问题 153
8.2.1 二维数组的定义和初始化 154
8.2.2 二维数组的操作 156
8.2.3 二维数组作为函数的参数 158
8.2.4 解决任务8.2的程序 159
8.3 程序设计实例 160
8.3.1 实例1——对角线元素之和 160
8.3.2 实例2——哥尼斯堡七桥问题 162
习题8 163
第9章 字符数据的组织——字符串 165
【任务9.1】恺撒加密 165
9.1 字符串变量的定义和初始化 166
9.1.1 字符数组 166
9.1.2 字符串指针 167
9.2 字符串的操作 168
9.2.1 输入输出操作 168
9.2.2 赋值操作 172
9.2.3 字符串的比较 173
9.2.4 常用字符串库函数 174
9.3 解决任务9.1的程序 174
9.4 程序设计实例 175
9.4.1 实例1——字数统计 175
9.4.2 实例2——字符串匹配 177
习题9 178
第10章 自定义数据类型 181
10.1 可枚举数据的组织——枚举类型 181
【任务10.1】荷兰国旗问题 181
10.1.1 枚举类型的定义 182
10.1.2 枚举变量的定义与初始化 183
10.1.3 枚举变量的操作 184
10.1.4 解决任务10.1的程序 185
10.2 不同类型数据的组织——结构体类型 187
【任务10.2】统计入学成绩 187
10.2.1 结构体类型的定义 188
10.2.2 结构体变量的定义和初始化 189
10.2.3 结构体变量的操作 191
10.2.4 解决任务10.2的程序 193
10.3 批量不同类型数据的组织——结构体数组 194
【任务10.3】统计入学成绩(改进版) 194
10.3.1 结构体数组的定义和初始化 195
10.3.2 解决任务10.3的程序 197
10.4 为自定义数据类型定义别名 198
10.5 程序设计实例 200
10.5.1 实例1——最近对问题 200
10.5.2 实例2——手机电话簿 202
习题10 204
第11章 再谈函数 206
11.1 函数的嵌套调用 206
【任务11.1】字符串的循环左移 206
11.1.1 函数的嵌套调用 207
11.1.2 解决任务11.1的程序 211
11.2 函数的递归调用 212
【任务11.2】Fibonacci数列 212
11.2.1 函数的递归调用 212
11.2.2 解决任务11.2的程序 215
11.3 程序设计实例 216
11.3.1 实例1——弦截法求方程的根 216
11.3.2 实例2——汉诺塔问题 217
习题11 219
第12章 再谈指针 222
12.1 指针与数组 222
【任务12.1】判断回文 222
12.1.1 指向一维数组的指针 223
12.1.2 指向二维数组的指针 225
12.1.3 指针数组 227
12.1.4 解决任务12.1的程序 229
12.2 指针与结构体 229
【任务12.2】统计入学成绩(函数版) 229
12.2.1 指向结构体的指针 230
12.2.2 结构体指针作为函数参数 232
12.2.3 解决任务12.2的程序 233
12.3 动态存储分配 234
【任务12.3】进制转换 234
12.3.1 申请和释放存储空间 235
12.3.2 指针和链表 238
12.3.3 解决任务12.3的程序 240
12.4 程序设计实例 242
12.4.1 实例1——发纸牌 242
12.4.2 实例2——约瑟夫环问题 244
习题12 247
第13章 再谈输入输出——文件 249
【任务13.1】统计入学成绩(文件版) 249
13.1 概述 250
13.1.1 文件的概念 250
13.1.2 文本文件和二进制文件 250
13.1.3 文件缓冲区 252
13.1.4 文件指针 252
13.1.5 文件的位置指针 253
13.2 文件的打开与关闭 254
13.2.1 文件的打开 254
13.2.2 文件的关闭 256
13.3 文件的读写操作 256
13.3.1 字符方式文件读写 256
13.3.2 字符串方式文件读写 258
13.3.3 格式化方式文件读写 260
13.3.4 二进制方式文件读写 262
13.4 解决任务13.1的程序 264
13.5 程序设计实例 266
13.5.1 实例1——文件复制 266
13.5.2 实例2——注册与登录 268
习题13 270
第14章 再谈程序的基本结构 272
【任务14.1】石头、剪子、布游戏 272
14.1 多文件程序 273
14.1.1 将源程序文件分解为多个程序文件模块 273
14.1.2 构建多文件程序 274
14.2 外部变量和外部函数 276
14.2.1 外部变量 276
14.2.2 外部函数 278
14.3 嵌套包含 279
14.3.1 条件编译 279
14.3.2 保护头文件 281
14.4 解决任务14.1的程序 283
习题14 287
第15章 基本的算法设计技术 288
15.1 蛮力法 288
15.1.1 设计思想 288
15.1.2 程序设计实例——简单选择排序 289
15.2 穷举法 291
15.2.1 设计思想 291
15.2.2 程序设计实例——假币问题 292
15.3 递推法 295
15.3.1 设计思想 295
15.3.2 程序设计实例——捕鱼知多少 296
15.4 分治法 297
15.4.1 设计思想 297
15.4.2 程序设计实例——数字旋转方阵 299
15.5 动态规划法 302
15.5.1 设计思想 302
15.5.2 程序设计实例——0/1背包问题 303
15.6 贪心法 305
15.6.1 设计思想 305
15.6.2 程序设计实例——埃及分数 306
习题15 308
附录A 标准ASCII码 310
附录B 运算符的优先级和结合性 311
附录C 常用库函数 312
附录D 程序设计实例索引 317
参考文献 319