2019年高考一轮复习信息技术浙江专用 第九单元第1节 枚举算法及程序实现课件(14张幻灯片)+练习

文档属性

名称 2019年高考一轮复习信息技术浙江专用 第九单元第1节 枚举算法及程序实现课件(14张幻灯片)+练习
格式 zip
文件大小 1.1MB
资源类型 教案
版本资源 通用版
科目 信息技术(信息科技)
更新时间 2019-05-22 11:46:41

文档简介

教师备用题库
1.火柴算术游戏,给定n(n<=24)根火柴,恰好用尽n根火柴拼凑出A+B=C形式的算式,问一共有多少种可行方案,请输出方案的总数,已知0~9每个数字所需的火柴根数如下表所示:
/
注意:(1)其中A+B=C 等式中的“+”“=”需要用去4根火柴。
(2)0+4=4 与4+0=4算作一种方案。
例如 n=18,符合条件的算式共有5个:0+4=4,0+11=11,1+10=11,2+2=4,2+7=9。
小明设计了一个程序,在Text1中输入火柴数量,单击“计算”按钮,在Label1中输出总的可行方案数,并在List1中输出所有可行的算式。
/
程序代码如下,加框处代码有误,请修改。
Dim s(0 To 9) As Integer
Private Sub Command1_Click()
Dim n As Integer, a As Integer, b As Integer, count As Integer
  count=0
  n=Val(Text1.Text)
  For a=0 To 999 Step 1
    For b=a To 999 Step 1
       If a+b+4=n  Then   '①
        List1.AddItem Str(a)+"+"+Str(b)+"="+Str(a+b)
        count=count+1
      End If
    Next b
  Next a
  Label2.Caption="共"+Str(count)+"种方案"
End Sub
Function gs(ByVal x As Integer) As Integer
  Dim tmp As Integer
  tmp=0
  If x=0 Then tmp=s(0)
  Do While x > 0
    tmp=x Mod 10     '②
    x=x 10
  Loop
  gs=tmp
End Function
Private Sub Form_Load()
  s(0)=6: s(1)=2: s(2)=5: s(3)=5: s(4)=4
  s(5)=5: s(6)=6: s(7)=3: s(8)=7: s(9)=6
End Sub
答案 ①gs(a)+gs(b)+gs(a+b)+4=n  ②tmp=tmp+s(x Mod 10)
解析 ①处枚举所有A+B=C的算式,在满足算式成立条件下,对A,B,A+B分别调用gs自定义函数以得到它们各自的火柴数量,然后判断火柴总消耗量是否恰好等于n。
②处gs自定义函数内部,为了得到参数x的火柴数量,需先分离x的各位数字,然后提取对应数字所需的火柴数s(x Mod 10),再累加得到x所需的火柴数量tmp,故该处代码为“tmp=tmp+s(x Mod 10)”。
2.(2015浙江高考模拟)下列程序的功能是将text1中输入的自然数分解为3个互不相同的质数(三个质数的和等于输入的自然数),并把分解产生的质数按升序顺序显示在左边的列表框中。例如,输入20,那么在列表框中会显示如图所示结果。其中,界面中“开始处理”按钮的名称是“Command1”,程序中函数f(x)的功能是判断x是否为质数,如果是质数则返回值为true,否则返回值为false。
/
请在下列程序代码的基础上按照要求设计该程序,完善程序中的划线部分。
Dim n As Integer,a1 As Integer,a2 As Integer,a3 As Integer
Function f(x as integer) As Boolean
 f=True
 For i=2 To Sqr(x)
   If x Mod i=0 Then   (1)  ?
 Next i
End Function
Private Sub Command1_Click()
n=   (2)   ?
For a1=2 To n
 For a2=a1 To n
  For a3=a2 To n
   If   (3)   And f(a1) And f(a2) And f(a3) Then?
    List1.AddItem(Str(a1)+“ ”+Str(a2)+“ ”+Str(a3))
   End If
  Next a3
 Next a2
Next a1
End Sub
答案 (1)f=False (2)Val(Text1.Text) (3)n=a1+a2+a3
解析 (1)函数f(x)的功能是判断x是否为质数,如果是质数则返回值为true,否则返回值为false。如果2到Sqr(x)中有一个数能被x整除,则x就不是质数,也就是函数返回值为false。因此此处填f=False。
(2)变量n是待分解的自然数,该值从文本框text1中输入。因此该处填x=Val(Text1.Text)。
(3)符合条件的解需要满足两个条件:a1、a2和a3都是质数;a1、a2和a3的和等于被分解的自然数。
第1节 枚举算法及程序实现
模拟演练
1.一个十进制整数的二进制表示中,如果数字“1”的个数多于数字“0”的个数,则称该整数为A类数。如十进制整数26的二进制表示为11010,26是一个A类数。下列VB程序的功能是:寻找前1 000个自然数中所有A类数在List1中输出,并将统计个数在Text1中输出。
请回答以下问题。
(1)十进制数37   (选填:是/不是)A类数。?
(2)请在划线处填入合适的代码。
Private Sub Command1_Click()
  Dim i As Integer, n As Integer
  Dim s As Integer  's为A类数的个数
  Dim t As Integer 't为二进制数中“1”的个数
  Dim k As Integer 'k为二进制数中“0”的个数
  s=0
  For i=1 To 1000
   n=i:t=0:k=0
   Do While n > 0
    If   ①    Then t=t+1 Else k=k+1?
       ②   ?
   Loop
   If t>k Then
    List1.Additem str(i)
    s=s+1
   End If
 Next i
 Text1.Text=Str(s)
End Sub
答案 (1) 不是 (2)① n mod 2 <>0 或n mod 2=1 ② n=n2
解析 本题主要考查算法的基础知识。
(1)根据计算,十进制数37转换为二进制为100101,不是A类数。
(2)①从程序代码可以得知,由于变量t保存二进制数中“1”的个数,因此前面的条件必然是n mod 2=1。②根据十进制转换为二进制的“除2取余倒排法”的运算法则,n的值将被2整除,故n=n2 。
2.(2016温州3月选考模拟,16,4分)如果两个质数的差为2,则这两个质数称为孪生质数对。编写VB程序,实现如下功能:单击“显示孪生质数对”按钮Command1,在列表框list1中显示100以内的所有孪生质数对(运行效果如图所示)。
/
实现上述功能的VB代码如下,但加框处代码有错,请改正。
Dim a(1 To 50)As Integer
Private Sub Command1_Click()
Dim i As Integer
k=0:i=3
Do While i<=100
If prime(i) Then   ??(1)
 k=k+1
 a(k)=i
End If 
i=i+2
Loop
For i=2 To k
 If a(i)=a(i+1)+2 Then   ??(2)
   List1.AddItem Str(a(i-1))+“和”+Str(a(i))
 End If
Next i
End Sub
Function prime(x As Integer)As Boolean
prime=False
For i=2 To Int(Sqr(x))
 If x Mod i=0 Then
   prime=True
   Exit For
 End If
Next i
End Function
答案 (1)Not prime(i)或 prime(i)=False
(2)a(i)=a(i-1)+2
解析 本题考查的是程序阅读能力和函数知识。通过阅读不难发现函数prime的功能是质数的判断,如果是质数,则返回值为False,否则返回值为True。在Do循环中,通过观察发现(1)处正确答案为Not prime(i)或 prime(i)=False。a(i)存储100以内的所有质数,在For循环中,循环变量初始值为2,所以(2)处正确的语句为a(i)=a(i-1)+2。
3.珠心算是在大脑中以算珠表象作为载体,运用珠算法则所进行的计算。某学校的珠心算老师采用一种快速考查珠心算加法能力的测验方法。他随机给出一个正整数集合,集合中的数各不相同,然后要求学生回答:其中共有多少个数恰好等于集合中另外两个(不同的)数之和?例如对于集合{1,2,3,4},一共有2个数等于集合中另外两个数之和,它们是3、4(4=3+1,3=2+1)。将上述算法编写成程序,其功能如下:程序运行时产生n个范围在[1,100]内的不同的随机整数存储在数组a中,并在列表框List1中显示。单击按钮Command1后,在标签Label1上输出结果,如图所示。
/
(1)对于集合{1,2,3,4,5,6},一共有    个数等于集合中另外两个数之和。?
(2)实现上述功能的VB程序如下,请在划线处填入合适代码。
Const n=12
Dim a(1 To n) As Integer
Dim flag(1 To 100) As Boolean
Private Sub Form_Load()
Dim i As Integer, t As Integer
For i=1 To 100
  flag(i)=False
Next i
i=1
Do While i <=n
  t=Int(Rnd * 100)+1
  If Not flag(t) Then
      ①   ?
    List1.AddItem Str(t)
    flag(t)=True
    i=i+1
  End If
Loop
End Sub
Private Sub Command1_Click()
Dim i As Integer, j As Integer, ans As Integer
ans=0
For i=1 To n
  For j=i+1 To n
   If a(i)+a(j) <=100 Then
     If   ②   Then?
       ans=ans+1
       flag(a(i)+a(j))=False
     End If
      ③   ?
  Next j
Next i
Label1.Caption="共有"+Str(ans)+"个数!"
End Sub
答案 (1)4 (2)①a(i)=t ②flag(a(i)+a(j))或flag(a(i)+a(j))=True ③End If
解析 本题解题的关键在于理解标记数组flag的作用。逻辑类型数组flag用于标记集合中的某个数是否存在,flag(i)=True,表示i是集合的一个元素。①如果产生的随机整数t在数组中还未存在,则将该随机数存储到数组a中,所以①处答案为a(i)=t。②通过双循环穷举任意两个元素之和,如果两数之和等于数组中的某个数,那么就找到一个数,计数器ans累加1。a(i)+a(j)的值是否等于集合中
的某个数,可以通过flag(a(i)+a(j)) 来判断,如果flag(a(i)+a(j))=True表示
存在这个数。③分析语法结构,两个If语句块需要两个End If。
第1节 枚举算法及程序实现
真题再现
学考题组
1.(2018浙江4月学考+选考,14,5分)某种编码以 4 位二进制码为一组,每组前两位表示方向,后两位表示距离。编写一个程序,将编码翻译成方向和距离,距离值为每组编码后两位二进制码转换为十进制数的值。具体功能如下:在文本框Text1中输入连续多组编码,单击“翻译”按钮Commandl,结果显示在列表框 List1 中。程序运行界面如图所示。
/
要使程序运行时,文本框 Text1的Width属性值为2018,可在 Form_Load事
件过程中添加语句    (单选,填字母:A.Width=2018/B.Text1. Width=2018/C.Width.Text1=2018) 。?
(2)实现上述功能的 VB 程序如下,请在划线处填入合适的代码。
Private Sub Command1_Click()
 Dim s As String, c As String, d As String
 Dim n As Integer, b1 As Integer, b2 As Integer, v As Integer, i As Integer
 s=Text1.Text: n=Len(s):i=1
 Do While i<=n
  c=Mid(s,i,2)
  If c=“00”Then
   d=“东”
  ElseIf c=“01” Then
   d=“南”
  ElseIf c=“10” Then
   d=“西”
  Else
   d=“北”
  End If
  b1=Val(Mid(s,i+2,1))
  b2=Val(Mid(s,i+3,1))
  v= ①  ?
  List1.AddItem d+“”+Str(v)
   ② ?
 Loop
End Sub
(3)若文本框 Text1 中输入的内容为“1111”,单击“翻译”按钮后,列表框 List1 中显示的内容是    。?
答案 (1)B  (2)①b1*2+b2 ②i=i+4 (3)北 3
解析 (1)设置控件的属性,基本格式为:对象名.属性名=属性值。
(2)①根据题意,4位一组,前两位是方向,后两位是距离,b1是第3位,b2是第4位,将后两位转换成十进制值方法为按权相加法:b1*2+b2。②4位一组,本组起点i,下一组起点i+4。
(3)“1111”的前两位是“11”,根据代码,是代表方向“北”。后两位“11”转换成十进制是3。
2.(2016浙江10月选考,14,5分)编写“加法练习题生成器”程序,实现如下功能:在文本框Text1中输入题数n,单击“生成”按钮Command1.在列表框List1中显示n个两数之和小于100的加法练习题,程序运行界面如图a所示。
/
(1)在设计程序界面时,应使用图b所示“控件工具箱”中的    (填写相应编号)添加“生成”按钮。?
(2)实现上述功能的VB程序如下,请在划线处填入合适的代码。
Private Sub Command1_Click()
 Dim n As Integer,i As Integer,a As Integer,b As Integer
 Randomize
 n=Val(Text1.text)
 i= ① ?
 Do While i<=n
  a=Int(Rnd*100)
  b=Int(Rnd*100)
  If ② Then?
   List1.AddItem“(“+Str(i)+”)”+Str(a)+“+”+Str(b)+“=”
   i=i+1
  End If
 Loop
End Sub
(3)运行该程序,在文本框中输入5,单击“生成”按钮后,对语句“a=Int(Rnd*100)”执行次数的描述,最合理的是    (单选,填字母:A.执行次数等于在5/B.执行次数大于等于5/C.执行次数小于等于5)。?
答案 (1)3
(2)①1 ②a+b<100或其他等价表达式
(3)B
解析 本题主要考查VB的综合应用。
(1)本小题考查如何选择控件创建对象。这里使用的是命令按钮CommandButton。
(2)本小题考查如何利用循环语句实现枚举算法。循环变量i的初值为1,终值为n。枚举算法要求将每一个可能的解经过检验后确认是不是真正的解,此处的检验条件为a,b两数之和小于100,转换成VB表达式为a+b<100。
(3)本小题考查对循环结构的程序执行过程的理解。当文本框中输入5时,即要求程序完成的任务是:采用枚举算法,从若干个a和b的组合中找出5组,使其满足a+b<100条件。故随机生成的a,b的个数必须大于等于5。即对于枚举算法而言,
其列举的可能解的数量一定是大于等于其真正解的数量。
课件14张PPT。
第1节 枚举算法及程序实现一 枚举算法的思想方法二 枚举算法的程序实现教材研读突破 枚举算法的列举范围和验证条件重难突破一、枚举算法的思想方法
枚举算法的基本思想是一一列举出该问题所有可能的情况,并根据题目 的条件逐个进行判断,从中挑选出符合条件的解。教材研读解)”“条件判断(筛选解)”“输出解的形式(输出解的内容或统计解 的个数)”。
其次要掌握枚举算法的一般程序结构。由于枚举算法基本思想的关键词是“一一列举”和“逐个判断”,因此枚举算法的代码特征非常明 显,就是循环语句里嵌套判断语句,一般形式如下:
For 循环变量=初值 to 终值二、枚举算法的程序实现
枚举算法程序实现时,首先要明确程序实现的三要素,即“循环(枚举 EndIf
Next
其中“初值”和“终值”确定了列举的范围,既不能遗漏,又尽量使范 围最小;“条件表达式”即判断的依据;“语句块”里通常是计数(即统 计正确解的个数),或输出正确解(一般用List列表框来输出多解)。 If 条件表达式
      语句块A.递归算法  B.枚举算法 ????
C.冒泡排序  D.选择排序
解析 本题主要考查各种算法的基本思想。本题中的算法符合枚 举算法的基本思想,即一一列举所有可能的解,并验证该解是否是正确解。在给定的正整数区间[m,n](m  1.枚举算法属于搜索策略,适用于解变量确定的连续值域的问题。 设计枚举算法时要在尽可能小的范围内罗列出所有可能的情况,不能遗 漏,也不能重复。
枚举算法中较难的是确定枚举的范围。不能遗漏所有可能的解,比如3 位数是从100开始至999结束,而不是从101开始,也不是从1开始。重难突破 为了提高程序的执行效率,应该尽量缩小枚举的范围,比如百鸡百钱
问题:一百元钱买一百只鸡,公鸡5元1只,母鸡3元1只,小鸡1元3只。假设买 公鸡x只,母鸡y只,小鸡z只。则枚举范围为x:0~100、y:0~100、z:0~100, 枚举的变量有3个,使用三重循环,总循环次数是101*101*101次。但是 这个枚举范围可以进行优化,公鸡5元1只,最多只能买20只,母鸡3元1只, 最多只能买33只,因此枚举范围可改为x:0~20、y:0~33、z:0~100,总循 环次数是21*34*101次。 2.如果枚举变量之间存在简单的数量关系,则可以利用该验证条件优
化程序,如百鸡百钱问题中,验证条件是:x+y+z=100和5*x+3*y+z/3=100,可 利用验证条件x+y+z=100,将枚举变量z作为x和y的因变量,即:z=100-x-y, 则三重循环可变成两重循环,总循环次数是21*34次,大大提高了执行效 率。类似问题还有:鸡兔同笼问题、钱币凑总额问题等。 例 通过编程寻找3位的水仙花数。什么是水仙花数?水仙花数是指一 个 n 位数(n≥3),它的每个位上的数字的 n 次幂之和等于它本身。例如 153是水仙花数,因为13+53+33=153。
解决此问题的Visual Basic程序如下,程序界面如图所示,在列表框List1 中输出结果。
在(1)和(2)划线处,填入合适的语句或表达式,把程序补充完整。
Private Sub Command1_Click()
Dim i As IntegerDim a,b,c As Integer
For(1)   ????
 a=i100
 b=i10 Mod 10
 c=i Mod 10
 If(2)   ???? Then List1.AddItem Str(i)
Next
End Sub?
(1)程序中划线处(1)应填入  i=100 To 999  。
(2)程序中划线处(2)应填入  a^3+b^3+c^3=i 。解析 (1)枚举算法在列举的过程中,不能遗漏任何一个可能的解,寻找3 位的水仙花数,100到999都是可能解。
因此列举所有可能解的语句应该是For i=100 to 999。
(2)if语句用于检验当前列举的可能解i是否是正确解。水仙花数的验证 条件:它的每个位上的数字的n次幂之和等于它本身,本程序要求找出3 位的水仙花数,因此n=3,变量a、b、c是可能解i的百位、十位和个位上 的数字,因此验证条件是a^3+b^3+c^3=i。
同课章节目录