C语言从初学到精通
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.5 算法及表示

算法(Algorithm)是解题的步骤,从前面章节举的例子来看,整个程序的运行也有一定的程序和步骤。算法是程序中一个比较重要的内容,计算机科学家沃思提出一个公式:数据结构+算法=程序,由此可见算法的重要性了。

2.5.1 算法

看到算法,读者可能会把它限制在数学计算这个领域里,其实不然。在现实生活中,做任何事情为解决问题而采取的解决步骤都是算法,本书中提到的算法仅指计算机算法。一道题目可能不只有一种解决方法,有时可以有好多种方法,这些方法有的烦琐,也有的简便易懂,一般情况下当然选择采用比较简单的方法,这里就涉及一个算法质量的问题了。

算法是一组有穷的规则,它们规定了解决某一特定类型问题的一系列运算,是对解题方案准确与完整的描述。学习算法,一般要经过设计、表示、确认、分析、验证几个过程。

设计指的是对这个算法的运行步骤进行设计;表示是指对算法的一种显性的表示,通过一些比较常见的或比较容易理解的方法来表示;确认指的是确信这一算法能够正确无误地工作;分析是指对算法的效率进行度量的一个过程,如一个算法需要多少计算时间和存储空间等;验证是指描述的算法是否可计算、有效合理,须对程序进行测试。

2.5.2 算法的表示

在前面介绍的算法的几个过程中,表示算法是一个有助于理解算法的过程,而且在设计算法时也可以先将算法表示出来再写代码,有助于提高效率。在描述算法的时候,有很多种表示方式,例如自然语言和流程图、流程图、伪代码、计算机算法等。

其中,自然语言即是用语言来表示算法的过程,计算机算法则是用计算机程序代码来表示,伪代码是介于这两者之间的文字和符号来表示的方法,一般情况下常用的算法表示方法是用流程图来表示。下面着重介绍如何使用流程图来表示算法。

流程图表示方法指的是用图形来表示算法,比较直观易懂,常用的流程图符号如图2-11所示。

图2-11 常用流程图符号

图2-11中各流程图符号含义这里不详细介绍,基本上都是可以见名知义的,下面通过一个例子来详细介绍流程图各个符号的使用。

【例2-2】有如下一个函数,要求编写一个程序,输入一个X值后,可以求出Y的值。

分析这个函数,可以先用自然语言写出这个函数的算法,具体如下:

先输入一个X,若X<0,Y=-1,否则,若X=0,Y=0;若X>0,Y=X的值,输出Y的值。用流程图来表示算法,如图2-12所示。

图2-12 用流程图来表示

流程图分析:

最上面的“开始”和最下方的“结束”两个椭圆形的框是起止符,标志算法开始和结束。

第二个“输入X”和倒数第二个“输出X”这两个斜平行四边形是输入输出框,表示程序中的输入与输出。

中间一段的“X<0”与“X=0”两个菱形框是判断框,分别表示一个判断过程。再根据判断的结果真假来决定下面的流程该往哪个方向继续运行。

在其中一个菱形旁边有一个注释框“开始判断X的值”,这不是流程图中必须的部分,它并不反映流程和操作过程,只是将流程图的部分内容作一个注解,方便在看流程图时更易理解。剩下的矩形都是处理框。

【例2-3】求1+2+3+…+100的和。

分析:要求1~100的和,可以利用一个不断相加的过程,即先求1+2的和,再加上3,再加上4,直到加到100为止,最后求出的和为最终的结果。所以应判断相加的数是否小于等于 100,当这个数超过 100,则不再继续相加求和。这个过程用流程图来表示,如图2-13所示。

图2-13 求1~100的和的流程图

流程图分析:

最上面的“开始”和最下方的“结束”两个椭圆形的框是起止符,标志算法开始和结束。

第一个方框中,因为初始时并没有相加,所以初始状态的和为0。

求和的过程,是把前一步的和不断加下一个数,直到加到 100 为止。下一个加数的得到是通过加完一个数之后,加数就增加1,即向后移一位,然后再加,这样就构成了一个循环。

菱形框里是判断循环继续还是结束的标记,这里要不断判断相加的数是多少。当相加的数小于等于 100 则不断地加,当超过 100 时,则退出循环。这是一个循环控制语句,控制循环什么时候结束。

平行四边形中是输出最终求出的和的值。

由图 2-13 中程序的流程图可以明确地知道流程图在写程序代码及分析代码时应用的优势了,它可以更清晰地展示程序的目的。所以读者在以后的学习中应学会充分利用流程图,这不仅可以节约时间,还可以有助于优化代码。在以后的章节中,可以看到流程图的作用,尤其是在介绍条件选择结构及循环结构时,更可以看出流程图的巨大作用。