本章介绍C++语言的基本元素;包括内置数据类型、对象的定义、表达式、语句、函数的定义和使用。本章将给出一个最小的合法C++程序,主要用它来讨论程序的编译过程、预处理,并将首次介绍C++对输入/输出的支持。我们还将给出一些简单但完整的C++程序。
1.1 问题的解决
程序常常是针对某些要解决的问题和任务而编写的。我们来看一个例子,某个书店将每本售出图书的书名和出版社,输入到一个文件中,这些信息以书售出的时间顺序输入,每两周店主将手工计算每本书的销售量,以及每个出版社的销售量。报表以出版社名称的字母顺序排列,以使下订单。现在,我们希望写一个程序来完成这项工作。
解决大问题的一张方法,是把它分解成许多小问题。理想情况下,这些小问题可以很容易地被解决。然后,再把它们合在一起,就可以解决大问题了。如果新分割的小问题解决起来还是太大,就把它分隔得再小一些,重复整个过程,直到能够解决每个小问题。这个策略就是分而治之(divide and conquer)和逐步求精(stepwise refinement)。书店问题可以分解成四个子问题(或任务):
1. 读销售文件;
2. 根据书名和出版社计算销售量;
3. 以出版社名称对书名进行排序;
4. 输出结果。
我们知道怎样解决第1、2和4个子问题,因此它们不需要进一步分解。但是,第3个子问题解决起来还是有些大,所以对这个子问题重复我们的做法,继续分解:
3a. 按出版社排序;
3b. 对每个出版社的书,按书名排序;
3c. 在每个出版社的组中,比较相邻的书名,如果两者匹配,增加第一个的数量,删除第二个。
3a、3b、3c所代表的问题,现在都已经能够解决了。由于我们能够解决这些子问题,因此也就能够有效地解决原始的大问题了。而且,我们也知道任务的原始顺序是不正确的,正确的动作序列应该是:
1. 读销售文件;
2. 对文件排序——先按出版社,然后再出版社内部按书名排序;
3. 压缩重复的人名;
4. 将结果写入文件。
这个动作序列就是算法(algorithm)。下一步我们把算法转换成一种特定的程序设计语言——在这里是C++语言。