![零基础C语言学习笔记](https://wfqqreader-1252317822.image.myqcloud.com/cover/191/36710191/b_36710191.jpg)
2.2 算法描述
算法包括算法设计和算法分析共两方面内容。算法设计主要研究怎样针对某个特定类型的问题设计出求解步骤,算法分析主要讨论设计出的算法步骤的正确性和复杂性。
算法描述是指解决某个特定类型的问题的具体描述。人们可以通过算法描述了解设计者的思路。常用的算法描述方法有自然语言、流程图、N-S流程图,下面分别介绍这3种算法描述方法。
2.2.1 自然语言
![img](https://epubservercos.yuewen.com/9B6764/19471983208811106/epubprivate/OEBPS/Images/txt003_8.jpg?sign=1739194591-3RcMvjko7IPgBhop9IPp3FjMtRNOqB2w-0-910b9e5dd5932ab7867ba539fedc4942)
自然语言是指人们日常生活中使用的语言,这种表达方式通俗易懂。例如,将大象装进冰箱需要几步?答案描述如下:
(1)将冰箱门打开;
(2)将大象放进冰箱;
(3)将冰箱门关上。
以上实例的实现过程就是使用自然语言描述的。从这个实例的描述中我们发现,使用自然语言进行描述的优点是易懂,缺点是容易产生歧义。因此,在一般情况下不使用自然语言进行描述。
2.2.2 流程图
![img](https://epubservercos.yuewen.com/9B6764/19471983208811106/epubprivate/OEBPS/Images/txt003_9.jpg?sign=1739194591-WnP0AjCAddH4shc27jRHDQdEeSC61AaP-0-98a6f4a3658f5422968cf0eb4173a37e)
流程图是算法的图形化表示方法,它使用一些图框表示各种不同性质的操作,使用流程线指示算法的执行方向。由于流程图直观、形象、易于理解,因此应用非常广泛。
1.流程图符号
常用的流程图符号如表2.1所示。其中,起止框用于标识算法的开始和结束;判断框用于对一个给定的条件进行判断,根据该条件是否成立决定如何执行后续操作;连接点用于将不同位置的流程线连接起来。
表2.1 常用的流程图符号
![img](https://epubservercos.yuewen.com/9B6764/19471983208811106/epubprivate/OEBPS/Images/txt003_10.jpg?sign=1739194591-zNqhWGK6gUYsuFzrf3YLQbhptYjhmq33-0-75bb62600a401e9ad0c78d8d71f99453)
下面通过实例介绍这些流程图符号的使用方法。例如,用流程图表示将大象装进冰箱的实现过程,如图2.4所示。
![img](https://epubservercos.yuewen.com/9B6764/19471983208811106/epubprivate/OEBPS/Images/txt003_11.jpg?sign=1739194591-kC85YM58ftA5d3RkcEnTdZeyCWRLDrOB-0-8fd7885404247ed5efbf9685e4461e56)
图2.4 将大象装进冰箱的流程图
2.3种基本结构
1966年,计算机科学家Bohm和Jacopini为了提高算法的质量,经过研究提出了3种基本结构,分别为顺序结构、选择结构和循环结构。任何算法都可以由这3种基本结构组成,可以并列,可以相互包含,但不允许交叉,不允许从一个基本结构直接转到另一个基本结构的内部。
1)顺序结构。
顺序结构是简单的线性结构。在顺序结构程序中,各操作是按照它们出现的先后顺序执行的。顺序结构的流程图如图2.5所示。
![img](https://epubservercos.yuewen.com/9B6764/19471983208811106/epubprivate/OEBPS/Images/txt003_12.jpg?sign=1739194591-dKZGrhLQYSVnK6rbOsLwCZmi5fy3RTsN-0-94e13df90279fdbd1fa1cb5aa662e195)
图2.5 顺序结构的流程图
在执行完A语句后,继续执行B语句。在这个结构中只有一个入口点A和一个出口点B。
2)选择结构。
选择结构又称为分支结构。在选择结构的流程图中必须包含一个判断框,如图2.6和图2.7所示。
![img](https://epubservercos.yuewen.com/9B6764/19471983208811106/epubprivate/OEBPS/Images/txt003_13.jpg?sign=1739194591-tIJF9wZxdOcyFGp3pZGsqIrXZh5oYo9E-0-61e26892ffb5bf31183afdeb8f996f79)
图2.6 选择结构的流程图1
![img](https://epubservercos.yuewen.com/9B6764/19471983208811106/epubprivate/OEBPS/Images/txt003_14.jpg?sign=1739194591-XK9v777T80vnD2FNG0br1O0lX0Xn8mfA-0-691ebba488c23b325edb8cb050cf1944)
图2.7 选择结构的流程图2
图2.6中的选择结构,首先判断给定的条件P是否成立,如果成立,则执行A语句,否则执行B语句。
图2.7中的选择结构,首先判断给定的条件P是否成立,如果成立,则执行A语句,否则什么也不做。
3)循环结构。
在循环结构中,程序会反复地执行一系列操作,直到条件不成立,才终止循环。根据判断条件的位置,将循环结构分为当型循环结构和直到型循环结构。
当型循环结构的流程图如图2.8所示。在当型循环结构的流程图中,首先判断条件P是否成立,如果成立,则执行A语句;在执行完A语句后,再次判断条件P是否成立,如果成立,则再次执行A语句;如此反复,直到条件P不成立,此时不再执行A语句,跳出循环。
直到型循环结构的流程图如图2.9所示。在直到型循环结构的流程图中,首先执行A语句,然后判断条件P是否成立,如果条件P成立,则再次执行A语句;然后再次判断条件P是否成立,如果成立,则再次执行A语句;如此反复,直到条件P不成立,此时不再执行A语句,跳出循环。
![img](https://epubservercos.yuewen.com/9B6764/19471983208811106/epubprivate/OEBPS/Images/txt003_15.jpg?sign=1739194591-SYsD1KGQthrzxhIAJkIoIxas36vCnOXL-0-128493f59a9728a8f7bb5aef984499ec)
图2.8 当型循环结构的流程图
![img](https://epubservercos.yuewen.com/9B6764/19471983208811106/epubprivate/OEBPS/Images/txt003_16.jpg?sign=1739194591-LOYICnMwjwTFJMNo9iwivMJGwsADpAYr-0-f14f68b5fecc7d61d0d48c17ee971042)
图2.9 直到型循环结构的流程图
2.2.3 N-S流程图
![img](https://epubservercos.yuewen.com/9B6764/19471983208811106/epubprivate/OEBPS/Images/txt003_17.jpg?sign=1739194591-NJ8FbmvIZVkWf3jYXrclGvMqgYgBgKPd-0-b0d6cfd8337390f448ba04628f16ab64)
N-S流程图是由美国人I.Nassi和B.Shneiderman共同提出的,其基本原理如下:既然任何算法都是由顺序结构、选择结构及循环结构组成的,那么各基本结构之间的流程线就是多余的,因此去掉了所有的流程线,将全部算法写在了一个矩形框内。N-S流程图也是算法的一种结构化描述方法,同样也有3种基本结构,下面分别进行介绍。
1.顺序结构
顺序结构的N-S流程图如图2.10所示。例如,将大象装进冰箱,用N-S流程图表达的效果如图2.11所示。
![img](https://epubservercos.yuewen.com/9B6764/19471983208811106/epubprivate/OEBPS/Images/txt003_18.jpg?sign=1739194591-2vAxN09R4qbosVcZYat5MXp7EeThXaoP-0-2445645984783ca23a42e8e80de8dfb9)
图2.10 顺序结构的N-S流程图
![img](https://epubservercos.yuewen.com/9B6764/19471983208811106/epubprivate/OEBPS/Images/txt003_19.jpg?sign=1739194591-ELpOx9vWwwoKTHR62LpW1yXCu87yqK3h-0-c1c92c0a7b2feb2d3a7f8edf97757d17)
图2.11 将大象装进冰箱的N-S流程图
2.选择结构
选择结构的N-S流程图如图2.12所示。例如,判断输入的数字是否是偶数,用N-S流程图表达的效果如图2.13所示。
![img](https://epubservercos.yuewen.com/9B6764/19471983208811106/epubprivate/OEBPS/Images/txt003_20.jpg?sign=1739194591-HeFZ3vgP4V65Ems3PSH2n2M81rrFUf6J-0-6dd5470158b918db74ecc53ab3a824f0)
图2.12 选择结构的N-S流程图
![img](https://epubservercos.yuewen.com/9B6764/19471983208811106/epubprivate/OEBPS/Images/txt003_21.jpg?sign=1739194591-PikXie41WMdwQq9Pm8OHDxuPId70IPHO-0-867be286af9cec0974891f52ccb124a4)
图2.13 判断输入的数字是否是偶数的N-S流程图
3.循环结构
当型循环结构的N-S流程图如图2.14所示。例如,计算1~100的所有整数的和,用当型循环结构的N-S流程图表达的效果如图2.15所示。
![img](https://epubservercos.yuewen.com/9B6764/19471983208811106/epubprivate/OEBPS/Images/txt003_22.jpg?sign=1739194591-RaD6tXR6zsWudbwWaTR2U8Jv9SXl6rpn-0-4a080e276e4277c645fb75f2d2597583)
图2.14 当型循环结构的N-S流程图
![img](https://epubservercos.yuewen.com/9B6764/19471983208811106/epubprivate/OEBPS/Images/txt003_23.jpg?sign=1739194591-9amsILTSHlrWGd02X469bANlsM62HZ8J-0-6f4a7fdb33efd6e7fa08ef7a77ead4fb)
图2.15 计算1~100的所有整数的和的当型循环结构的N-S流程图
直到型循环结构的N-S流程图如图2.16所示。例如,计算1~100的所有整数的和,用直到型循环结构的N-S流程图表达的效果如图2.17所示。
![img](https://epubservercos.yuewen.com/9B6764/19471983208811106/epubprivate/OEBPS/Images/txt003_24.jpg?sign=1739194591-75uiAGXLfBc9Z6ijTDmTPFSgHSTCknfL-0-0352f3ba908d2e8c65d27f4eb47f696d)
图2.16 直到型循环结构的N-S流程图
![img](https://epubservercos.yuewen.com/9B6764/19471983208811106/epubprivate/OEBPS/Images/txt003_25.jpg?sign=1739194591-DMkrL1Yv4WFQfEY6Ce5g2vXOs5tocJyL-0-4d30811b63540719474ef801505f6628)
图2.17 计算1~100的所有整数的和的直到型循环结构的N-S流程图
学习笔记
这3种基本结构都只有一个入口和一个出口,结构内的每部分语句都有可能被执行,并且不会出现无终止循环的情况。