[教程] 一个程序的基本逻辑

首先,什么是程序?

程序实际上是一堆命令和逻辑判断的组合,就象我们说话,只是词汇和逻辑判断的组合一样。我们人说话最基本的是拼音,然后不同的读音的字符拼在一起,形成逻辑上合理的一句话。而计算机最基本的部分被称为关键词,然后将这些关键词拼在一起,形成逻辑上合理的一句命令操作。我们来看看基本的关键词:

  • 交付
    我们生活中将一个东西给另一个人的过程,就是一个交付的过程。计算机中,将一个值交付给一个变量存贮的过程,也是一种交付,我们称之为赋值。而赋值的语句在不同的语言里是不一样的,就象你可以用左手交付,也可以右手,还可以双手交付一样。大概了解下:


    第一种是 Pascal 或 Go 语言里赋值的写法,而下面是其它语言常见的赋值语句写法。不管怎么样,你要知道这句话的意思是将 100 赋值 a 。
  • 判断
    我们在外面要上厕所,实际上我们就做了很多判断,首先,我们要判断是不是厕所,好了,是厕所,那么我们需要判断这个厕所是男厕所还是女厕所,还是不分男女的封闭厕所,然后我们就需要根据自己的性别来做一个判断,我该上那个厕所。程序里也是一样存在各种各样的判断,这块的语法不同的语言大同小异,看看下面的几个写法:



    好吧,先列出上面三种,还有的语将将 end if 连在一起写,还有的要求的是 ifend 或 if end 而不是 end if,但基本的逻辑都是:如果怎么样,那么怎么样,否则如果怎么样就怎么样,否则怎么样的逻辑。
    上面用一堆 if /else if / else 的组合,有时感觉写着麻烦,于是人们就创建出了分支选择语句,C / C++ 等语言里是 switch / case  语句,而 Pascal 里是 case 语句,先不详解,简单了解。
  • 跳转
    计算机里,正常情况下,命令是顺序执行的,也就是说先执行完第一句再执行第二句,依次往下走,走到头,程序就结束了。但许多时候,我们要重复执行操作怎么办?那就牵涉到跳转。
    计算机里,跳转语句的老祖宗叫作 goto ,后面跟要跳转的目标标签名称。换句话说,就是先定义一个标签,假设叫 a,然后再用 goto a 跳转到 a 这个位置从 a 这个标签所在的位置开始执行。至于标签的写法,不同的语言又不一样,C++ 里是用 “标签:” 来标记的,看下面的例子:

    由于 a 在 goto 的前面,就形成了一个不断重复执行的逻辑,我们称之为循环( loop )。反过来,如果 a 在 goto 的后面,就是直接的跳转了。

    当程序执行到 goto a 时,中间省略号的代码就被完全跳过去,完全无视了:)。

    跳来跳去,是不是很好玩?但是这样跳来跳去看起来很好玩,但程序一旦代码量上来,就变得不好玩了,代码的阅读和理解就产生了困难,于是人们创造了一些专用的循环控制语句,如 while / for / repeat..until 等等来增加代码的可读性,并命名为结构化编程,但没有一种控制能与 goto 的灵活性相比,所以,虽然过去这么多年了,人们一直避免用 goto 语句来编码,但有时候,goto 的价值却是无可替代的。
    在这里,我们需要知道,循环实际上是一种跳转。上面的逻辑判断语句,实际上也是一种分支跳转,你可以想一下为什么?

  • 运算
    程序本质上就是对数据的处理过程,可以处理对,也可以处理错( 程序的 Bug )。而处理的过程就是运算,运行就牵涉到如果定义运算的规则,这就是所谓的表达式了。
    表达式分为数学表达式和逻辑表达式两种,数学表达式好说了,不外乎我们日常学到的加、减、乘、除、求余等数学运算符以及括号,另外就是加入了计算机特有的位运算。逻辑表达式有三种:与、或、非。与就是我们说的并且关系,两个条件同时成立才成立,或的话,有一个条件成立即成立,非则是只针对一个条件来的,即这个条件不成立时才成立。
  • 入口
    上面说了一堆,所谓万事总有头,程序要执行也得有个头,从那儿开始执行。这个就叫入口函数,在 C / C++,这个函数叫做 main,其它语言或者环境可能会有所不同,但肯定有一个入口。

好了,本文是一个总体上的讲解,更详细的内容需要一步步来。先有大框,然后就是一步步细化的问题了。

分享到: