Ok, 那接下来呢,就让我们来考虑几个大问题。 那在考虑这几个大问题之前呢,我想给大家提个要求。 我现在啊,希望大家不要站在一个学习 程序设计语言的这么一个角度。 也不要站在一个使用程序设计语言的这么一个角度。我希望大家能 把自己啊,当作一个程序设计语言的设计者。 也就是说,如果你想要创造一门程序设计语言的话, 你应该怎么去思考底下的这几个问题。 好,我们来看第一个问题。第一个问题呢,是说 既然在程序里面有各种各样的 “词”,那是不是无论我们在程序里边写什么样的“词”, 或者是写什么样的 “单词”,计算机都能明白呢?看我们刚才的这个程序, 这个程序里头有各种各样的 “词”,比方说, “int”, 比方说,“for”, 比方说,"if", 比方说 “return”,这是这个程序里边出现的 “词”。 那,是不是写什么“词”,这个计算机都能明白呢? 这是第一个问题。我们先看问题,待会儿再给大家答案。 第二个问题。 那是不是无论我们在程序里边写什么“数”, 和 “计算符号”,计算机都能明白呢? 比方说在刚才我们的程序里头,出现了很多 “数”, 那很幸运,在这个程序里头,出现的都是整数,而且都是两位的十进制整数。 那,这个程序里边能写 “小数“ 吗?能写"分数“ 吗? 能写 “负数“ 吗? 那是不是写,写这些 “数” 计算机能明白吗? 哪些 “数” 是能明白呢? 同时,在这个程式里头也出现了很多的运算符号,比方说,“等号”, “小于号”,“大于号”, “加加号”,等等等等。 那是不是写什么运算符号,计算机都能明白啊? 这是第二个问题。 第三个问题啊,更重要。 是这样的,在这个世界上啊, 我们想要用程序来表达的这种逻辑, 千千万万,纷繁复杂, 我们想让计算机去做一些事情,那么我们就要向计算机去描述,怎么去做。 你可能要让它做这件事情,你也可能要让它做那件事情。 不同的事情可能要用不同的逻辑去描述。 那比方说在这个程序里头,如果我们想表达,轮流不断的去做一件事情,我们用的是 "for", 这样的一个 “句式” 。如果我们想表达,“如果” ,某个条件成立的话, 我们要做一件事情,我们用的是 “if" 的 “句式”。这些呢, 都是用来告诉计算机的 “句式”。 它们表达的都是某种逻辑。 那么这个世界上可能要用程序来表达的逻辑,纷繁复杂。 那程序设计语言里面得有多少种这种 “句式” 才是足够的呢? 总结一下,这个问题就是说,这个世界上呢可能要用程序 来描述的那种逻辑啊,纷繁复杂, 那程序设计语言里面得设计多少种的“句式” 才足够让我来用它们描述各种各样纷繁复杂的逻辑? 哇,这是一个很大的问题。很坦诚的跟大家说,这个问题啊, 是我刚刚开始学程序设计语言的时候啊, 心里面特别大的一个问题。疑惑了好久,后来才找到答案。 那么这三个问题呢,就是我想让大家站在一个程序语言设计者的角度, 来考虑的三个问题。 那么下面呢,我们就来逐一的作一个分析。 Ok, 我们先来看第一个问题。 是不是无论我们在程序里面写什么单词,计算机都能明白?按照常理来想一下我们就知道, 肯定是 “No"。肯定不是说我们写什么东西,都能够明白的。 那如果是你的话,你来设计一门程序设计语言的话,你会怎么做呢? 我估计每个人都会想到这个。我肯定是要定义一些单词啰。 其实呢,如你想象,程序设计语言里头,就是这么做的。 那么程序设计语言定义了一些有特定含义的 “关键字”。 计算机呢,最初的时候只能明白这些简单的 “关键字”。 那紧接着有一个问题了。那多少个关键字呢? 那是不是要定义很多很多 “关键字” 才可以呢? Ok, 我现在就告诉大家,其实不多,非常不多。 计算机最初能够认识的单词啊, 也就是这么三十几个。 这三十几个词啊,在C++程序设计语言里头,都有某种确定的含义。 被保留使用,不能随便用。比方说,这里面出现了我们知道的 “if", "for", "return", 都出现在这个里头了。这都是我们刚才看到的。 这是计算机最初能明白的这些词。 那有的同学又可能问了,老师,不对啊。刚才的程序里头我看到了很多词啊。 哪些词是怎么回事啊?我说那个程序啊,可能还不够多。我们看这个程序。 啊,这个程序里面所有红色的词,都没有出现在刚才这个列表里头。 都没有出现在这个里头。那是怎么回事呢? 我可以告诉你。 所有这些红色的词都是用刚才的那些词给定义出来的。 也就是说,我们用刚才的那些词来解释这些红色的词是什么含义。 也就是说,我们可以用一个,通过一个少量的词来定义一个多的词。 这就是程序设计语言的做法。Ok, 再来看第二个问题。 那是不是无论我们在程序里边写什么 “数” 和 "计算符号",计算机都能明白呢? 啊,我们想象一下,也就知道,这个答案也是肯定是不能随便写的。 那应该怎么办呢?如果让我们设计程序语言的话,我们也会 去定义一些计算机能认识的 “数“ ,和 “符号”。 比方程序设计语言里头就是这么做的,让计算机啊只能看懂某些类型的数据, 那么这些数据的 "类型" 和相应的 “操作符号”啊 也是被事先定义好的。 你看, 它跟我们的想象的是一样的。所以啊,我非常喜欢一句话, 就是说,只要你客观的观察这个世界,你会发觉它是如此的简单, 以至于,像我们所想象的那个。正因为如此,我们的思考才有价值。 Ok, 回到这个问题。那既然我们定义了某些数据类型和操作符号,那哪些数据类型呢? 是不是要定义很多啊?其实不然。计算机里头啊, 能够看懂的数据类型也就这么多。一共有十几种吧。 不多。 我们来看一下,比方说,有布尔型,字符型,整型, 浮点型或者叫实型,就是小数,它又分了单精度型,双精度型, 这就是数组型,指针型,结构体型,联合体型,枚举型。 当然,在每个对现的部分,也可以定义 “类”。 那么除了这个之外呢,还有一种类型叫“空类型“。一共就这么十几种。 大家不需要记,只需要有一个感性的认识就可以了。 这是数据的类型。那操作符呢?运算符号呢? 计算机在C++语言里头能够使用的运算符号,也就这么多。 一共有三十几个吧。C语言中的运算符啊, 已经是,相比其他语言来说啊,已经是非常强大的了, 但它也只有三十几个。这是第二个问题。我们再来看,那个难度最大的,第三个问题。世界上要用程序语言来表达的逻辑纷繁复杂, 那程序设计语言里面得设计多少种 “句式” 才能够用呢? 那这个问题啊,困扰了我好久。 那现在呢,我就先给大家作一个解答。 其实啊,在程序设计语言里面,你用来表达逻辑的 "句式" 啊, 一点也不多,三种而已。 哇!怎么这么少啊,有的同学说。对,只有三种。哪三种呢? 看这个图。"顺序","分支", "循环"。就这三种语句。 刚才我们在程序里头看到的那个 “if” 语句,它就属于 “分支” 语句。 看到的那个 “for” 语句,那就属于 “循环“ 语句。 那些顺着写的语句统统属于 “顺序" 语句。 "顺序","分支","循环”。有的同学可能就问了, 这三种语句这么简单, 它们能表达得了那么多纷繁复杂的逻辑吗? 它够用吗? 我曾经跟你说过,我也有一样的问题。 那后来呢,随着学习的深入,我找到了答案。 其实,这个问题在1966年的时候,有两个学者, 在 Communications of the ACM, 这是一个非常著名的期刊。在这个期刊上,发表了一篇 Paper。 这个 Paper 呢,已经证明了,这三种语句是足够的。 Ok, 那么后面呢,我们还会讲到这个问题。 所以说, 在这儿,你只要有一个印象就可以了。 Ok, 我们现在解答了这三个问题以后呢,我们再来看一下我们要学的这门语言, 其实呢,我们要学的这门语言还蛮简单的。 它无非就是包含了30几个关键字,十几种基本数据类型, 30几个运算符号,加上三种最基本的 逻辑语句。就这些东西。 是不是很简单啊?如果你觉得简单,那就好了。 我们很快就可以开始写程序了。