当前位置:文档之家› 用穷举法设计程序

用穷举法设计程序

《穷举法解决问题》教学设计
《用穷举法设计程序》
一、教学目标
1、知识与技能
⑴了解穷举法的基本概念及用穷举法设计算法的基本过程。

⑵分析建立正确的数学模型,归纳穷举法穷举技巧。

⑶能够根据具体问题的要求,使用穷举法设计算法,编写程序求解问题。

2、过程与方法
⑴经历用穷举法求解问题的基本过程。

⑵能通过实际问题的分析、求解过程,尝试归纳出利用穷举法解决问题的思路和方法。

⑶体验穷举策略在穷举法中的地位和作用,并选择适当的穷举方案解决问题。

3、情感态度与价值观
⑴引导学生关注穷举法在社会生活中的应用,进一步提高利用信息技术解决实际问题的能力。

⑵通过小组讨论与探究活动,提高团队合作能力,促进探究的热情。

⑶在解决问题的过程中进一步培养和提升学生的逻辑思维能力。

二、学情分析
本节内容的教学对象是高一年级学生,他们已经具备了一定的逻辑思维、分析问题、表达思想等能力。

同时,通过前几个章节的学习与实践,学生已经历了用计算机解决问题的过程与步骤,学会了对计算机程序进行调试,并掌握了顺序、循环、条件三种程序结构,为本节内容的学习提供了良好的基础。

前一节的学习,学生掌握了如何用解析法设计程序,但现实生活中也有很多问题往往无法用解析法找到答案,这时就需要使用计算机来帮助我们逐个列举出可能的情况,从而引出本课内容——“穷举法”。

三、教材分析
1、教学内容:
本节内容是广东教育出版社出版的普通高中信息技术(选修1)《算法与程序设计》教材第四章第2节的教学内容,包括:穷举法的基本思路,用穷举法求解问题(第一课时),穷举法中穷举方案的选择等(第二课时)。

而本节课是穷举法的第一课时(用穷举法解决问题的基本过程)。

2、重点难点分析:
教学重点:
用穷举法解题的基本思路和过程。

教学难点:
分析问题,建立数学模型,构造算法。

3、课时安排:1课时。

四、教学方法
主要教学方法:讲授法演示法任务驱动情境教学
主要学习方法:小组协作自主探究
五、教学环境
多媒体网络教室投影仪多媒体课件
一、教学目标分析
1.知识技能分析
a.认识穷举法在日常生活中问题解决的应用,并认识到利用计算机用穷举法解决问题的高效。

b.掌握穷举法设计程序的基本思想,并了解穷举法的适用范围及变量定义范围。

c.利用穷举法思想编程设计程序,解决问题,并能对它评论。

2.过程与方法
利用“百钱百鸡”问题的解决过程引导穷举法解决问题的方法与过程,并由此类问题(韩信点兵、水仙花数)引导学生对这一类问题抽象出具体的数学模型,运用穷举法能独立的实现程序。

3.情感态度与价值观
能对生活中穷举类问题利用计算机的高效处理能力形成主动运用编程思想解决,并能动手编写程序,实现问题有解决。

二、教学内容分析
教材选自教科版《算法与程序设计》选修第三章第二节的内容,
本章内容是在前面两章对于编程的基本结构的基础上,对于实际生活中有代表性的某一类问题的具体算法的介绍,在本章第一节介绍了解析法之后,对于实际生活中列举类问题运用解析法不是太合适,所以引入第二种代表性的算法穷举法的介绍。

三、学生分析
高二学生对世界的认识正处于由感性到理性,由具体到抽象的认识,学生应掌握VB编程的基本知识(数据类型、基本结构、输入输出语句),并理解掌握解析法解决问题。

学生对于列举类的问题用解析法来实现学生感到困惑,利用穷举法,因此对此类问题的归纳求解,学生应该掌握。

四、教学重难点
教学重点穷举法设计程序的基本思路,掌握利用穷举法编程解决问题。

教学难点,哪一类问题适合穷举法,穷举的范围以及评价穷举效率的高低。

五、教学方法
归纳推理,任务驱动法
六、教学过程
反思:
穷举法在日常生活中有很多应用实例,如果单靠人脑,花费时间
比较烦琐,因此应学会利用计算机编程实现。

本节内容教材采用的是分组比赛,但程序比较复杂,大部分学生接受可能存在一定的困难,所以采用的是在编程中比较经典的问题。

在教学过程中,特别在确定穷举范围时,要联系前面的知识,另外,穷举法的的优化是本节的重点,要让学生在掌握穷举法的基础上,会对程序进行优化。

(注:所有原程序放在vb文件夹内)
附录:
代码一:
Private Sub Command1_Click()
Dim a, b, c As Integer
Print "公鸡", "母鸡", "小鸡"
For a = 0 To 100
For b = 0 To 100
c = 100 - a - b
If a * 5 + b * 3 + c / 3 = 100 Then
Print a, b, c
End If
Next b
Next a
End Sub
代码二:
Private Sub Command1_Click()
Dim a, b, c As Integer
Print "公鸡", "母鸡", "小鸡"
For a = 0 To 20
For b = 0 To 34
c = 100 - a - b
If a * 5 + b * 3 + c / 3 = 100 Then
Print a, b, c
End If
Next b
Next a End Sub 代码三:
Private Sub Command1_Click() Dim i As Integer For i= 100 To 1000
If i mod 3 =2 and i mod 5 =3 and i mod 7 =3 Then Print "该队官兵数可能为:" & i End If Next i End Sub 代码四:
Private Sub Command1_Click() Dim i As Integer
For i= 100 To 1000
If i mod 21 =2 and i mod 5 =3 Then Print "该队官兵数可能为:" & i End If Next i End Sub 问题
设计程序,找出所有水仙花数。

所谓水仙花数,是指一个3位数,其各位数字的
立方和等于该数字本身。

例如,153是一个水仙花数,因为153 = 13 + 53 +33。

要求将水仙花数三个一行地显示在窗体上,统计出个数,计算平均值。

水仙花数问题。

统计所有水仙花数的数量,并打印。

所谓水仙花数是指满足如下条件的三位数:个位数的立方、十位数的立方和百位数的立方和等于其自身。

例如407为一水仙花数,3
3
3
704407++=。

分析 找出水仙花数需要使用循环,从100循环到999。

数据要求 问题中的常量: 无
问题的输入:
无。

问题的输出:
所有的水仙花数。

设计 初始算法
1 从100循环到999。

判断某个数是否是水仙花数。

算法细化
判断一个三位数是否为水仙花的关键是,求出其个位数、十位数和百位数。

1) 百位数计算:a=i/100,求此数被100整除后的商。

2) 十位数计算:b=i/10-a*10,求此数被100整除后的余数。

3) 个位数计算:c=i%10,求此数被10整除后的余数。

例如,123的各位数字的计算如下: 1) 百位数: 123/100=1;
2) 十位数: 123/10-1*10=2; 3) 个位数: 123%10=3。

接下来判断333c b a ++的结果是否等于i.
流程图
实现
#include "stdio.h"
#include "math.h"
void main()
{
unsigned int a,b,c, i,n;
n=0;
for(i=100;i<1000;i++)
{
a=i/100;
b=i/10-a*10;
c=i%10;
if((a*a*a+b*b*b+c*c*c)==i)
{
printf("%5d",i);
n++;
}
}
}
测试输出所有的水仙花数,此处略。

相关主题