第二章 算法
2.1 算法的概念
广义的来说,为解决问题而采取的方法和步骤称为算法。针对不同的问题由不同的算法,同一问题也可以有不同的算法。
计算机中算法是指计算机语言解决问题的方法和步骤。
用计算机处理问题一般过程如下:
(1)分析问题;(2)确定处理方案;(3)确定算法;(4)用计算机语言编写程序实现算法;(5)上级运行、调试程序,有错找出原因,修改后在运行,直到正确为止。
计算机中的算法分类:数值运算算法和非数值运算算法
数值运算:是求数值的解。
非数值运算算法:涉及范围广
2.2 计算机算法的表示方法
2.2.1 自然语言表示算法
自然语言就是人们日常使用的语言,用自然语言描述算法,通俗易懂。
2.2.2 传统流程图表示算法
传统流程图使用一些图框加文字说明表示算法的各种操作步骤,用箭头表示程序执行的走向,直观、形象、好理解。
常见的框图符号如图:
起止框:说明程序的开始和结束
输入输出框:表示输入输出操作
处理框:表示要进行的各种算法及赋值等操作
判断框:有一个入口,两个出口;根据给定的条件判断是否成立,决定程序执行的走向哪个出口。用法如图:
连接点:用标有数字的圆圈表示,用来表示程序的断点。当程序流程图很长画不下时,需要断开几处画,可用标有数字的圆圈表示程序的同一断点,如图所示:
流程图优点:直观形象、流程清晰。
流程图缺点:占用面积大;由于允许使用流程线,使流程可以任意转移,对于复杂的程序使人不易理解程序思路。
2.2.3 N-S结构化框图表示算法
N-S框图特点:取消了流程线,不允许流程任意转移,只能从上到下顺序进行。
N-S框图规定的基本结构:顺序结构、选择结构、循环结构。
N-S框图将规定的基本结构都用矩形框表示,并将由这些基本结构矩形框组成的全部算法包含在一个大矩形框里。
顺序结构程序执行的过程是从上到下,先执行A段程序,再执行B段程序。
顺序结构的N-S框图如图所示
选择结构的N-S框图如图所示,选择结构执行过程是根据条件P是否满足而决定是执行A段程序还是执行B段程序。
循环结构用来描述有规律的重复操作,可以大大缩短程序长度。
根据构成循环的形式,循环结构可以分为当型循环与直到型循环两种基本形式。它们的共同特点是根据某个条件来决定是否重复执行某些操作。
当型循环结构的N-S框图如图所示,当型循环结构执行过程是先判断条件P是否满足,当P条件满足时(Y),则执行循环体(即A段程序),然后再判断条件P是否满足,若满足(Y),则再次执行循环体A程序……,如此循环执行,直到P条件不满足(N)时退出循环。
直到型循环结构的N-S框图如图所示,直到型循环执行过程是先执行一次循环体A段程序,然后判断条件P是否满足,若满足(Y)则再执行A段程序,然后再次判断P条件是否满足,……,如此循环执行,直到P条件不满足(N)为止。
当型循环和直到型循环的区别:前者“先判断、后执行”且循环体可一次都不执行,后者“先执行、后判断”且循环体至少执行一次。
由选择结构可以派生出另一种基本结构:多分支选择结构,根据p值的不同取值(p1、p2、p3、···、pn)而决定执行A1、A2、···、An程序之一。其结构流程图如图所示:
2.3 算法的特点及算法设计的要求
2.3.1 算法的特征
(1)可行性
(2)有穷性
(3)确定性
(4)有效性
(5)拥有足够的信息
(6)有或没有输入
(7)至少一个输出
2.3.2 算法设计的要求
(1)正确性
(2)可读性
(3)健壮性
(4)高效率与低存储量需求
2.4 计算机程序设计的基本方法
计算机程序设计就是用计算机语言表示算法。
C语言属于结构化程序设计语言,适合于编写结构化程序。
对于大型程序设计,目前流行模块化设计方法,即将大而复杂的问题分为若干小的小模块,便于实现和调试。
2.4.1 结构化设计
结构化程序设计强调程序设计风格和程序设计结构的规范化。结构化程序设计要求把程序的结构限制为顺序、选择和循环3种基本结构,以便提高程序的可读性。遵循程序结构化的设计原则,按结构化设计方法设计出的程序易于理解、修改和维护,这就减少了程序出错的机会,提高了程序的可靠性,可以提高编程工作的效率,降低软件开发的成本。
2.4.2 模块化设计
模块化设计是指把一个大程序的总体目标先分解为若干分目标,再进一步分解为具体的小目标,每个小目标称为一个模块,由于经过分解后的各模块比较小,容易实现,也容易调试。
在进行模块化程序设计时应考虑两个问题:如何划分模块?如何组织好模块之间的联系?
(1)按功能划分模块划分
模块的基本原则是使每个模块都易于理解。在按功能划分模块时,要求各模块的功能尽量单一,各模块之间的联系尽量少。当要修改某一模块功能时,只涉及一个模块而不会影响到其他模块。
(2)按层次组织模块
在按层次组织模块时,上一层模块只指出"做什么",只有在最底层模块中才指出"怎么做"。
2.4.3 模块化程序的设计过程
模块化的设计过程,一般采用自顶向下、逐步细化的过程。
(1)自顶向下:即先考虑总体,后考虑细节;先考虑全局目标,后考虑局部目标,这种程序结构按功能划分为若干基本模块,这些模块形成一个树状结构。
(2)逐步细化:对复杂的问题设计一些子目标作过渡,逐步细化,将一个模块的功能逐步分解细化为一系列的处理步骤。
用这种方法逐步分解,直到将各小模块表达为某种程序设计语言的语句为止。这种方法就叫作"自顶向下,逐步细化"。
这种设计方法的过程是将问题求解由抽象逐步具体细化的过程。
用这种方法便于验证算法的正确性,在向下一层展开之前应仔细检查本层设计是否正确,只有上一层正确才能向下细化。如果每一层设计都没有问题,则整个算法就是正确的。
标签:执行,程序,C语言,算法,循环,模块,程序设计,第二章,结构 From: https://blog.csdn.net/m0_52761498/article/details/136831540