如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
一、算法的概念二、简单算法举例三、算法的特性四、怎样表示一个算法五、结构化程序设计方法六、本章小结一、算法的概念著名计算机科学家沃思(NikilausWirth)提出一个公式:数据结构+算法=程序对数据的描述对操作的描述通俗的说,算法是解决“做什么”和“怎么做”的问题,做任何事情都有一定的步骤。可见,算法是对特定问题求解步骤的一种描述,它是指令的有限序列。例2.1:求1×2×3×4×5例2.2:有50个学生,要求将他们之中成绩在80分以上者打印出来。例2.3:输出2000~2500年之间的所有闰年。例2.4:对一个大于或等于3的正整数,判断它是不是一个素数。可以用最原始的方法进行:步骤1:先求1×2,得到结果2。步骤2:将步骤1得到的乘积2再乘以3,得到结果6。步骤3:将6再乘以4,得24。步骤4:将24乘以5,得120,这就是最后的结果。这样的算法虽然正确,但太繁琐,不妨设p为被乘数,i为乘数将算法改写如下:分析:判断某年是否是闰年的条件是:1、能被4整除,但不能被100整除的年份闰年的条件是都是闰年,如1996年,2004年是闰年;2、能被100整除,又能被400整除的年份是闰年。如1600年、2000年是闰年。由此,算法可表示如下:S1:输入n的值;S2:i=2(i作为除数);S3:n被i除,得余数r;S4:如果r=0,表示n能被i整除,则打印n“不是素数”,算法结束;否则执行S5;S5:i+1i;S6:如果i≤n-1,返回S3;否则打印n“是素数”,然后结束。说明:实际上,n不必被2到(n-1)的整数除,只需被2到n/2间整数除即可,甚至只需被2到√n之间的整数除即可。程序清单如下:1、有穷性一个算法应包含有限的操作步骤,而不能是无限的。2、确定性算法中的每一个步骤都应当是确定的,而不应当是含糊的、模棱两可的。即:算法的含义应当是唯一的,不存在歧义性。3、有零个或多个输入所谓输入是指在执行算法时需要从外界取得必要的信息。4、有一个或多个输出算法的目的是为了求解,“解”就是输出。5、有效性算法中的每一个步骤都应当能有效地执行,并得到正确的结果。2.用流程图表示算法下面将上述所举的几个例子,改用流程图表示:例2.2:有50个学生,要求将他们之中成绩在80分以上者打印出来。例2.3:输出2000~2500年之间的所有闰年。上面的例子还可用如下的流程图表示例2.4判断一个大于或等于3的正整数是否是素数。通过以上几个例子,可以看出流程图是表示算法的较好工具,一个流程图包括以下几部分:1、表示相应操作的框;2、带箭头的流程线;3、框内外必要的文字说明。需要提醒的是:流程线不要忘记画箭头,因为它是反映流程的执行先后次序的,如不画出箭头就难以判定各框的执行次序了。三种基本结构1966年,Bohra和Jacopini提出了以下三种基本结构,用这三种基本结构作为表示一个良好算法的基本单元:(1)顺序结构:如下图,虚线框内是一个顺序结构。其中A和B两个框是顺序执行的。即在执行完A框所指定的操作后,必然接着执行B框所指定的操作。顺序结构是最简单的一种基本结构。(2)选择结构:或称分支结构,如下图(A),虚线框内是一个选择结构。此结构中必包含一个判断框。根据给定的条件p是否成立而选择执行A框或B框。请注意:无论p条件是否成立,只能执行A框或B框之一,不可能既执行A框又执行B框。无论走哪一条路径,在执行完A或B之后,都经过b点,然后脱离本选择结构。A或B两个框中可以有一个是空的,即不执行任何操作,如上图(B)。(3)循环结构:即反复执行某一部分的操作。有两类循环结构:①当型(While)循环结构如下图,它的功能是当给定的条件p1成立时,执行A框操作,执行完A后,再判断条件p1是否成立,如果仍然成立,再执行A框,如此反复执行A框,直到某一次p1条件不成立为止,此时不执行A框,而从b点脱离循环结构。②直到型(Until)循环如下图,它的功能是先执行A框,然后判断给定的p2条件是否成立,如果p2条件不成立,则再执行A,然后再对p2条件作判断,如果p2条件仍然不成立,又执行A….如此反复执行A,直到给定的p2条件成立为止,此时不再执行A,从b点脱离本循环结构。顺序结构、选择结构、循环结构,有以下共同特点:(1)、只有一个入口。(2)、只有一个出口。注:一个菱形判断框有两个出口,而一个选择结构只有一个出口。不要将菱形框的出口和选择结构的出口混淆。(3)、结构内的每一部分都有机会被执行到。(4)、结构内不存在“死循环”(无终止的循环)。已经证明,由以上三种基本结构顺序组成的算法结构,可以解决任何复杂的问题。由基本结构所构成的算法属于“结构化”的