dd算法的概念
例2.17 打印出50个学生中成绩高于80分者的学号和成绩。 用伪代码表示算法如下: BEGIN(算法开始) 1=>i while i<=50 {input ni and gi i+1=>i} 1=>i while i<=50 {if gi≥80 print ni and gi i+1=>i} END(算法结束) 例2.18 打印2000—2500年中的每一年是否闰年。 用伪代码表示算法如下: * BEGIN(算法开始) 2000=>y while y<=2500 {if y 被4整除 if y 不被100整除 print y; “是闰年” else if y 被400整除 print y;“闰年” else print y;“非闰年” end if end if else print y; “非闰年” end if y+1=>y } END(算法结束) * 例2.19求1-1/2+1/3-1/4+…+1/99-1/100。 用伪代码表示的算法如下: BEGIN (算法开始) 1=> sum 2=> deno 1=> sign while deno <= 100 {(-1)×sign=>sign sign×1/deno=>term sum+term=>sum deno+1=>deno } print sum END (算法结束) * 从以上例子可以看到: 伪代码书写格式比较自由,容易表达出设计者的思想。 同时,用伪代码写的算法很容易修改。 用伪代码很容易写出结构化的算法。 但是用伪代码写算法不如流程图直观,可能会出现逻辑上的错误(例如循环或选择结构的范围搞错等)。 软件专业人员一般习惯使用伪代码,为便于理解,本书在以后各章中主要采用形象化的N-S图表示算法。 * 2.4.6 用计算机语言表示算法 要完成一件工作,包括设计算法和实现算法两个部分。 如果作曲->设计,那么演奏->实现; 如果菜谱->设计,那么炒菜->实现。 在用流程图或伪代码描述出一个算法后,还要将它转换成计算机语言程序,才能编译执行。 * 例2.20 求5!。 main( ) { int i,t; t=1; i=2; while(i<=5) { t=t*i; i=i+1; } printf("%d",t); } * 例2.21 求级数的值。 main( ) { int sign=1; float deno=2.0, sum=1.0, term; while (deno<=100) { sign=-sign; term=sign/deno; sum=sum+term; deno=deno+1; } printf("%f",sum); } * 2.5 结构化程序设计方法(STRUCTURED PROGRAMING,简称SP) SP方法主张使用顺序、选择、循环三种基本结构来嵌套连结成具有复杂层次的“结构化程序” 。 SP方法是面向过程的设计方法。 面向对象的程序设计 (Object-Orient Programming,OOP) 这种程序便于编写、阅读、修改和维护。 结构化程序设计方法的基本思路是,把一个复杂问题的求解过程分阶段进行,每个阶段处理的问题都控制在人们容易理解和处理的范围内。 * 结构化程序设计的步骤:(1) 自顶向下;(2) 逐步细化;(3) 模块化设计;(4) 结构化编码。 在接受一个任务后应怎样着手进行呢?有两种不同的方法: 一种是自顶向下,逐步细化; 一种是自下而上,逐步积累。 以写文章为例。如图2.36示意。 * 图2.36 * 显然,采用“自顶向下, 逐步细化” 的方法 考虑周全,结构清晰,层次分明; 如果发现有需要修改的部分,只需相关段落即可,与其他部分无关。 我们提倡用这种方法设计程序,即用工程的方法设计程序。 * 在程序设计中常采用模块设计的方法,尤其是当程序比较复杂时,更有必要。 模块化设计的思想实际上是一种“分而治之”的思想,把一个大任务分为若干个相对简单的子任务,或根据功能将复杂的大模块划分为若干个子模块。这个过程采用自顶向下的方法来实现。 如,教务管理系统可以按功能分为:注册管理、学籍管理、教学计划、选课管理、成绩管理、智能排课、用户管理、毕业审查、收费管理、旁听系统管理、四六级管理、科研管理等等多个模块。 模块的根本特征是“相对独立,功能单一”。 * 模块的好坏,通常用“耦