## 1.1 什么是编程语言
你即将学习的编程语言是C++。自1998年起的AP考试都以C++为基础。在这之前,采用的是Pascal。C++和Pascal都是__高级编程语言__,你可能听说过的其他高级语言有Java、C和FORTRAN。
你可能从“高级编程语言”这个名字中得知还有低级编程语言。低级编程语言一般指的是机器语言或者汇编语言。一般来说,计算机只能执行用低级语言编写的程序。因此,高级语言编写的程序需要先转换成低级语言再执行。高级语言的一个小缺点就是这一转换过程需要耗费一些时间。
但是,高级语言具有巨大的优势。首先,用高级语言编程要容易得多,这意味着该程序的编程时间较短,简明易读,正确性较高。其次,高级语言具有可移植的优势。这意味着用高级语言编写的程序只要经过略微的修改就可以在不同的计算机操作系统上运行。而用低级语言编写的程序只能在某一种计算机系统上运行,若要在另一种系统上运行,则需要重新编写代码。
鉴于这些优势,几乎所有的程序都是用高级语言编写。低级语言只应用在少数特殊场景中。
有两种将高级语言翻译成低级语言的方式:__解释__或者__编译__。解释器就是一个读取高级程序并执行的程序。实际上,解释器逐行翻译程序,交替读取代码行及执行命令,如图1-1所示。
![figure_0015_0002](https://box.kancloud.cn/03dec6653239eb010274963b41c3265c_630x201.jpg)
图1-1
编译器则会在执行命令前,一次性地将全部高级程序代码翻译成机器语言。通常可以将编译程序作为一个单独的步骤,稍后再执行编译后的代码。在这种情况下,高级程序称为__源代码__;编译后的程序称为__目标代码__或者__可执行代码__。
以下面这种情况为例,假设你用C++编写程序。你可能选择一个文本编辑器来编写程序(文本编辑器就是一个简单的文字处理器)。当程序编写完成时,可以将它保存为 program.cpp。program 是你自己命名的文件名,后缀.cpp 则表示文件为 C++源代码。
然后,根据编程环境,可以关闭文本编辑器,运行编译器。编译器会读取源代码,编译源代码并创建一个包含目标代码的新文件 program.o ,或者可执行文件program.exe,如图1-2所示。
![figure_0015_0003](https://box.kancloud.cn/b6fbf8c7a7cd91a9bca506e1f73ba94e_732x202.jpg)
图1-2
下一个步骤就是运行程序,这一步需要程序的执行器。程序的执行器需要加载可运行程序(从硬盘复制到内存)并让计算机开始执行程序。
尽管这一过程看起来有点复杂,但是好消息是在绝大多数的编程环境(有时称为开发环境)中,这些步骤已经能够自动执行。一般来说,只需要编写一段程序,输入一条命令就可以完成编译和运行过程。另一方面,了解程序执行过程中有哪些步骤在后台运行是很有用的,这样在出错的时候你可以很快发现问题所在。
- 译者简介
- 作者简介
- 第1章 编程方式
- 1.1 什么是编程语言
- 1.2 什么是程序
- 1.3 什么是调试
- 1.4 形式语言和自然语言
- 1.5 第一个程序
- 1.6 术语
- 第2章 变量和类型
- 2.1 输出更多
- 2.2 值
- 2.3 变量
- 2.4 赋值
- 2.5 输出变量
- 2.6 关键字
- 2.7 运算符
- 2.8 计算顺序
- 2.9 字符类型的运算符
- 2.10 组合
- 2.11 术语
- 第3章 函数
- 3.1 浮点数
- 3.2 从double转换为int
- 3.3 数学函数
- 3.4 复合表达式
- 3.5 添加新的函数
- 3.6 定义和用法
- 3.7 多函数程序
- 3.8 形参和实参
- 3.9 形参和局部变量
- 3.10 多参数函数
- 3.11 带返回值的函数
- 3.12 术语
- 第4章 条件和递归
- 4.1 模运算符
- 4.2 条件执行
- 4.3 选择执行
- 4.4 链式条件
- 4.5 嵌套条件
- 4.6 return语句
- 4.7 递归
- 4.8 无限递归
- 4.9 递归函数的调用栈图
- 4.10 术语
- 第5章 带返回值的函数
- 5.1 返回值
- 5.2 程序开发
- 5.3 复合用法
- 5.4 重载
- 5.5 布尔值
- 5.6 布尔型变量
- 5.7 逻辑操作符
- 5.8 布尔函数
- 5.9 main函数返回值
- 5.10 多重递归
- 5.11信心的跳跃
- 5.12 更多的例子
- 5.13 术语
- 第6章 迭代
- 6.1 多次赋值
- 6.2 迭代
- 6.3 while语句
- 6.4 表格
- 6.5 二维表
- 6.6 封装和广义化
- 6.7 函数
- 6.8 更多封装
- 6.9 局部变量
- 6.10 更多广义化
- 6.11 术语
- 第7章 字符串和其他
- 7.1 字符串容器
- 7.2 apstring变量
- 7.3 字符串中的字符
- 7.4 长度
- 7.5 遍历
- 7.6 运行时错误
- 7.7 find函数
- 7.8 自定义find函数
- 7.9 循环和计数
- 7.10 递增和递减操作符
- 7.11 字符串拼接
- 7.12 apstring的可变性
- 7.13 apstrings的可比较性
- 7.14 字符分类
- 7.15 其他apstring函数
- 7.16 术语
- 第8章 结构体
- 8.1 复合值
- 8.2 Point对象
- 8.3 访问实例变量
- 8.4 操作结构体
- 8.5 将结构体作为参数
- 8.6 值传递
- 8.7 引用传递
- 8.8 矩形
- 8.9 返回结构体类型
- 8.10 将其他类型按引用传递
- 8.11 获取用户输入
- 8.12 术语
- 第9章 更多结构体
- 9.1 Time
- 9.2 printTime
- 9.3 对象函数
- 9.4 纯函数
- 9.5 const参数
- 9.6 修改器
- 9.7 填写函数
- 9.8 哪个最好
- 9.9 增量式开发VS规划
- 9.10 普遍化
- 9.11 算法
- 9.12 术语
- 第10章 vector
- 10.1 访问元素
- 10.2 复制vector
- 10.3 for循环
- 10.4 vector的长度
- 10.5 随机数
- 10.6 统计
- 10.7 随机数的vector
- 10.8 计数
- 10.9 检查其他值
- 10.10 直方图
- 10.11 单次遍历的解决方案
- 10.12 随机种子
- 10.13 术语
- 第11章 成员函数
- 11.1 对象和方法
- 11.2 print
- 11.3 隐式变量访问
- 11.4 另一个例子
- 11.5 第三个例子
- 11.6 更复杂的例子
- 11.7 结构体
- 11.8 初始化还是构造
- 11.9 最后一个例子
- 11.10 头文件
- 11.11 术语
- 第12章 包含对象的vector
- 12.1 复合形式
- 12.2 Card对象
- 12.3 printCard函数
- 12.4 equals函数
- 12.5 isGreater函数
- 12.6 包含Card对象的vector
- 12.7 printDeck函数
- 12.8 搜索
- 12.9 二分查找
- 12.10 vector和子 vector
- 12.11 术语
- 第13章 向量对象
- 13.1 枚举类型
- 13.2 switch语句
- 13.3 Deck
- 13.4 另一个构造函数
- 13.5 Deck成员函数
- 13.6 洗牌
- 13.7 排序
- 13.8 subdeck
- 13.9 洗牌和处理
- 13.10 合并排序
- 13.11 术语
- 第14章 类和不变式
- 14.1 私有数据和私有类
- 14.2 什么是类
- 14.3 复数
- 14.4 访问器函数
- 14.5 输出
- 14.6 支持复数运算的函数
- 14.7 支持复数运算的其他函数
- 14.8 不变式
- 14.9 先验条件
- 14.10 私有函数
- 14.11 术语
- 第15章 文件输入/输出和apmatrix
- 15.1 流
- 15.2 文件输入
- 15.3 文件输出
- 15.4 输入解析
- 15.5 数字解析
- 15.6 Set数据结构
- 15.7 apmatrix
- 15.8 距离矩阵
- 15.9 合适的距离矩阵
- 15.10 术语
- 附录A AP类的快速参考
- 版权声明
- 版权