资源简介 教师备用题库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 IntegerPrivate 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 SubFunction 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=tmpEnd FunctionPrivate 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)=6End 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 IntegerFunction f(x as integer) As Boolean f=True For i=2 To Sqr(x) If x Mod i=0 Then (1) ? Next iEnd FunctionPrivate 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 a2Next a1End 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 IntegerPrivate Sub Command1_Click()Dim i As Integerk=0:i=3Do While i<=100If prime(i) Then ??(1) k=k+1 a(k)=iEnd If i=i+2LoopFor i=2 To k If a(i)=a(i+1)+2 Then ??(2) List1.AddItem Str(a(i-1))+“和”+Str(a(i)) End IfNext iEnd SubFunction prime(x As Integer)As Booleanprime=FalseFor i=2 To Int(Sqr(x)) If x Mod i=0 Then prime=True Exit For End IfNext iEnd 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=12Dim a(1 To n) As IntegerDim flag(1 To 100) As BooleanPrivate Sub Form_Load()Dim i As Integer, t As IntegerFor i=1 To 100 flag(i)=FalseNext ii=1Do While i <=n t=Int(Rnd * 100)+1 If Not flag(t) Then ① ? List1.AddItem Str(t) flag(t)=True i=i+1 End IfLoopEnd SubPrivate Sub Command1_Click()Dim i As Integer, j As Integer, ans As Integerans=0For 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 jNext iLabel1.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) ② ? LoopEnd 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 LoopEnd 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 IntegerFor(1) ???? a=i100 b=i10 Mod 10 c=i Mod 10 If(2) ???? Then List1.AddItem Str(i)NextEnd 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。 展开更多...... 收起↑ 资源列表 教师备用题库.docx 模拟演练.docx 真题再现.docx 第1节 枚举算法及程序实现.pptx