admin 管理员组文章数量: 1086019
2024年4月26日发(作者:ssm框架到底是什么)
第二章: 改变程序流程
算法和流程图
2.1.1算法
计算机语言只是一种工具。光学习语言的规则还不够,最重要的是学会针对各种类型的问
题,拟定出有效的解决方法和步骤即算法。有了正确而有效的算法,可以利用任何一种计算机
高级语言编写程序,使计算机进行工作。因此,设计算法是程序设计的核心。
并非只有“计算”的问题才有算法。广义地说,为解决一个问题而采取的方法和步骤,称
为“算法”。不要把“计算方法”(computational method)和“算法”(algorithm)这两
个词混淆。前者指的是求数值解的近似方法,后者是指解决问题的一步一步的过程。在解一个
数值计算问题时,除了要选择合适的计算方法外,还要根据这个计算方法写出如何让计算机一
步一步执行以求解的算法。对于计算机外行来说,他们可以只使用别人已设计好的现成算法,
只需根据算法的要求给以必要的输入,就能得到输出的结果。对他们来说,算法如同一个“黑
箱子”一样,他们可以不了解“黑箱子”中的结构,只是从外部特性上了解算法的作用,即可
方便地使用算法。但对于程序设计人员来说,必须会设计算法,并且根据算法编写程序。
对同一个问题,可以有不同的解题方法和步骤。例如,求1+2+3+…+100,可以先进
行1+2,再加3,再加4,一直加到100,也可采取100+(1+99)+(2+98)+…+
(49+51)+50=100+50+49×100=5050。还可以有其它的方法。当然,方法有优劣之分。有的方
法只需进行很少的步骤,而有些方法则需要较多的步骤。一般说,希望采用方法简单,运算步
骤少的方法。因此,为了有效地进行解题,不仅需要保证算法正确,还要考虑算法的质量,选
择合适的算法。
一个计算问题的解决过程通常包含下面几步:
确立所需解决的问题以及最后应达到的要求。必须保证在任务一开始就对它有详细
而确切的了解,避免模棱两可和含混不清之处。
分析问题构造模型。在得到一个基本的物理模型后,用数学语言描述它,例如列出
解题的数学公式或联立方程式,即建立数学模型。
选择计算方法。如定积分求值问题,可以用矩形法、梯形法或辛普生法等不同的方
法。因此用计算机解题应当先确定用哪一种方法来计算。专门有一门学科“计算方
法”,就是研究用什么方法最有效、最近似地实现各种数值计算的,换句话说,计算
方法是研究数值计算的近似方法的。
确定算法和画流程图。在编写程序之前,应当整理好思路,设想好一步一步怎样运
算或处理,即为“算法”。把它用框图画出来,用一个框表示要完成的一个或几个步
骤,它表示工作的流程,称为流程图。它能使人们思路清楚,减少编写程序中的错
误。
编写程序。
程序调试,即试算。一个复杂的程序往往不是一次上机就能通过并得到正确的结果
的,需要反复试算修改,才得到正确的可供正式运行的程序。
正式运行得到必要的运算结果。
2.1.2流程图
为了表示一个算法,可以用不同的方法。常用的有:自然语
言;传统流程图;结构化流程图;伪代码;PAD图等。这里我们主
要介绍流程图。
a)
传统流程图
用图表示的算法就是流程图。流程图是用一些图框来表示各
种类型的操作,在框内写出各个步骤,然后用带箭头的线把它们
连接起来,以表示执行的先后顺序。用图形表示算法,直观形
象,易于理解。
美国国家标准化协会ANSI曾规定
了一些常用的流程图符号,为世界各
国程序工作者普遍采用。最常用的流
程图符号见图。
处理框(矩形框),表示一
般的处理功能。
判断框(菱形框),表示对
一个给定的条件进行判断,
根据给定的条件是否成立决
定如何执行其后的操作。它
有一个入口,二个出口。
输入输出框(平行四边形
框)。
起止框(圆弧形框),表示
流程开始或结束。
连接点(圆圈),用于将画
在不同地方的流程线连接起
来。如图中有两个以1标志的
连接点(在连接点圈中写
上“l”)则表示这两个点是
连接在一起的,相当于一个点一样。用连接点,可以避免流程线的交叉或过长,使流
程图清晰。
流程线(指向线),表示流程的路径和方向。
注释框, 是为了对流程图中某些框的操作做必要的补充说明,以帮助阅读流程图的
人更好地理解流程图的作用。它不是流程图中必要的部分,不反映流程和操作。
程序框图表示程序内各步骤的内容以及它们的关系和执行的顺序。它说明了程序的逻辑结
构。框图应该足够详细,以便可以按照它顺利地写出程序,而不必在编写时临时构思,甚至出
现逻辑错误。流程图不仅可以指导编写程序,而且可以在调试程序中用来检查程序的正确性。
如果框图是正确的而结果不对,则按照框图逐步检查程序是很容易发现其错误的。流程图还能
作为程序说明书的一部分提供给别人,以便帮助别人理解你编写程序的思路和结构。
例:对一个大于或等于3的正整数,判断它是不是一个素数。
所谓素数,是指除l和该数本身之外,不能被其它任何整数整除的数。例如,13是素数,
因为它不能被2,3,4,…,12整除。
判断一个数N(N>3)是否素数的方法是很简单的:将N作为被除数,将2到(N—1)各个整数
轮流作为除数,如果都不能被整除,则N为素数。算法可以表示如下:
① 输入N的值。
② I=2。
③ N被I除。
④ 如果余数为0,表示N能被I整除,则打
印N“不是素数”,算法结束。否则继续。
⑤ I=I+1。
⑥ 如果I≤N-l,返回③。否则打印N“是素
数”。然后结束。
实际上.N不必被2到(N一1)的整数除,只需
被2到N/2间整数除即可,甚至只需被2到之间的
整数除即可。例如,判断13是否素数,只需
将13被2,3除即可,如都除不尽,N必为素数。步骤
⑥可改为:
⑥:如果I≤,返回③。否则算法结束。
Fortran代码文件
为[e_212_01.f][e_212_02.f]。
a)
三种基本结构
传统的流程图用流程线指出各框的执行顺序,对
流程线的使用没有严格限制。因此,使用者可以毫不
受限制地使流程随意地转来转去,使流程图变得毫无规律,阅读者要花很大精力去追踪流程,
使人难以理解算法的逻辑。如果我们写出的算法能限制流程的无规律任意转向,而像一本书那
样,由各章各节顺序组成,那样,阅读起来就很方便,不会有任何困难,只需从头到尾顺序地
看下去即可。
为了提高算法的质量,使算法的设计和阅读方便,必须限制箭头的滥用,即不允许无规律
地使流程乱转向,只能按顺序地进行下去。但是,算法上难免会包含一些分支和循环,而不可
能全部由一个一个框顺序组成。如上例不是由各框顺序进行的,包含一些流程的向前或向后的
非顺序转移。为了解决这个问题,人们设想,如果规定出几种基本结构,然后由这些基本结构
按一定规律组成一个算法结构,就如同用一些基本预制构件来搭成房屋一样,整个算法的结构
是由上而下地将各个基本结构顺序排列起来的。1966年,Bohra和Jacoplni提出了以下三种基
本结构,用这三种基本结构作为表示一个良好算法的基本单元。
顺序结构:如图所示的虚线框内,A和B两个框是顺序执行的。顺序结构是最简单的
一种基本结构。
选择结构:如图所示的虚线框中包含一个判断框。根据给定的条件p是否成立而选择
执行A和B。p条件可以是“x>0”或“x>y”等。注意,无论p条件是否成立,只能执
行A或B之一,不可能既执行A又执行B。无论走哪一条路径,在执行完A或B之后将脱离
选择结构。A或B两个框中可以有一个是空的,即不执行任何操作。
循环结构:又称重复结构,即反复执行某一部分的操作。有两类循环结构:
当型(While):当给定的条件p成立时,执行A框操作,然后再判断p条件是否成
立。如果仍然成立,再执行A框,如此反复直到p条件不成立为止。此时不执
行A框而脱离循环结构。
直到型(Until):先执行A框,然后判断给定的p条件是否成立。如果p条件不成
立,则再执行A,然后再对p条件作判断。如此反复直到给定的p条件成立为止。
此时脱离本循环结构。
注意两种循环结构的异同:(1)两种循环结构都能处理需要重复执行的操作。(2)当型循
环是“先判断(条件是否成立),后执行(A框)”。而直到型循环则是“先执行(A框),后判
断(条件)”。(3)当型循环是当给定条件成立满足时执行A框,而直到型循环则是在给定条件不
成立时执行A框。
同一个问题既可以用当型循环来处理,也可以用直到型循环来处理。对同一个问题,如
分别用当型循环结构和直到型循环结构来处理的话,则两者结构中的判断框内的判断条件恰为
互逆条件。Fortran77和90/95标准都不提供do until语句,Compaq Visual Fortran也不提供
此扩展(但有些计算机系统则提供),因此需要将直到型循环转换成一个当型循环结构:直到
型循环等于一个A框加上一个当型循环,同时将给定的判断条件“取反”。
b)
结构流程图
1973年美国学者和erman提出了一种新的流程图形式。在这种流程图
中,完全去掉了带箭头的流程线。全部算法写在一个矩形框内。在该框内还可以包含其它的从
属于它的框,即可由一些基本的框组成一个大的框。这种适于结构化程序设计的流程图称N-
S结构化流程图,它用以下的流程图符号:
(1)顺序结构:A和B两个框组成一个顺序结构。
(2)选择结构:当p条件成立时执行A操作,p不成立则执行B操作结构。
(3)循环结构:当型循环结构下,图符表示先判断后执行,当p条件成立时反复执行A操作,直
到p条件不成立为止。
直到型循环结构下,图符表示先执行后判断,当p条件不成立时反复执
行A操作,直到p条件成立为止。
用以上三种N-S流程图中的基本框.可以组成复杂的N-S流程图,以表示算法。
例:将判别素数的算法用N-S流程图表示。
上面的非结构化流程图不是由三种基本结构组成的:图中间的循环部分有两个出口,不
符合基本结构的特点。由于不能直接分解为三种基本结构,应当先作必要的变换再用N-S流程
图的三种基本结构的符号来表示。即将第一个菱形框的两个出口汇合在一点。其方法是设一个
标志值K,它的初始状态
为0(表示N为素数),
当K≠0时为非素数。注意当
型和直到型的判断条件。
Fortran代码文件
为[e_212_03.f90]。
N-S图表示算法的优点
是:比传统流程图紧凑易
画,尤其是它废除了流程
线。整个算法结构是由各个
基本结构按顺序组成的,其
上下顺序就是执行时的顺
序。写算法和看算法只需从
上到下进行就可以了,十分
方便。归纳起来,一个结构
化的算法是由一些基本结构
顺序组成的;在基本结构之间不存在向前或向后的跳转,流程的转移只存在于一个基本结构范
围之内(如循环中流程的跳转);一个非结构化的算法可以用一个等价的结构化算法代替,其功
能不变。如果一个算法不能分解为若干个基本结构,则它必然不是一个结构化的算法。
c)
伪代码表示的算法
用传统的流程图和N-S图表示算法直观易懂,但画起来比较费事,在设计一个算法时,可
能要反复修改,而修改流程图是比较麻烦的。因此,流程图适宜于表示一个算法,但在设计算
法过程中使用不是很理想的(尤其是当算法比较复杂、需要反复修改时)。为了设计算法时方
便,常用一种称为伪代码的工具。伪代码是用介于自然语言和计算机语言之间的文字和符号来
描述算法。它如同一篇文章一样,自上而下地写下来。每一行(或几行)表示一个基本操作。它
不用图形符号,因此书写方便、格式紧凑,易懂也便于向计算机语言算法(即程序)过渡。
可以用英文、汉字、中英文混合表示算法,以便于书写和阅读为原则。用伪代码写算法并
无固定的、严格的语法规则,只要把意思表达清楚,并且书写的格式要写成清晰易读的形式。
例如,对于电子在特殊几何构型材料中的散射问题:[][sphere-
][sphere.f]
版权声明:本文标题:C语言流程图表示方法 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/p/1714134503a666835.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论