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


推荐相关:

结构设计是一种应用最广泛的系统设计方法,是以()为基础、自顶向下、逐步

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


信息系统分析与设计第一、二、三章习题(答案)

一种图示方法,画数据流图应遵循的原则是( A、自顶向上、分层绘制、逐步求精 ...2014年证券考试《投资基金》考前押题卷 证券从业资格考试投资分析考点识记 68份文档...


结构化程序设计的一种基本方法是( )。 A.筛选法B.递归法C.归纳法

结构化程序设计的一种基本方法是( )。 A.筛选法B.递归法C.归纳法D.逐步求精法_答案解析_2016年_一模/二模/三模/联考_图文_百度高考


软件工程 作业1

随着软件设计的逐步展开, 程序结构中每一层模块就体现了过程抽象 某一层次上的一次细化。 · “自顶向下,逐步求精”是 Niklaus Wirth 提出的设计策略:即将软件的...


题目38cbb23143323968011c9238

程序流程图是一种传统的程序设计表示工具有其优点和缺点,使用该工具时应注意 A.支持逐步求精B.考虑控制流程C.遵守结构化设计原则D.数据结构表示_答案解析_2016年_...


题目42918302de80d4d8d15a4fc4

程序流程图是一种传统的程序设计表示工具,使用该工具时应注意( )。 A.支持逐步求精B.考虑控制流程C.数据结构表示D.遵守结构化设计原则_答案解析_2016年_一模/...


逐步求精例子

逐步求精例子_计算机软件及应用_IT/计算机_专业资料。[例 1]要求用筛选法求 ...没有被剔除的数; 4 } 上述框架中的每一个加工语句都可以进一步细化成一个...


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

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


第二次作业答案

第三章 需求分析作业 一、名词解释 结构化分析方法:面向数据流进行需求分析的方法,采用自顶向下、逐步求精的分析方法。 数据流图:用图形的方式从数据加工的角度来...


软件工程

向一个已经延期的软件项目增加人员会使该项目完成的更晚,这叫做?D A. 米勒法则 B.逐步求精 C. 时光盒技术 D.布鲁克斯法则 P111 后面 74. 无我编程是哪一...

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