![零基础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=1738952188-wYohpUD6Rzi1mBai5RsEM0LJphn8pj53-0-e53831558edb9806d5bef60d12f393fd)
自然语言是指人们日常生活中使用的语言,这种表达方式通俗易懂。例如,将大象装进冰箱需要几步?答案描述如下:
(1)将冰箱门打开;
(2)将大象放进冰箱;
(3)将冰箱门关上。
以上实例的实现过程就是使用自然语言描述的。从这个实例的描述中我们发现,使用自然语言进行描述的优点是易懂,缺点是容易产生歧义。因此,在一般情况下不使用自然语言进行描述。
2.2.2 流程图
![img](https://epubservercos.yuewen.com/9B6764/19471983208811106/epubprivate/OEBPS/Images/txt003_9.jpg?sign=1738952188-DzYF6daHE5tcwfFLa41FBP85F8uMlx3c-0-a829f24a9af720dc7107e8db8bdbd101)
流程图是算法的图形化表示方法,它使用一些图框表示各种不同性质的操作,使用流程线指示算法的执行方向。由于流程图直观、形象、易于理解,因此应用非常广泛。
1.流程图符号
常用的流程图符号如表2.1所示。其中,起止框用于标识算法的开始和结束;判断框用于对一个给定的条件进行判断,根据该条件是否成立决定如何执行后续操作;连接点用于将不同位置的流程线连接起来。
表2.1 常用的流程图符号
![img](https://epubservercos.yuewen.com/9B6764/19471983208811106/epubprivate/OEBPS/Images/txt003_10.jpg?sign=1738952188-jf8MbI8OXxQogu6fsTqnpsWTthaNh41p-0-483d8dfc94fc1d18dba79798515ed330)
下面通过实例介绍这些流程图符号的使用方法。例如,用流程图表示将大象装进冰箱的实现过程,如图2.4所示。
![img](https://epubservercos.yuewen.com/9B6764/19471983208811106/epubprivate/OEBPS/Images/txt003_11.jpg?sign=1738952188-wrUxxGADs7hjrSMWywDVaKgWLBAAw9Tf-0-245cdb616e02474e1f3e3b7a3efb1dd9)
图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=1738952188-4n5Btjs5VFWWYfgcJ93Pf3BN1kLlvm9N-0-9a9934010e9013298caaea792673c5be)
图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=1738952188-KbZeHUDyRwQinhpRDnu8Xj9V9pDf4V2Z-0-452f9e91dc6d3da218e0771c8ad4e7e7)
图2.6 选择结构的流程图1
![img](https://epubservercos.yuewen.com/9B6764/19471983208811106/epubprivate/OEBPS/Images/txt003_14.jpg?sign=1738952188-KIJxRtiD5Jc8YG6eQtQ8O0WO6kwpmqje-0-9fa6014b678a83ed85012f66cc1d6eb7)
图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=1738952188-L9Y3T2hcjADT96b6Jhzuy2meK6aDnmvZ-0-2eaa41324ceea81c72231f0509fc27f8)
图2.8 当型循环结构的流程图
![img](https://epubservercos.yuewen.com/9B6764/19471983208811106/epubprivate/OEBPS/Images/txt003_16.jpg?sign=1738952188-Bqzyz5fWuuUCPf5P5jumAFY2apc4zAXU-0-a29f1dbeb97bf42cc5042c01d69907c3)
图2.9 直到型循环结构的流程图
2.2.3 N-S流程图
![img](https://epubservercos.yuewen.com/9B6764/19471983208811106/epubprivate/OEBPS/Images/txt003_17.jpg?sign=1738952188-QZkh0r8ATSK8TNU8YLerTJ2GVRgDnIgE-0-413bffd00f91f6becf5b96dd709d6c37)
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=1738952188-G99eK5BzIMs5NaFecAYWm9Vvlfubngil-0-9a1b451934a69bc05a69b5741548180c)
图2.10 顺序结构的N-S流程图
![img](https://epubservercos.yuewen.com/9B6764/19471983208811106/epubprivate/OEBPS/Images/txt003_19.jpg?sign=1738952188-LqMNoSm8SltK7vQIX276RHyHuFWoj4aq-0-5026d1b90151c89883cb249ba67631f0)
图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=1738952188-XshCepGU2V1ZIBH1oTE7mk1iDXYiEtgS-0-74171bca0f937e7b2afcdc47d6228cb8)
图2.12 选择结构的N-S流程图
![img](https://epubservercos.yuewen.com/9B6764/19471983208811106/epubprivate/OEBPS/Images/txt003_21.jpg?sign=1738952188-0y3frOPsmcqVqLFQhETalnEWtSFTfYn3-0-485cfd56c5a45236dcafd9eaddd155be)
图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=1738952188-W8LhGkgEXB8YLXycBWHDmg4MBmxUAIsI-0-f52cf6d363269b5b60be94c1618c1f05)
图2.14 当型循环结构的N-S流程图
![img](https://epubservercos.yuewen.com/9B6764/19471983208811106/epubprivate/OEBPS/Images/txt003_23.jpg?sign=1738952188-DB6tAEWWAduJyKhnGBv8DEIQt9jvwU2B-0-b2939234a6a48f03ef78f2e923234c77)
图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=1738952188-wdoHjVOANXPrdPaxsrnjLsfrbaduk3ba-0-494591aa5889993fae94e56bb74de33f)
图2.16 直到型循环结构的N-S流程图
![img](https://epubservercos.yuewen.com/9B6764/19471983208811106/epubprivate/OEBPS/Images/txt003_25.jpg?sign=1738952188-aJBn7mIOwIxQtIhlO62407Xk8PvXCv70-0-ae0b07b309cb4c962757ec1fd8c48d62)
图2.17 计算1~100的所有整数的和的直到型循环结构的N-S流程图
学习笔记
这3种基本结构都只有一个入口和一个出口,结构内的每部分语句都有可能被执行,并且不会出现无终止循环的情况。