tceic.com
简单学习网 让学习变简单
当前位置:首页 >> 学科竞赛 >>

落实逐步求精《一》


程序设计基础 --落实逐步求精
逐步求精是程序设计的基本要求, “逐步求精”的规则就几条,关键是在设计程序 的实践中,在思想上,在行动上落实。 下面以一个例子说明逐步求精如何如何在思想上、编程实践上“落实” 。 问题:设计程序,输入三个整数(假设三个数互不相同,这个假设只是为了下面的 书写讲解方便一些) ,按从小到大的顺序输出。 1、落实逐步求精,就是程序设计的每一步,

都是为下一步设定框架(问题框架或 格式框架) ,每一步也都是在上一步设定的框架的基础上进行进一步的填空。并且要控制 自己不要太快陷入问题细节,以免把握不住全局。 输入程序基本框架,并编译,发现错误时修改,直到程序正确。 int main() { return 0; } 2、根据对问题的分析,在上面程序的基础上填空,按分步思想,对要解决的问题 求精,细化为两个步骤,得出以下版本程序。编译,发现错误时修改,直到程序正确。 int main() { int a,b,c; //输入 a、b、c ? “?”表示待解决的问题。 //a,b,c ? 把 a,b,c 按从小到大顺序输出 return 0; } 3、对以上版本程序填空,解决问题“//输入 a、b、c ?” 。 #include<iostream.h> int main() { int a,b,c; //输入 a、b、c 去掉“?” ,表示问题抑或解决 cin>>a>>b>>c; //a,b,c? 把 a,b,c 按从小到大顺序输出 return 0; } 编译上面程序,发现错误时修改,运行测试输入三个数,直到程序正确。 按分类 思想用 if 语句继续解决问题“//a,b,c ? 把 a,b,c 按从小到大顺序输出” 。注意:不 要一下就陷入细节,以免失却对全局的把握,向前推进一步即可。 #include<iostream.h> int main()

{ int a,b,c; //输入 a、b、c cin>>a>>b>>c; //a,b,c 把 a,b,c 按从小到大顺序输出 (问题已解决) if(a>b) { //a>b,c? 表示在已知 a>b 的情况下,把 a,b,c 按从小到大顺序输出 } else { //a<b,c? } return 0; } 编译上面程序,发现错误时修改,直到程序正确。至此,有“//a>b,c?”及 “ //a<b,c?”两个问题需要解决。 4、 我们首先解决问题 “//a<b,c?” ,在其下面空白处填空,逐步求精, 问题“//a<b,c?” 转化为更简单的两个问题“//a<b,b>c?”“ //a<b,b<c?” 、 。注意不要陷入问题细节, 把握节奏,向前推进一步即可,此处的任务是设计条件语句:写出条件,确定两个 问题(做什么) 。 #include<iostream.h> int main() { int a,b,c; //输入 a、b、c cin>>a>>b>>c; //a,b,c 把 a,b,c 按从小到大顺序输出 if(a>b) { //a>b,c? 表示在已知 a>b 的情况下,把 a,b,c 按从小到大顺序输出 } else { //a<b,c 表示在已知 a<b 的情况下,把 a,b,c 按从小到大顺序输出 if (b>c) { //a<b,b>c? 已知 a<b 且 b>c 的情况下,把 a,b,c 按从小到大顺序输出 } else { //a<b,b<c? } } return 0;

表示在已知 a<b 的情况下,把 a,b,c 按从小到大顺序输出

已知 a<b 且 b<c 的情况下,把 a,b,c 按从小到大顺序输出

} 编译运行上面程序,发现错误时修改,直到程序正确。 5、对问题“//a<b,b>c?”及 “//a<b,b<c?”进一步求精。 #include<iostream.h> int main() { int a,b,c; //输入 a、b、c cin>>a>>b>>c; //a,b,c 把 a,b,c 按从小到大顺序输出 if(a>b) { //a>b,c? 表示在已知 a>b 的情况下,把 a,b,c 按从小到大顺序输出 } else { //a<b,c 表示在已知 a<b 的情况下,把 a,b,c 按从小到大顺序输出 if (b>c) { //a<b,b>c 已知 a<b 且 b>c 的情况下,把 a,b,c 按从小到大顺序输出 if (a<c) { //a<b,b>c,a<c? } else { //a<b,b>c,a>c? } } else { //a<b,b<c 已知 a<b 且 b<c 的情况下,把 a,b,c 按从小到大顺序输出 cout<<a<<' '<<b<<' '<<c<<endl; } } return 0; } 问题 “//a<b,b>c?” 细化为两个更简单的问题 “//a<b,b>c,a<c?” “ //a<b,b>c,a>c?” 及 , “//a<b,b<c?”最终解决。 编译运行上面程序,发现错误时修改,用数据”1 2 3”输入测试,直到程序正确。 6、直接解决问题“//a<b,b>c,a<c?”及 “ //a<b,b>c,a>c?” #include<iostream.h> int main() { int a,b,c; //输入 a、b、c cin>>a>>b>>c;

//a,b,c 把 a,b,c 按从小到大顺序输出 if(a>b) { //a>b,c? 表示在已知 a>b 的情况下,把 a,b,c 按从小到大顺序输出 } else { //a<b,c 表示在已知 a<b 的情况下,把 a,b,c 按从小到大顺序输出 if (b>c) { //a<b,b>c 已知 a<b 且 b>c 的情况下,把 a,b,c 按从小到大顺序输出 if (a<c) { //a<b,b>c,a<c? cout<<a<<' '<<c<<' '<<b<<endl; } else { //a<b,b>c,a>c? cout<<c<<' '<<a<<' '<<b<<endl; } } else { //a<b,b<c 已知 a<b 且 b<c 的情况下,把 a,b,c 按从小到大顺序输出 cout<<a<<' '<<b<<' '<<c<<endl; } } return 0; } 编译运行上面程序,发现错误时修改,输入数据”1 3 2”及 “2 3 1”测试,直到程序 正确。 7、重复 4~6 解决问题“//a>b,c?” 。 小结 程序像滚雪球一样变大,并在变大的过程中随时保持正确性,使得调试查找错误轻 而易举。 下表中如果在写程序过程中去掉所有的注释语句, 当设计 26 行的程序语句时, 你必 须同时考虑第 8 行 if(a>b)、第 22 行 if(b>c)、第 24 行 if(a<c), “a>b“还需反向考虑,与把注意 力、思维力放在第 25 行的问题“//a<b,b>c,a<c?”相比,孰难孰易? 条件语句的编程设计规范: 1. 写出如下框架(条件语句格式框架) if ( ) { } else { } 2.设计确定条件,此时绝对不应考虑下面两对花括号里面的问题。

3.根据条件决定下面两处的问题,不要不顾总体,即不顾 else 下的情况而直接陷 入问题 1 的细节。而当要处理“//问题 1?”或“//问题 2?”,就要抛开一切,把思 维力集中在问题本身。 if (<条件> ) {//问题 1? } else {//问题 2? } 这个例子的程序有三重嵌套的 if 语句,逻辑结构有点复杂,我们在教学实践中发 现,只要方法得当,学生很快能写出类似的程序。教师需要在教学中不时地纠正学生偏 离“条件语句的编程设计规范”的行为。按以上例子方法“落实逐步求精” ,程序设计 与编写代码一体化,问题的复杂性及代码的错误都控制在局部,学生学得轻松,他们很 乐意挑战编程,教学效果特好。 解决复杂问题,关键在于落实逐步求精,对问题进行分类分步处理或用循环模式 处理,在这个过程中,注意控制好思维:什么时候应在抽象的层面思考,什么时候考虑 细节(相对的) ,并控制好分类分步的节奏,做到对全局和局部随时有清晰的把握。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
#include<iostream.h> int main() { int a,b,c; //输入 a、b、c cin>>a>>b>>c; //a,b,c if(a>b) { //a>b,c? if (b>c) //a>b,b>c? cout<<c<<' '<<b<<' '<<a<<endl ; else //a>b,b<c? if (a>c) cout<<b<<' '<<c<<' '<<a<<endl; else cout<<b<<' '<<a<<' '<<c<<endl; } else { //a<b,c if (b>c) { //a<b,b>c if (a<c) 已知 a<b 且 b>c 的情况下,把 a,b,c 按从小到大顺序输出 表示在已知 a<b 的情况下,把 a,b,c 按从小到大顺序输出 表示在已知 a>b 的情况下,把 a,b,c 按从小到大顺序输出 把 a,b,c 按从小到大顺序输出

25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40

{ } else { } } else { } } return 0; }

//a<b,b>c,a<c? cout<<a<<' '<<c<<' '<<b<<endl;

//a<b,b>c,a>c? cout<<c<<' '<<a<<' '<<b<<endl;

//a<b,b<c

已知 a<b 且 b<c 的情况下,把 a,b,c 按从小到大顺序输出

cout<<a<<' '<<b<<' '<<c<<endl;

e-mail: gxnoip@sina.com


推荐相关:

...采用逐步求精技术,SD通常与SA相联,即依据数据流图设...

结构化设计方法(SD)与结构化分析方法(SA)一样遵循哪种模型,采用逐步求精技术,SD通常与SA相联,即依据数据流图设计程序的结构 A.实体B.原型C.抽象思维D.生命期...


软件工程导论试题集1(有答案)

逐步求精的根据C.抽象的 根据D.信息隐藏和局部化的...数据字典是软件需求分析阶段的最重要工具 之一,其最...3页 免费 《软件工程导论》试题及... 3页 免费©...


...(2) 为基础、自顶向下、逐步求精和模块化的过程。 _...

结构设计是一种应用最广泛的系统设计方法,是以 (2) 为基础、自顶向下、逐步求精和模块化的过程。 A) 数据流 B) 数据流图 C) 数据库 ...


...以下___工具能更好地支持自顶向下、逐步求精的方法...

详细设计有很多工具,以下___工具能更好地支持自顶向下、逐步求精的方法。 A.程序流程图B.HIPO图C.IPO图D.N-S图_答案解析_2016年_一模/二模/三模/联考...


第三次作业答案

基本要点: 自顶向下、逐步求精的设计方法 使用顺序、选择、循环三种基本控制结构 在三种基本控制结构中保持单入口、单出口 第七章 实现作业 一、名词解释 编码:...


标准化宣贯落实方案

标准化宣贯落实方案_制度/规范_工作范文_应用文书。...及时采取有效措施逐一解决,并 逐步补充、完善、细化...“粗活细作、细活精做、精益求精”的精细化管 理...


...A.多态性B.自顶向下C.模块化D.逐步求精_答案_百度高考...

不要一开始就过多追求众多的细节,先从最上层总目标开始设计,逐步使问题具体化。2、逐步求精:对复杂的问题,应设计一些子目标作过渡,逐步细化。3、模块化:一个...


主题实验(1)

实验一 控制结构综合程序设计 一.【实验目的】 1、熟练掌握分支结构、循环结构...在这个过程中,每一次分解 都是对上一层的问题进行细化和逐步求精,最后形成一种...


软件测试期末复习题

答: (1)自顶向下增量式测试: —主要优点在于它可以自然的做到逐步求精,一开始就能让测试者看到系统的框架。 —主要缺点是需要提供桩模块,并且在输入/输出模块接入...


郑州大学软件工程导论期末考试原题答案

对于交换型的数据流图,按照软件设计思想,要将一个...结构分析方法就是面向(B)自顶向下逐步求精进行需求...《软件工程导论》期末考... 6页 5下载券 郑州大学...

网站首页 | 网站地图
All rights reserved Powered by 简单学习网 www.tceic.com
copyright ©right 2010-2021。
文档资料库内容来自网络,如有侵犯请联系客服。zhit325@126.com