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