自顶向下,逐步求精

自顶向下

程序设计时,应先考虑总体,后考虑细节;先考虑全局目标,后考虑局部目标。不要一开始就过多追求众多的细节,先从最上层总目标开始设计,逐步使问题具体化。逐步细化

对复杂问题,应设计一些子目标作为过渡,逐步细化。

逐步求精

将现实问题经过几次抽象(细化)处理,最后到求解域中只是一些简单的算法描述和算法实现问题。即将系统功能按层次进行分解,每一层不断将功能细化,到最后一层都是功能单一、简单易实现的模块。求解过程可以划分为若干个阶段,在不同阶段采用不同的工具来描述问题。在每个阶段有不同的规则和标准,产生出不同阶段的文档资料

 模块化设计

一个复杂问题,肯定是由若干稍简单的问题构成。模块化是把程序要解决的总目标分解为子目标,再进一步分解为具体的小目标,把每一个小目标称为一个模块。

1.采用自顶向下,逐步求精的程序设计方法

需求分析概要设计中,都采用了自顶向下,逐层细化的方法。

2.使用三种基本控制结构构造程序

任何程序都可由顺序、选择、重复三种基本控制结构构造。

(1)用顺序方式对过程分解,确定各部分的执行顺序。

(2)用选择方式对过程分解,确定某个部分的执行条件。

(3)用循环方式对过程分解,确定某个部分进行重复的开始和结束的条件。

(4)对处理过程仍然模糊的部分反复使用以上分解方法,最终可将所有细节确定下来。


应用举例


 确定测验中的班级平均成绩

顶是一个程序有效的完整的描述。但是顶很少能将编写一个程序所需的细节充分地表达出来。因此,我们现在开始求精过程。先将顶划分成一系列的更小的任务,并将它们按照执行的先后顺序列出来。第一步求精的结果如下:

    初始化变量

   输入、求测验成绩的累加和并统计成绩个数

  计算并打印平均成绩

这一步求精只采取了顺序结构------上面列出的步骤将按顺序一个接一个地执行。

   逻辑分段通常是程序员在自顶向下过程中第一步求精时所需的。为了进行下一个层次的求精,我们要提交明确的变量。

————————————————————————————————————————————————————

初始化变量

将累加和初始化为0

将计数器初始化为0

————————————————————————————————————————————————————

只有变量total和counter需要在使用前进行初始化,变量average和grade不必初始化,因为它们的值在计算或输入时将会被取代。

需要一个循环结构连续输入每一个成绩。由于事先并不知道有多少个成绩需要处理,因此我们采用标记控制的循环。用户每次输入一个合法的成绩,在输入最后一个合法的成绩之后,用户舒服标记值。程序在每个成绩输入之后都要检测它是不是标记值,并且在用户输入标记值后终止循环。上述伪码语句的第二步求精结果为:

————————————————————————————————————————————————————

输入第一个成绩(可能为标记)

当用户还未输入标记是

将该成绩加到运行累加和上

将1加到计数器上

输入下一个成绩(可能为标记)

——————————————————————————————————————————————————————

在伪码中,我们并没有将组成while的循环结构用一对花括号括起来,只是简单的缩进。伪码只是一种非正式的程序开发工具。

(注: 许多程序在逻辑上可以分为三段“一个是初始段,用于初始化变量;一个是处理段,用于读入数据值并对程序变量做出相应的调整;以及一个终止段,用于计算及输出最终结果)。

——————————————————————————————————————————————————————

将累加和初始化为0

将计数器初始化为0

输入第一个成绩(可能为标记)

当用户还未输入标记是

将该成绩加到运行累加和上

将1加到计数器上

输入下一个成绩(可能为标记)

如果计数器不等于0

将平均成绩设置成累加和除以计数器

打印平均成绩

否则

打印”没有输入成绩“

————————————————————————————————————————————————————————




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值