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


推荐相关:

J.Martin的自顶向下规划,用逐步求精分层进行,下列哪一...

J.Martin的自顶向下规划,用逐步求精分层进行,下列哪一层不属于它的求精层 A.主题数据库规划B.实体分析C.实体活动分析D.应用项目分析_答案解析_2016年_一模/二模...


JMartin的自顶向下规划,用逐步求精分层进行,下列哪一层...

JMartin的自顶向下规划,用逐步求精分层进行,下列哪一层不属于它的求精层 A.主题数据库规划B.实体分析C.实体活动分析D.应用项目分析_答案解析_2016年_一模/二模/...


J.Martin的自顶向下规划,用逐步求精分层进行,下列哪一...

J.Martin的自顶向下规划,用逐步求精分层进行,下列哪一层不属于它的求精层 A.主题数据库规划B.实体分析C.实体活动分析D.应用项目分析_答案解析_2016年_一模/二模...


J.Martin的自顶向下规划,用逐步求精分层进行,下列哪一...

J.Martin的自顶向下规划,用逐步求精分层进行,下列哪一层不属于它的求精层 A.主题数据库规划B.实体分析C.实体恬动分析D.应用项目分析_答案解析_2016年_一模/...


J Martin的自顶向下规划,用逐步求精分层进行,下列哪一...

J Martin的自顶向下规划,用逐步求精分层进行,下列哪一层不属于它的求精层 A.主题数据库规划B.实体分析C.实体活动分析D.应用项目分析_答案解析_2016年_一模/二模...


逐步求精例子

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


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

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


James Martin的自顶向下规划,用逐步求精分层进行,下列...

James Martin的自顶向下规划,用逐步求精分层进行,下列不属于其求精层的是 A.主题数据库规划B.实体分析C.实体活动分析D.应用项目分析_答案解析_2016年_一模/二模/...


...分几个阶段逐步求精,下列中 ( )不属于建模。 _答案_百度高考...

J.Martin方法中,数据规划的第一步是建立企业模型,分几个阶段逐步求精,下列中 ( )不属于建模。 A.确定企业边界B.职能表示范围C.企业处理过程D.扩展企业处理过程...


...分几个阶段逐步求精。下列中( )阶段不属于建模。 _...

J.Martin方法中,数据规划的第一步是建立企业模型,分几个阶段逐步求精。下列中( )阶段不属于建模。 A.确定企业边界B.职能表示范围C.企业处理过程D.扩展企业处理...

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