《C/C++规范设计简明教程》PDF下载

  • 购买积分:13 如何计算积分?
  • 作  者:李祎编著
  • 出 版 社:合肥:安徽大学出版社
  • 出版年份:2015
  • ISBN:9787566408785
  • 页数:361 页
图书介绍:本教材结合国内外教材优点,为推行核心思想“世界观-方法论-规则”的完整体现,在呈现结构和知识点的安排进行了大幅改革,并力图反映教学方法、学习方法和能力训练方法,反复地体现思维的提升和程序代码的复用等,以便真正提升学生的编程能力。基于对现实问题域的分析提出模型、模块设计,将函数、文件纳入模型、模块并从课程开始引入,在不断的问题需求中逐步加深对函数、文件的各层面的认识,直到课程结束。在基本的数据类型之后展开指针教学,将数据和数据地址作为一个事物的不可分隔的内因和外因同步引入,顺应了科学的认知结构,为数组、字符中、结构体等构造类型的教学提供了强有力的基础。教材的结构在三个方面进行了规定:第一,按知识结构章节划分而不按案例进行编写;第二,章节中知识点的划分按知识探索的规律和学生认知的思维递进;第三,提出一个典型案例,在不同的知识认知阶段实现不同的功能,而同时提出使用的局限,自然促使学生对知识结构的不满,进而提出解决问题的新途径和新方法,最后实现功能丰富完善的系统。

第1章 模型与模块 1

1.1 什么是程序、软件 1

1.1.1 程序、软件的概念 1

1.1.2 软件的分类 2

1.2 计算机语言的发展 2

1.3 C语言和C++语言 4

1.3.1 C/C++语言的起源和发展 4

1.3.2 C/C++语言的特点 5

1.3.3 学C还是学C++ 6

1.4 解决简单问题的一般步骤 6

1.5 第一个程序——初识main模块 6

1.6 面向过程的编程——模块设计 8

1.6.1 编程思想 8

1.6.2 模块设计——大象的经历 8

1.6.3 初识自定义模块 9

1.7 模块的有机组织——模型设计 9

1.7.1 模块的载体——文件 9

1.7.2 单文件设计模型 10

1.7.3 多文件设计模型 10

1.7.4 单文件设计模型和多文件设计模型的比较 11

1.7.5 模块、模型设计案例 11

1.8 程序的编辑、编译、连接、运行 13

1.8.1 建立项目 14

1.8.2 编辑文档 14

1.8.3 编译、连接、运行 16

1.9 代码的执行顺序 17

1.10 数学函数和程序函数比较 18

本章总结 18

第2章 调试技术 20

2.1 程序中的3种错误 20

2.1.1 编译错误 20

2.1.2 连接错误 22

2.1.3 运行错误 22

2.2 程序编写策略与技巧 24

2.3 建立结构清晰的程序目录结构 25

2.4 程序核心代码的拷贝和重新调入 26

2.5 模块(函数)的封闭性 26

2.6 常见系统数学函数 27

本章总结 28

第3章 基本数据类型 29

3.1 数据类型简介 29

3.1.1 数据类型概念 29

3.1.2 数据类型划分 30

3.1.3 数据类型分析 30

3.2 基本数据类型 31

3.2.1 整数类型 31

3.2.2 小数类型 31

3.2.3 字符类型 32

3.2.4 逻辑类型 33

3.2.5 数据类型取别名 33

3.3 基本类型定义的常量 33

3.3.1 常量概念 33

3.3.2 常量的直接表达 33

3.3.3 常量的符号表达 34

3.4 基本类型定义的变量 35

3.4.1 变量的概念与赋值 35

3.4.2 变量的特点 36

3.4.3 变量的命名规则 36

3.5 基本类型定义变量的内存快照 37

3.5.1 内存快照 37

3.5.2 数据间混合运算 38

3.6 初步认识全局变量和局部变量 40

3.7 运算符和表达式 41

3.7.1 运算符的种类 41

3.7.2 运算顺序 42

3.7.3 各种表达式 43

3.8 模块(函数)间如何联系 45

3.8.1 函数使用三步曲 45

3.8.2 问题域与函数定义格式 45

3.8.3 4种不同的函数格式 45

3.8.4 认识形参与实参 46

3.8.5 两个函数(模块)之间的联系 48

3.9 高聚合低耦合的模块设计思想与现实之间的平衡 48

3.10 常见的系统字符函数 49

本章总结 49

第4章 高级数据类型 51

4.1 指针类型 51

4.1.1 指针的定义 51

4.1.2 如何得到变量的指针(地址) 52

4.1.3 指针变量定义 52

4.1.4 指针变量的优点 53

4.1.5 指针的移动 54

4.2 指针做函数参数 54

4.2.1 一个无法解决的问题 54

4.2.2 指针做函数参数 55

4.2.3 指针做函数参数的使用步骤 57

4.2.4 函数注释规范再认识 57

4.2.5 指针做函数参数与return的异同 57

4.3 引用类型 59

4.4 引用和指针的区别 61

4.5 空类型和空类型指针变量 61

4.5.1 空类型 61

4.5.2 空类型指针 62

4.5.3 再认识main模块 62

4.6 可用的指针 63

4.6.1 不经意的遗憾 63

4.6.2 编译器分配空间 64

4.6.3 主动申请空间 64

4.6.4 空指针(闲指针) 65

4.7 指针类型的相互转化 66

4.8 深入认识全局变量和局部变量 67

4.8.1 作用域与生存期 67

4.8.2 static关键字 68

4.9 程序和数据的内存分布 69

本章总结 70

第5章 结构编程之顺序与选择 71

5.1 概述 71

5.2 程序的数据流程 72

5.3 数据的输入 75

5.3.1 交互输入 75

5.3.2 赋值输入 76

5.3.3 克隆输入 78

5.4 数据的输出 79

5.4.1 交互输出 79

5.4.2 赋值输出 82

5.4.3 克隆输出 82

5.5 选择语句的结构和使用技巧 83

5.5.1 单选语句 83

5.5.2 二选一语句 83

5.5.3 多选一语句 86

5.5.4 switch多选一语句 90

5.5.5 选择语句中表达式与0的比较 92

5.6 函数的生存期与作用域 92

5.6.1 普通函数 92

5.6.2 静态函数(内部函数) 93

5.7 多归属模块的相互调用 93

5.8 统一规划自定义函数库 94

5.9 项目内文件的精确分类 95

本章总结 95

第6章 结构编程之循环 96

6.1 循环的基本概念 97

6.1.1 循环的特征 97

6.1.2 循环三要素 97

6.2 while循环 97

6.3 规律的发现 99

6.4 do while循环 102

6.5 for循环 103

6.6 循环的非正常中断break和continue 105

6.6.1 中断整个循环break语句 105

6.6.2 中断本次循环continue语句 110

6.6.3 执行块中变量的生存期与作用域 111

6.7 递推和递归 112

6.7.1 一个有趣的数列 112

6.7.2 递推解决斐波那契数列 112

6.7.3 递归解决斐波那契数列 113

6.8 循环中大批数据的文本文件保存技术 115

6.8.1 文本文件的基本含义 115

6.8.2 文本文件的简单读写步骤 115

6.8.3 股票文本文件读写案例 116

6.9 预处理 117

6.9.1 预处理的概念 117

6.9.2 预处理的类型 117

6.9.3 带参数的宏定义 118

6.9.4 条件编译 118

6.10 随机数 120

6.10.1 随机数的概念及用法 120

6.10.2 仪器可靠性分析案例 123

6.11 如何开展多人合作编程 125

6.11.1 多人合作编程的指导思想 125

6.11.2 多人合作编程简易系统案例 125

6.11.3 多人合作编程可能出现的问题 127

本章总结 128

第7章 数组 129

7.1 为什么会出现数组类型 130

7.2 数组的基本概念 131

7.2.1 什么是数组 131

7.2.2 数组的分类 131

7.3 一维数组的结构 133

7.3.1 一维数组的定义 133

7.3.2 一维数组信息完整表达 134

7.3.3 一维数组元素的定位 135

7.3.4 一维数组元素的输入 135

7.3.5 一维数组元素的输出 136

7.3.6 一维数组的排序 136

7.4 一维数组名作函数参数的实质 137

7.4.1 传递数组的困惑 137

7.4.2 数组作参数传递的实质 139

7.4.3 建立并完善成绩管理系统的ScoreManager管理器 141

7.5 数组名作函数参数的危险 146

7.5.1 危险存在及避免危险 146

7.5.2 指向常变量的指针变量 147

7.6 一维数组与统计 147

7.6.1 一维数组的最大值、最小值、平均值 148

7.6.2 一维数组的方差 149

7.7 一维数组与简单数据文件 150

7.7.1 简单音频文件的处理案例 150

7.7.2 简单成绩文件的读写案例 151

7.7.3 成绩统计综合应用案例 153

7.8 二维数组的结构 154

7.8.1 二维数组的静态定义、空间分配、本质 154

7.8.2 二维数组的动态定义、空间分配、本质 158

7.8.3 二维数组名作函数参数 160

7.8.4 二维数组静态产生和动态产生的区别 162

7.9 二维数组与矩阵 163

7.9.1 矩阵概念与基本运算 163

7.9.2 矩阵计算土地体积案例 164

7.10 二维数组在模块设计中的不便及对策 166

7.11 二维数组地址转换的再思考 167

7.12 三维数组 169

7.12.1 三维数组结构、定义、操作思路 169

7.12.2 统计不同城市气温案例 170

7.12.3 图像色彩简易处理案例 173

本章总结 176

第8章 字符串 177

8.1 字符串的基本概念 177

8.1.1 字符串的本质 177

8.1.2 字符串的核心指标 178

8.1.3 字符串的分类 178

8.2 字符串的数组表示方法 179

8.3 字符串的指针表示方法 180

8.4 字符串的输入、输出 181

8.4.1 字符串的交互方式输入、输出 181

8.4.2 字符串的赋值方式输入、输出 183

8.4.3 指向常量字符串的指针变量不能输入 183

8.4.4 字符串非标准方式输入、输出 183

8.5 字符串作函数参数 185

8.6 字符串列表作函数参数 186

8.6.1 静态二维数组表示字符串列表 187

8.6.2 字符指针数组表示字符串列表 187

8.6.3 完善成绩管理系统的ScoreManager管理器 191

8.6.4 英汉简易词典的制作案例 192

8.7 返回指针的函数 193

8.8 契约编程 196

8.9 标准库里提供的字符串处理函数 197

8.9.1 标准库中字符串的处理函数 197

8.9.2 再论字符串拷贝 198

本章总结 200

第9章 结构体 201

9.1 结构体类型出现的原因 202

9.2 结构体类型的定义 202

9.3 结构体变量的定义和操作 203

9.3.1 结构体变量定义方法 203

9.3.2 结构体变量字段标记方法 203

9.3.3 结构体变量字段数据的输入和输出 203

9.3.4 结构体变量整体赋值 204

9.3.5 结构体变量的空间大小 204

9.4 结构体数据作函数参数 204

9.4.1 结构体变量传递 204

9.4.2 结构体变量地址(指针)传递 205

9.4.3 指向运算符 206

9.5 结构体数组的定义和操作 210

9.5.1 结构体数组定义方法 210

9.5.2 结构体数组元素标记方法 210

9.5.3 结构体数组元素的数据输入、输出 211

9.6 结构体数组作函数参数 211

9.6.1 传递结构体数组的两个核心指标 211

9.6.2 完善成绩管理系统的ScoreManager管理器 212

9.7 结构体变量的赋值与拷贝(克隆)思考 213

9.8 返回结构体指针 215

9.9 结构体类型数据作链表基元 218

9.10 函数编写优化 222

9.10.1 函数重载 222

9.10.2 运算符重载 224

9.10.3 函数模板 225

9.10.4 函数参数指定默认值 227

9.10.5 谨慎使用优化 227

9.11 共用体类型 227

9.12 枚举类型 229

本章总结 230

第10章 文件操作 231

10.1 文件与流的基本概念 231

10.2 文件指针与流对象方案 233

10.2.1 文件指针方案 233

10.2.2 流对象方案 234

10.3 标准文件的读写 235

10.3.1 文件指针方案 235

10.3.2 流对象方案 236

10.4 文本文件的读写 237

10.4.1 文件指针方案 238

10.4.2 使用文件指针完善成绩管理系统的ScoreManager管理器 247

10.4.3 流对象方案 248

10.4.4 使用流对象完善成绩管理系统的ScoreManager管理器 250

10.5 二进制文件的读写 251

10.5.1 二进制文件读写的必要性 251

10.5.2 文件指针方案 251

10.5.3 使用文件指针完善成绩管理系统的ScoreManager管理器 253

10.5.4 流对象方案 254

10.5.5 使用流对象完善成绩管理系统的ScoreManager管理器 254

10.6 函数的实质——函数指针 255

10.6.1 函数指针的定义 255

10.6.2 函数指针作参数和返回值 256

10.6.3 函数指针的应用价值 258

10.7 静态库和动态库函数 260

10.7.1 库的基本概念与分类 260

10.7.2 自定义静态库的建立与使用方法 262

10.7.3 自定义动态库的建立和引入方式 263

10.8 函数资源 265

本章总结 267

第11章 类和对象 268

11.1 面向过程和面向对象的编程思想 268

11.1.1 两种编程思想 268

11.1.2 两种编程思想所依赖的世界观 269

11.1.3 两种编程思想相互融合 270

11.2 面向对象程序设计中三种重要角色 270

11.3 类的三大特征 271

11.4 建立类 273

11.5 建立对象与内存表达 275

11.6 对象的初始化和撤销 275

11.6.1 默认的构造函数和重写默认的构造函数 276

11.6.2 重载的带参构造函数及默认值设置 276

11.6.3 特殊数据成员的初始化问题及初始化参数表 278

11.6.4 简单类的建立与使用案例 280

11.6.5 析构函数 284

11.6.6 拷贝构造函数 285

11.6.7 常数据成员、常成员函数、常对象 287

11.6.8 静态数据成员与静态成员函数 289

11.6.9 this指针与普通成员函数、常成员函数、静态成员函数关系 291

11.6.10 对象作参数和返回对象 292

11.7 对象操作方式优化——运算符重载 293

11.7.1 重载运算符的方式 293

11.7.2 重载运算符的限制 295

11.7.3 几种常用运算符的重载 295

11.7.4 new与delete运算符的再认识 299

11.7.5 类型的强制转换 303

11.7.6 智能指针 305

11.7.7 友元 306

11.8 对象之间的关系 308

11.8.1 关系的种类 308

11.8.2 关系的改变和表达 310

11.9 面向对象分析设计中的关联 311

11.9.1 关联完善登录系统 311

11.9.2 关联完善成绩管理系统 313

本章总结 316

第12章 继承 317

12.1 动态生成对象 317

12.2 派生方式 318

12.3 派生类定义和实现 318

12.3.1 派生类定义和实现 318

12.3.2 派生类定义对象与内存表达 321

12.3.3 子类对象初始化、赋值的再认识 322

12.3.4 聚合代替泛化(派生) 325

12.4 类的优化——类模板 326

12.5 标准类模板STL 328

12.5.1 STL简介 328

12.5.2 容器模板 328

12.5.3 迭代器模板 329

12.5.4 通用算法模板 331

12.5.5 函数对象与通用算法 332

12.5.6 命名空间 335

12.6 面向对象分析设计中的迭代 336

12.6.1 不断迭代、不断精化的思想 336

12.6.2 界面、业务、数据分层研究 336

12.6.3 迭代完善登录系统 337

12.6.4 迭代完善成绩管理系统 341

本章总结 344

第13章 多态转型 345

13.1 父类指针指向子类对象的尴尬 345

13.2 向上转型 347

13.3 多态技术 347

13.4 向下转型 351

13.5 面向对象分析设计中的抽象 352

13.5.1 抽象完善登录系统 352

13.5.2 抽象完善成绩管理系统 357

13.5.3 学生管理系统(登录和分数管理融合) 359

本章总结 360

参考文献 361