资源简介 第9节 循环结构算法实现—For语句知识点目标考试要求算法的程序实现①循环语句②解析算法、枚举算法等常见算法的实现c必考+加试1.循环结构又称为重复结构。当条件成立的时候,执行循环体的代码,当条件不成立的时候,跳出循环,执行循环结构后面的代码。For语句 For 循环变量=初值 To 终值 Step 步长 语句块 Next 循环变量2.如果在循环过程中要退出循环,For循环用Exit__For__语句来实现,也可以用循环变量=终值来实现。3.在循环结构中包含一个分支结构,根据题目的条件逐个进行判断,该算法的基本思想是枚举算法。要点有三个,一是确定枚举的范围,二是筛选解(条件判断),三是统计解的个数或者具体内容。一、用于循环次数确定的类型用于固定次数的重复操作时,往往用For循环,此时变量起到计数或表示在某个位置的作用。【例1】 模拟两人掷骰子游戏。由电脑随机产生两个1到6之间的整数,表示甲乙两人所掷的骰子数,根据这两个数字之和,如果是偶数表示甲赢了,奇数表示乙赢了。在文本框Text1中输入总次数n,单击“计算”按钮Command1,在文本框Text2中输出甲赢的次数,在文本框Text3中输出乙赢的次数。在列表框List1中输出游戏过程。程序运行界面如下图所示:程序代码如下所示,请在划线处填入合适的代码。 Private Sub Command1_Click()Dim a As Integer,b As Integer,n As IntegerDim j As Integer,k As Integer,i As IntegerRandomizek=0:j=0n=Val(Text1.Text)For i=____①____a=Int(Rnd()*6+1)b=Int(Rnd()*6+1)If ____②____ Then List1.AddItem Str(i)+”甲赢了!” ____③____Else List1.AddItem Str(i)+”乙赢了!” ____④____End IfText2.Text=Str(k)Text3.Text=Str(j)Next iEnd Sub划线处代码为①___________________________________________________②_______________________________________________________________③_______________________________________________________________④________________________________________________________________解析 本题考核的知识点是对于For结构循环及选择结构的理解。程序设计填空题在解题时,先要理解各个变量的含义,变量的含义往往从输入输出语句并结合题中所给图示来理解。从输入输出看变量含义,n表示掷骰子次数,k表示甲赢的次数,j表示乙赢的次数。因此①表示循环的范围,②表示条件成立的条件,两人的点数和为偶数,③和④所填内容和下面没有赋值过的变量有关。答案 ①1 To n ②(a+b)mod 2=0 ③ k=k+1 ④j=j+1[方法总结] 记住解程序题的三条步骤,一是理解变量的含义,先从输入输出语句来看变量的含义;二是理解各个基本结构的作用,特别是某个选择结构和循环结构;三是程序所填内容往往下面没有赋值过的变量有关。 【变式训练】 模拟划拳游戏规则如下:随机产生两个[0,5]之间的整数,表示路人甲和路人乙出拳的数字,再产生两个随机数,表示他们报的数。若一方报数为双方出拳数之和,则表示他赢了,积2分;若双方报数均为出拳之和,则表示他们平了,各积1分;若双方均不正确,不计局数。在文本框Text1中输入比试的局数,单击“开始”按钮Command1,在列表框List1中显示路人甲的情况,在列表框List2中显示路人乙的情况,在文本框Text2、Text3中分别显示他们的得分。程序运行界面如下图所示:程序代码如下,请在划线处填写合适的代码。Private Sub Command1_Click() Dim i As Integer,jc As Integer,jb As Integer,jd As Integer Dim yc As Integer,yb As Integer,yd As Integer,n As Integer Randomize:List1.Clear:List2.Clear n=Val(Text1.Text) For i=____①____jc=Int(Rnd()*6)yc=Int(Rnd()*6)jb=Int(Rnd()*6)+jcyb=Int(Rnd()*6)+ycIf ____②____Then List1.AddItem Str(jc)+” ”+Str(jb)+” ”+”平” List2.AddItem Str(yc)+” ”+Str(yb)+” ”+”平” jd=jd+1 yd=yd+1ElseIf jb=yc+jc Then List1.AddItem Str(jc)+” ”+Str(jb)+” ”+”胜” List2.AddItem Str(yc)+” ”+Str(yb)+” ”+”负” ____③____ElseIf yb=yc+jc Then List1.AddItem Str(jc)+” ”+Str(jb)+” ”+”负” List2.AddItem Str(yc)+” ”+Str(yb)+” ”+”胜” ____④____Else i=i-1End IfNext iText2.Text=Str(jd)Text3.Text=Str(yd)End Sub划线处代码为①____________________________________________________②________________________________________________________________③________________________________________________________________④_________________________________________________________________解析 本题考核的知识点是对于For结构循环及选择结构的理解。输入输出理解变量含义,n输入的次数,jd路人甲得分,yd路人乙得分。 第1空表示循环的次数,第2空表示他们平局的条件,3、4空所填内容和下面没有赋值的变量有关,显示路人甲、乙赢了,各得2分。答案 ①1 To n ②yb=yc+jc And jb=yc+jc ③jd=jd+2 ④yd=yd+2二、循环范围确定的类型某个范围内的数进行遍历情况。循环变量代表具体的某个数字,如在求水仙数、玫瑰花数时,循环变量表示从最小的三位数、四位数,到最大的三位数、四位数。【例2】 完全数。如果一个数所有的真因子(即除了自身以外的约数)的和等于它本身,则称该数为“完全数”。 在文本框Text1中输入一个数,单击“判断”按钮Command1,在文本框Text2中输出结论。程序界面如下图所示:程序代码如下,请将空白处填写完整。Private Sub Command1_Click() Dim i As Integer,n As Integer n=Val(Text1.Text) s=0 For i=1 To ____①____If ____②____ Then s=s+i List1.AddItem Str(i)End If Next i If ____③____ Then Text2.Text=”是的” Else Text2.Text=”不是End Sub划线处代码为①____________________________________________________②_________________________________________________________________③_________________________________________________________________解析 本题考核的知识点是对于For结构循环及选择结构的理解。理解变量含义,n输入的整数,s=s+i,真因子的和;循环的条件是判断除了本身以外的数是否是真因子,终值为n-1。抓住真因子的条件和完全数的条件,是解题的关键。答案 ①n-1 ②n Mod i=0 ③s=n[方法总结] 在上一节中,练习了选择结构的条件,以及各种表达式,在程序填空时,往往要体现这部分内容。因此打好函数表达式及理解选择结构功能对解答本题是有很大帮助。【变式训练】 单击“开始”按钮Command1,在列表框List1中输出这样的有趣的四位数,他能被他的前两位整除,能被中间的两位数整除,还能被最后的两位数整除,在文本框Text1中输出总的个数。程序运行界面如下:程序代码如下,请把空白处填写完整。Private Sub Command1_Click()Dim i As Integer,a As IntegerDim b As Integer,c As Integer,n As Integern=0For i=1000 To 9999a=____①____b=(i '10) Mod 100c=i Mod 100If b<>0 And c<>0 Then If ____②____Then List1.AddItem Str(i)____③____End If End IfNext iText1.Text=Str(n)End Sub划线处代码为①___________________________________________________②_______________________________________________________________③_______________________________________________________________解析 本题考核的知识点是对于For结构循环及选择结构的理解。理解变量含义,n出的个数,b中间两位数,c后面两位数,s=s+i,抓住题目中条件,均可以整除。往下找没有出现的变量,n表示符合条件的个数,数量增加一个。答案 ①i100或Int(i/100) ②i Mod a=0 And i Mod b=0 And i Mod c=0 ③n=n+1三、对于字符串的遍历1.对于文本有查找、删除、替换和插入的操作,查找是各种操作的基础,只有找到这个字符,才可以删除,才可以替换为其他字符,只有找到位置,才可以插入新的字符。2.字符查找最通常的做法是,从字符串的第1个位置开始,取出单个字符或从该位置开始的多个字符,与其他字符进行对比,接着是第2个位置,第3个位置……直到最后一个位置。3.循环变量i含义是字符串的位置。有两个函数是经常用到的,Len函数,决定了循环的次数,Mid函数,从字符串取出1个或多个字符。【例3】 在文本框Text1中输入两个正整数和一个运算符的计算表达式,单击“运算”按钮Command1,在文本框Text2中输出计算结果。程序运行界面如下:程序代码如下,请把空白处填写完整。Private Sub Command1_Click() Dim y As Integer,i As Integer,t As Integer Dim s As String,ch As String,ysf As String s=Text1.Text For i=1 To Len(s)ch=Mid(s,i,1)If ch>=”0” And ch<=”9” Then ____①____Elseysf=chy=t t=____②____End If Next i If ysf=”+” Theny=y+tElseIf ysf=”-” Theny=y-t ElseIf ysf=”*” Theny=y*t ElseIf ysf=”/” ThenIf t=0 Then Text2.Text=”” Else y=y/t End If If t<>0 Then Text2.Text=Str(y)End Sub划线处代码为①___________________________________________________②________________________________________________________________解析 本题考核的知识点是用循环结构处理字符的方法。本题最大难度是从文本中分离出一个多位整数的方法。从输入输出看,s是输入的表达式,y是输出的结果。If ch>=”0” And ch<=”9” Then语句,多次取出字符,如果取出连续的0-9之间数字,说明这个整数还没有结束,反之,表示整数已经结束,取出的是操作符。①处所填内容跟t有关,理由是从①片下找,发现变量t没有被赋值过。从语句y=y+t来推断,t是就是字符串中第1个整数。用表格表示程序在运行过程中的值。ichtS1另一种方法中变量1”2”2”2”2”5”25”25”3”0”250”250”4”*”0””5”4”4”4”从表是可以看出随着ch的变化,变量t的变化规律:2→25→250→0→4。如果取出的字符不是0~9之间的数字,则表示当前是运算符,该整数结束了,变量t将存储下一个整数的值,因此要初始化为0。这是从算术运算上来获取整个整数部分,也可以从字符连接来获得整数部分。观察上表,随着ch的变化,变量t的变化规律:“2”→“25”→“250”→ “”→“4”。把每次的ch连接起来,当读取的字符不是数字时,表示该整数已经结束,把取得的字符串转换成数字,同时把s1清空,以便存储下一个整数的值。部分代码如下所示:s1=””For i=1 To Len(s)ch=Mid(s,i,1)If ch>=”0” And ch<=”9” Then s1=s1+chElse ysf=ch y=Val(s1) s1=””End IfNext it=Val(s1)答案 ①t=t*10+Val(ch) ②0[方法总结] 在字符串中不全是数字时,要掌握把其中部分数字字符转换为一个整数的方法和技巧。在程序运行过程中,先从输入输出来理解变量的含义,从选择结构来看实现的功能,可以借助表格来推断各个变量的关系。【变式训练】 在文本框Text1中输入一段只包含大小字母的英语短文,且每个单词以一个空格或一个标点分隔,点击“统计”按钮Command1,在文本框Text2中输出单词的数量,在文本框Text3中输出单词的最大长度。程序代码如下,请将程序空白处填写完整。Private Sub Command1_Click() Dim s As String,ch As String,i As Integer Dim t As Integer,max As Integer,n As Integer s=Text1.Text For i=1 To Len(s)ch=Mid(s,i,1)If ____①____ Then t=t+1Else ____②____ If max t=0End If Next i Text2.Text=Str(n) Text3.Text=Str(max) End Sub划线处代码为①____________________________________________________②________________________________________________________________答案 ①Asc(ch)>64 And Asc(ch)<91 Or Asc(ch)>96 And Asc(ch)<123或ch>=”a” And ch<=”z” or ch>=”A” And ch<=”Z” ②n=n+11.模拟石头剪刀布游戏。规则如下:随机产生两个1至3之间的整数,分别表示路人甲和路人乙出石头、剪刀和布,如果赢了得2分,平了得1分。在文本框Text1中输入比试的局数,单击“开始”按钮Command1,在列表框List1中显示路人甲和路人乙的情况,在文本框Text2、Text3中分别显示他们的得分。程序界面如下:程序代码如下,请将程序空白处填写完整。Private Sub Command1_Click() Dim i As Integer,jc As Integer,jm As String,jd As Integer Dim yc As Integer,ym As String,yd As Integer,n As Integer Randomize:List1.Clear ____①____For i=1 To n jc=Int(Rnd()*3)+1 If jc=1 Thenjm=”石头”ElseIf jc=2 Thenjm=”剪刀” Elsejm=”布” End If yc=Int(Rnd()*3)+1 If yc=1 Thenym=”石头” ElseIf yc=2 Thenym=”剪刀” Elseym=”布” End IfIf jc-yc=-1 Or jc-yc=2 Or yc-jc=1 Then____②____ List1.AddItem jm+” ”+ym+” ”+”路人甲赢” ElseIf yc-jc=-1 Or yc-jc=2 Or jc-yc=1 Then____③____List1.AddItem jm+” ”+ym+” ”+”路人乙赢” Elsejd=jd+1yd=yd+1List1.AddItem jm+” ”+ym+” ”+”平了” End IfNext iText2.Text=Str(jd)Text3.Text=Str(yd)End Sub划线处代码为①____________________________________________________②________________________________________________________________③________________________________________________________________解析 在语句For i=1 To n前,未对n赋值;理解变量的含义,jd表示路人甲得分,yd表示路人乙得分,可以得到答案。答案 ①n=Val(Text1.Text) ②jd=jd+2 ③yd=yd+22.公元1900年是鼠年,以后每12年一个轮回,在文本框Text1中输入一个年份,单击“开始”按钮Command1,在列表框List1中输出该年及该年以后共12个年份的属相。程序运行的界面如图所示:程序代码如下,请把空白处填空完整。Private Sub Command1_Click()Dim y As Integer,t As Integer,sx As Stringsx=”鼠牛虎兔龙蛇马羊猴鸡狗猪”y=Val(Text1.Text)For i=____①____t=____②____List1.AddItem Str(i)+”年的属相是”+____③____Next iEnd Sub划线处代码为①____________________________________________________②________________________________________________________________③________________________________________________________________解析 理解变量的含义,y是输入年份,从图中及语句在语句List1.AddItem Str(i)+”年的属相是”,可以看出i表示具体哪些年份,该年以后共12个年份表达是该年及这年后面11年。年份与1900的差值的余数,表示在生肖中位置,但余数的值和位置的值差1。答案 ①y To y+11 ②(y-1900) Mod 12 ③Mid(sx,t+1,1)3.在文本框Text1中输入摄氏温度,单击“转换”按钮Command1,在文本框Text2中输出转换后的华氏温度,在列表框List1中每隔0.5度输出该温度上下2度对应的华氏温度,程序运行界面如下。程序代码如下,请把空白处填空完整。Private Sub Command1_Click() Dim t As Single,i As Single,c As Integer t=Val(Text1.Text) c=32+t*1.8 Text2.Text=Str(c) List1.AddItem ”摄氏温度”+” ”+”华氐温度” For i=t-2 To ____①____c=32+i*1.8List1.AddItem ____②____+” ”+____③____ Next iEnd Sub划线处代码为①____________________________________________________②________________________________________________________________③________________________________________________________________解析 变量含义:t表示输入的摄氏温度,c输出的华氏温度。对题中及图示中可以看出循环的范围是输入温度上下2度。注意字符串的连接格式,要把数字转换成字符。答案 ①t+2 ②Str(i) ③Str(c)4.在文本框Text1中输入一个二进制数,单击“转换”按钮Command1,在文本框Text2中显示该二进制数对应的十进制数,若二进制数中存在不是0和1的数,则输出”非法的二进制数!”,程序运行时界面如下:程序代码如下,请在空白处补充完整。Private Sub Command1_Click() Dim s As String,t As Integer,i As Integer Dim ch As String,flag As Boolean,j As Integer s=Text1.Text flag=True j=0 For i=Len(s) To 1 Step-1ch=Mid(s,i,1)If ch=”1” Or ch=”0” Then____①____ j=j+1Else ____②____ Exit ForEnd IfNext iIf flag=True ThenText2.Text=Str(t)ElseText2.Text=”非法的二进制数!”End IfEnd Sub划线处代码为①___________________________________________________②_______________________________________________________________解析 理解变量的含义。S输入的二进制数,t是转换后的十进制数,ch是从低位向高位分解的字符,j从0、1、2、3……的变化规律,flag是否是二进制数的标志。答案 ①t=t+Val(ch)*2^j ②flag=False5.判断是否是回文。一个字符串,从左到右读和从右到左读是完全一样的。在文本框Text1中输入文字,单击“检测”按钮Command1,在文本框Text2中输出结论,程序运行时界面如下:程序代码如下,请在空白处补充完整。Private Sub Command1_Click() Dim s As String,j As Integer,i As Integer,flag As Boolean s=Text1.Text flag=True For i=1 To Len(s) 2____①____If Mid(s,i,1)<>Mid(s,j,1) Then flag=False Exit ForEnd If Next i If ____②____ Then Text2.Text=”是的” Else Text2.Text=”不是”End Sub划线处代码为①____________________________________________________②________________________________________________________________解析 理解变量的含义:s输入的文本,flag是否是回文的标志,i表示分解字符的位置,从第1个位置到中间,从判断的条件Mid(s,i,1)<>Mid(s,j,1)来看,j应该是与i对应的回文位置。列出表格,找出i和j的关系。ij1Len(s)2Len(s)-13Len(s)-2…………发现i与j的和是一个定值Len(s)+1,即i+j=Len(s)+1,那么j=Len(s)-i+1答案 ①j=Len(s)-i+1 ②flag=True6.在文本框Text1中输入一个二进制数,单击“换算”按钮Command1,在标签Lable2中显示换算结果。程序运行界面如图所示:为实现上述功能,请在划线处填入合适的代码。Private Sub Command1_Click() Dim s As String,n As Integer,i As Integer,ch As String ____①____ For i=1 To Len(s)ch=Mid(s,i,1)____②____ Next i Label2.Caption=”二进制数”+s+”转换为十进制的值为”+Str(n)End Sub划线处代码为①____________________________________________________②________________________________________________________________答案 ①s=Text1.Text ②n=n*2+Val(ch)7.用电脑随机产生两位数以内的加减乘除运算的算式,要求结果不能出现负数。在文本框Text1中输入题量,单击“生成”按钮Command1,在列表框List1中显示结果。程序运行界面如图所示:为实现上述功能,请在划线处填入合适的代码。Private Sub Command1_Click() Dim n As Integer,a As Integer,b As Integer Dim ch As String,s As String,i As Integer s=”+-*/” n=Val(Text1.Text) List1.Clear For i=1 To na=Int(Rnd()*100)b=Int(Rnd()*100)____①____If c=2 And ai=i-1ElseIf c=4 And____②____i=i-1Else ____③____ List1.AddItem”(”+Str(i)+”)”+Str(a)+ch+Str(b)+”=”End If Next iEnd Sub划线处代码为①___________________________________________________②_______________________________________________________________③________________________________________________________________答案 ①c=Int(Rnd()*4+1) ②b=0 Then ③ch=Mid(s,c,1)8.现有5种奖品分别用“ABCDE”表示,22位顾客分别用“甲乙丙丁戊己庚辛壬癸子丑寅卯辰巳午未申酉戌亥”表示。在文本框Text1中输入中奖名额,单击“抽奖”按钮Command1,将每位中奖顾客姓名及随机抽取的奖品(假设奖品的数量足够多)显示在列表框List1中。程序运行界面如图所示:为实现上述功能,请在划线处填入合适的代码。Private Sub Command1_Click() Dim s1 As String,s2 As String Dim c1 As String,c2 As String Dim i As Integer,n As Integer List1.Clear s1=”甲乙丙丁戊己庚辛壬癸子丑寅卯辰巳午未申酉戌亥” s2=”ABCDE” n=Val(Text1.Text) For i=1 To na=Int(Rnd()*22+1)b=____①____c1=Mid(s1,a,1)____②____List1.AddItem”顾客”+c1+”所中奖品为:”+c2 Next iEnd Sub划线处代码为①____________________________________________________②________________________________________________________________答案 ①Int(Rnd()*5+1) ②c2=Mid(s2,b,1)1.有一数列:1、2、5、4、9、8、13、16…,奇数项是等差数列,偶数项是等比数列,在文本框Text1中输入项数,单击“计算”按钮Command1,分别在列表框List1、List2中显示奇数项和偶数项的值,在文本框Text2中显示所有项之和。程序运行界面如下图所示。程序代码如下,请在空白处补充完整。Private Sub Command1_Click() Dim i As Integer,n As Integer,sum As Long Dim a As Integer,b As Long n=Val(Text1.Text) a=1 b=2 sum=____①____ For i=1 To nIf ____②____Then List1.AddItem Str(a) sum=sum+a ____③____Else List2.AddItem Str(b) sum=sum+b b=b*2End If Next i Text2.Text=Str(sum)End Sub划线处代码为①___________________________________________________②_______________________________________________________________③_______________________________________________________________解析 本题考核的知识点是用For结构循环来控制确定的循环次数。从输出语句来看,变量s是前20项的和,s的初值为2,表示前两项和。根据题目意思,从第3项开始有规律,并且计算到第20项。从第二空向下找,确定与变量s有关,累加求和。答案 ①0 ②i Mod 2=1 ③a=a+42.编写一个“模拟抛硬币”程序,实现如下功能:在文本框Text1中输入抛投次数n,单击“开始”按钮,随机产生n个0或1,分别表示硬币的正面和反面,在列表框List1中显示正、反面的次数。程序运行界面如下图所示。程序代码如下,请在空白处补充完整。Private Sub Cmd1_Click() Dim n As Integer,x1 As Integer,x2 As Integer Dim i As Integer,t As Integer n=Val(Text1.Text) Randomize ′随机函数初始化 x1=0 :x2=0 For i=____①____ ____②____If t=0 Then x1=x1+1Else x2=x2+1End If Loop List1.AddItem ”正面:”+Str(x1)+”次” List1.AddItem ”反面:”+Str(x2)+”次”End Sub划线处代码为①___________________________________________________②_______________________________________________________________解析 循环的次数是确定的。理解变量的含义,n是次数,t是每次产生的正面或反面的值,x1表示正面的次数,x2表示反面的次数。答案 ①1 To n ②t=Int(Rnd()*2)或 t=Int(Rnd()+0.5)3.单击“查找”按钮Command1,在列表框List1中输出第1位数字是2,第5位数字是5,数字长度为5的完全平方数,并在文本框Text1中输出这些数的个数。程序运行的界面如下图所示:程序代码如下,请在空白处补充完整。Private Sub Command1_Click() Dim i As Integer,n As Integer n=0 For i=20000 To 29999If ____①____ And ____②____ Then List1.AddItem ____③____ ____④____End If Next i Text1.Text=Str(n)End Sub划线处代码为①___________________________________________________②________________________________________________________________③________________________________________________________________④________________________________________________________________解析 i表示要查找的5位数,其中循环的范围中,最高位为2,已经满足第1位是2的条件。再找出最后一位是5的完全平方数即可。变量n是找出符合条件的个数。答案 ①i Mod 10=5 ②Sqr(i)=Int(Sqr(i)) ③Str(i) ④n=n+14.某条形码共有13 位数字组成,其中第13位数字表示校验码。校验码的计算方法:先计算前12 位数字中偶数位数字和奇数位数字之和,再把偶数位和乘以3与奇数位和相加,再对相加之和求余数,得到校验码值。在文本框Text1中输入条形码,单击“校验”按钮Command1,在标签Label1中输出结论。程序代码如下所示,请补充完整。 Private Sub Command1_Click() Dim s As String,x As String Dim js As Integer,os As Integer,jy As Integer s=Text1.Text n=Len(s) If n<>13 ThenLabel1.Caption=”条形码位数错误” ElseFor i=____①____ ____②____ If ____③____ Then js=js+x Else os=os+xNext ijy=os*3+jsjy=jy Mod 10If ____④____ Then yz=”验证码正确”Else yz=”验证码错误”End IfLabel1.Caption=yz End IfEnd Sub划线处代码为①___________________________________________________②_______________________________________________________________③_______________________________________________________________④_______________________________________________________________解析 程序设计填空题在解题时,先要理解各个变量的含义。从输入语句来看,s表示输入的条形码,n是条形的长度,对条形的前12位进行计算,因此循环的范围是前12位,x是每一位上的数字,但要注意类型。题目中描述,偶数位和乘以3与奇数位和相加,因此js表示奇数位和,注意是奇数位而不是取出的数字是否为奇数。计算的结果和第13位相比较,再输出结论。答案 ①1 To n-1 ②x=Val(Mid(id,i,1))③i Mod 2=1 ④jy=Val(Mid(s,13,1))5.在文本框Text1中输入一个字符串s,在文本框Text2中输入一个要删除的字符串c1,单击“删除”按钮Command1,在文本框Text3中显示一轮删除后字符串。Private Sub Command1_Click() Dim s As String,ch As String,c1 As String Dim i As Integer,n As Integer,s1 As String,newch As String s=Text1.Text c1=Text2.Text Lc1=len(c1) For i=1 To Len(s)-Lc1+1 ____①____If s1=c1 Then i=i+Lc1-1Else____②____End If Next i Text3.Text=newch End Sub划线处代码为①__________________________________________________②_______________________________________________________________解析 变量的含义:s是输入的字符串,c1是要删除的字符串,newch是删除后的字符串,i表示每次取出与c1长度相同字符串的起始位置,s1表示字符串从第i个位置取出与c1长度相同的字符串。从选择结构来看,如果找到了,下次要找的位置跳到当前位置再加上要删除子串长度的位置。没有找到,把当前位置的字符联接起来作为新的字符串。也可以用表格的形式列出变量的变化情况。iS1Newch1”Tom””T”2”omc””To”3”mca””Tom”4”cat””Tom”7”是一只””Tom是”………………答案 ①s1=Mid(s,i,Lec1) ②newch=newch+Mid(s,i,1)6.小明编写了一个模拟发红包的VB程序:在文本框cash中输入要发放的红包总金额,在文本框number中输入红包个数,单击“计算”按钮send,在列表框list1中输出每个随机分配的红包金额,在文本框Text3中显示最高红包金额。运行界面如图所示。请回答下列问题:(1)代码“Private Sub Send_Click()”中的Send_Click 是________。(填字母:A.属性名/B.对象名/C.事件名/D.事件处理过程名)(2)实现上述功能的程序代码如下,请在划线处填入合适的代码。Private Sub Send_Click() Dim s As Single,Max As Single,x As Single Dim n As Integer,i As Integer ′变量n存放红包个数 Randomize List1.Clear s=Val(cash.Text) n=____①____ Max=0 For i=1 Ton-1x=Int(Rnd()*100*i*s/n)/100If x>Max Then Max=xIf x=0 Then i=i-1ElseList1.AddItem”红包”+Str(i)+”:”+Str(x)____②____End If Next i x=s′计算最后一个红包 If x>Max Then Max=x List1.AddItem”红包”+Str(i)+”:”+Str(x) Text3.Text=Str(Max)End Sub划线处代码为①____________________________________________________②________________________________________________________________(3)红包发放过程中,________(会/不会)产生金额为0的红包解析 Click指鼠标单击的事件,Send_Click指按钮Send的单击事件,因此是事件处理的过程名。n表示在文本框number中输入红包个数,x指每次产生的红包金额,当x=0时,i=i-1重新产生红包,否则金额将减去产生的红包金额。答案 (1)D (2)①Val(number.Text) ②s=s-x (3)不会7.用VB编写求句子中最长单词的程序。输入要求:句子以“.”结束;单词之间用空格分隔,单词没有缩写形式和其它特殊形式。运行界面如图所示,程序功能:在文本框Text1中输入待统计的句子,单击“统计”按钮Command1,将结果显示在文本框Text2和Text3中。(1)结合图的运行界面,当前窗体中共使用了________类对象(填数字),窗体标题文字“统计句子中最长的单词”是From1对象的________属性。(2)根据题意将下列程序补充完整。Private Sub Command1_Click() Dim i As Integer,k As Integer Dim s As String,ch As String Dim max As Integer ′存储句子中最长单词的长度 Dim ss As String ′存储句子中最长的单词 s=Text1.Text i=1:k=0:max=0 ch=”” Do While ch<>”.”Or i<=Len(s)ch=Mid(s,i,1)If ch<>” ”And ch<>”.”Then____①____Elsek=0End IfIf____②____ Thenmax=kss=____③____End Ifi=i+1 Loop Text2.Text=ss Text3.Text=Str(max)End Sub划线处代码为①____________________________________________________②________________________________________________________________③_______________________________________________________________答案 (1)3 Caption (2)①k=k+1 ②k>Max ③Mid(s,i-k+1,k)8.5421BCD码是用4位二进制数表示1位十进制数的代码,从左到右的位权分别是5、4、2、1,即用该二进制代码的第1至第4位分别乘以相应的位权并相加,得到的数为转换后的十进制数。在文本框Text1中输入BCD码,单击“转换”按钮Command1后,在文本框Text2输出相应的十进制数。程序运行界面如图所示:(1)为实现上述功能,请在划线处填入合适的代码。Private Sub Command1_Click() Dim bcd As String,s As String,t As Integer,i As Integer,n As Integer bcd=Text1.Text If Len(bcd)Mod 4<>0 Then Text2.Text=”输入的BCD码不正确”:Exit Subn=0 For i=1 To Len(bcd)ch=Mid(bcd,i,1)____①____If t=1 Thenn=Val(ch)*5ElseIf t=2 Thenn=n+Val(ch)*4ElseIf t=3 Thenn=n+Val(ch)*2Elsen=n+Val(ch)s=s+Str(n)n=____②____End If Next i Text2.Text=____③____End Sub划线处代码为①____________________________________________________②________________________________________________________________③________________________________________________________________(2)若在文本框Text1中输入“00101”,则在文本框Text2中输出的内容是________。答案 (1)①t=i Mod 4 ②0 ③s (2)输入的BCD码不正确9.对英文字母进行加密的规则:用26个互不重复的ASCII字符作为密钥,字母“A”用密钥中第1个字符代替,字母“B”用密钥中第2个字符代替,其他字母用类似方法进行加密。现编写一个验证密钥合法性的程序。在文本框Text1中输入密钥,单击“验证”按钮Command1,在文本框Text2中输出相应的信息。运行界面如下图所示。为实现上述功能,请在划线处填入合适的代码。Private Sub Command1_Click() Dim i As Integer,ch As String,s As String,j As Integer Dim ch1 As String,falg As Boolean s=Text1.Text If____①____Then Text2.Text=”密钥长度不足26个字符!” flag=True For i=1 To 26ch=Mid(s,i,1)For j=1 To i ____②____ If ch=ch1 Then flag=FalseNext j Next i If____③____ ThenText2.Text=”密钥正确!” ElseText2.Text=”密钥中有重复字符!” End IfEnd Sub(1)实现验证功能事件的过程名称是________。(2)划线处代码为①_________________________________________________②________________________________________________________________③________________________________________________________________答案 (1)Command1_Click (2)①Len(s)<26 ②ch1=Mid(s,j,1) ③flag10.两个数的平方和等于另外一个数的平方,把这三个数称为一组勾股数。编写一个VB程序,单击“运行”按钮Command1,在列表框List1中显示100以内的整数勾股数对,在文本框Text1中显示总共的组数。程序运行的界面如下图所示:为实现上述功能,请在划线处填入合适的代码。Private Sub Command1_Click() Dim i As Integer,j As Integer,sum As Long Dim k As Single,n As Integer n=0 For i=1 To 100For j=i To 100sum=____①____k=Sqr(sum) If____②____And k<100 Then n=____③____ List1.AddItem Str(i)+”*”+Str(i)+”+”+Str(j)+”*”+Str(j)+”=”+Str(k)+”*”+Str(k)End If Next j Next i Text1.Text=Str(n)End Sub划线处代码为①___________________________________________________②_______________________________________________________________③_______________________________________________________________答案 ① i*i+j*j ②k=lnt(k) ③n+1课件36张PPT。第9节 循环结构算法实现—For语句1.__________又称为重复结构。当__________的时候,执行循环体的代码,当条件不成立的时候,跳出循环,执行循环结构后面的代码。 For语句 For 循环变量=_____ To _____ Step _____ 语句块 Next __________循环结构条件成立初值步长终值循环变量2.如果在循环过程中要退出循环,For循环用__________语句来实现,也可以用循环变量=终值来实现。3.在循环结构中包含一个_____结构,根据题目的条件逐个进行判断,该算法的基本思想是枚举算法。要点有三个,一是确定枚举的_____,二是筛选解(条件判断),三是统计解的_____或者具体内容。Exit For分支范围个数一、用于循环次数确定的类型 用于固定次数的重复操作时,往往用For循环,此时变量起到计数或表示在某个位置的作用。【例1】 模拟两人掷骰子游戏。由电脑随机产生两个1到6之间的整数,表示甲乙两人所掷的骰子数,根据这两个数字之和,如果是偶数表示甲赢了,奇数表示乙赢了。在文本框Text1中输入总次数n,单击“计算”按钮Command1,在文本框Text2中输出甲赢的次数,在文本框Text3中输出乙赢的次数。在列表框List1中输出游戏过程。程序运行界面如下图所示:程序代码如下所示,请在划线处填入合适的代码。 Private Sub Command1_Click()Dim a As Integer,b As Integer,n As IntegerDim j As Integer,k As Integer,i As IntegerRandomizek=0:j=0n=Val(Text1.Text)For i= ① a=Int(Rnd()*6+1)b=Int(Rnd()*6+1)If ② Then List1.AddItem Str(i)+”甲赢了!” ③ Else List1.AddItem Str(i)+”乙赢了!” ④ End IfText2.Text=Str(k)Text3.Text=Str(j)Next iEnd Sub划线处代码为①______________________________________②__________________________________________________③__________________________________________________④__________________________________________________解析 本题考核的知识点是对于For结构循环及选择结构的理解。程序设计填空题在解题时,先要理解各个变量的含义,变量的含义往往从输入输出语句并结合题中所给图示来理解。从输入输出看变量含义,n表示掷骰子次数,k表示甲赢的次数,j表示乙赢的次数。因此①表示循环的范围,②表示条件成立的条件,两人的点数和为偶数,③和④所填内容和下面没有赋值过的变量有关。答案 ①1 To n ②(a+b)mod 2=0 ③ k=k+1 ④j=j+1[方法总结] 记住解程序题的三条步骤,一是理解变量的含义,先从输入输出语句来看变量的含义;二是理解各个基本结构的作用,特别是某个选择结构和循环结构;三是程序所填内容往往下面没有赋值过的变量有关。【变式训练】 模拟划拳游戏规则如下:随机产生两个[0,5]之间的整数,表示路人甲和路人乙出拳的数字,再产生两个随机数,表示他们报的数。若一方报数为双方出拳数之和,则表示他赢了,积2分;若双方报数均为出拳之和,则表示他们平了,各积1分;若双方均不正确,不计局数。在文本框Text1中输入比试的局数,单击“开始”按钮Command1,在列表框List1中显示路人甲的情况,在列表框List2中显示路人乙的情况,在文本框Text2、Text3中分别显示他们的得分。程序运行界面如下图所示:程序代码如下,请在划线处填写合适的代码。Private Sub Command1_Click() Dim i As Integer,jc As Integer,jb As Integer,jd As Integer Dim yc As Integer,yb As Integer,yd As Integer,n As Integer Randomize:List1.Clear:List2.Clear n=Val(Text1.Text) For i= ① jc=Int(Rnd()*6)yc=Int(Rnd()*6)jb=Int(Rnd()*6)+jcyb=Int(Rnd()*6)+ycIf ② Then List1.AddItem Str(jc)+" "+Str(jb)+" "+"平" List2.AddItem Str(yc)+" "+Str(yb)+" "+"平" jd=jd+1 yd=yd+1ElseIf jb=yc+jc Then List1.AddItem Str(jc)+" "+Str(jb)+" "+"胜" List2.AddItem Str(yc)+" "+Str(yb)+" "+"负" ③ ElseIf yb=yc+jc Then List1.AddItem Str(jc)+" "+Str(jb)+" "+ "负" List2.AddItem Str(yc)+" "+Str(yb)+" "+"胜" ④ Else i=i-1End IfNext iText2.Text=Str(jd)Text3.Text=Str(yd)End Sub划线处代码为①______________________________________②__________________________________________________③__________________________________________________④__________________________________________________解析 本题考核的知识点是对于For结构循环及选择结构的理解。输入输出理解变量含义,n输入的次数,jd路人甲得分,yd路人乙得分。 第1空表示循环的次数,第2空表示他们平局的条件,3、4空所填内容和下面没有赋值的变量有关,显示路人甲、乙赢了,各得2分。答案 ①1 To n ②yb=yc+jc And jb=yc+jc ③jd=jd+2 ④yd=yd+2二、循环范围确定的类型 某个范围内的数进行遍历情况。循环变量代表具体的某个数字,如在求水仙数、玫瑰花数时,循环变量表示从最小的三位数、四位数,到最大的三位数、四位数。【例2】 完全数。如果一个数所有的真因子(即除了自身以外的约数)的和等于它本身,则称该数为“完全数”。 在文本框Text1中输入一个数,单击“判断”按钮Command1,在文本框Text2中输出结论。程序界面如下图所示:程序代码如下,请将空白处填写完整。Private Sub Command1_Click() Dim i As Integer,n As Integer n=Val(Text1.Text) s=0 For i=1 To ① If ② Then s=s+i List1.AddItem Str(i)End If Next i If ③ Then Text2.Text="是的" Else Text2.Text="不是End Sub划线处代码为①_____________________________________②_________________________________________________③_________________________________________________解析 本题考核的知识点是对于For结构循环及选择结构的理解。理解变量含义,n输入的整数,s=s+i,真因子的和;循环的条件是判断除了本身以外的数是否是真因子,终值为n-1。抓住真因子的条件和完全数的条件,是解题的关键。答案 ①n-1 ②n Mod i=0 ③s=n[方法总结] 在上一节中,练习了选择结构的条件,以及各种表达式,在程序填空时,往往要体现这部分内容。因此打好函数表达式及理解选择结构功能对解答本题是有很大帮助。【变式训练】 单击“开始”按钮Command1,在列表框List1中输出这样的有趣的四位数,他能被他的前两位整除,能被中间的两位数整除,还能被最后的两位数整除,在文本框Text1中输出总的个数。程序运行界面如下:程序代码如下,请把空白处填写完整。Private Sub Command1_Click()Dim i As Integer,a As IntegerDim b As Integer,c As Integer,n As Integern=0For i=1000 To 9999a= ① b=(i 10) Mod 100c=i Mod 100If b<>0 And c<>0 Then If ② Then List1.AddItem Str(i) ③ End If End IfNext iText1.Text=Str(n)End Sub划线处代码为①______________________________________②__________________________________________________③__________________________________________________解析 本题考核的知识点是对于For结构循环及选择结构的理解。理解变量含义,n出的个数,b中间两位数,c后面两位数,s=s+i,抓住题目中条件,均可以整除。往下找没有出现的变量,n表示符合条件的个数,数量增加一个。答案 ①i100或Int(i/100) ②i Mod a=0 And i Mod b=0 And i Mod c=0 ③n=n+1三、对于字符串的遍历1.对于文本有查找、删除、替换和插入的操作,查找是各种操作的基础,只有找到这个字符,才可以删除,才可以替换为其他字符,只有找到位置,才可以插入新的字符。2.字符查找最通常的做法是,从字符串的第1个位置开始,取出单个字符或从该位置开始的多个字符,与其他字符进行对比,接着是第2个位置,第3个位置……直到最后一个位置。3.循环变量i含义是字符串的位置。有两个函数是经常用到的,Len函数,决定了循环的次数,Mid函数,从字符串取出1个或多个字符。【例3】 在文本框Text1中输入两个正整数和一个运算符的计算表达式,单击“运算”按钮Command1,在文本框Text2中输出计算结果。程序运行界面如下:程序代码如下,请把空白处填写完整。Private Sub Command1_Click() Dim y As Integer,i As Integer,t As Integer Dim s As String,ch As String,ysf As String s=Text1.Text For i=1 To Len(s)ch=Mid(s,i,1)If ch>="0" And ch<="9" Then ① Elseysf=chy=t t= ② End If Next i If ysf="+" Theny=y+tElseIf ysf="-" Theny=y-t ElseIf ysf="*" Theny=y*t ElseIf ysf=”/” ThenIf t=0 Then Text2.Text=”” Else y=y/t End If If t<>0 Then Text2.Text=Str(y)End Sub划线处代码为①____________________________________②_________________________________________________解析 本题考核的知识点是用循环结构处理字符的方法。本题最大难度是从文本中分离出一个多位整数的方法。从输入输出看,s是输入的表达式,y是输出的结果。If ch>=”0” And ch<=”9” Then语句,多次取出字符,如果取出连续的0-9之间数字,说明这个整数还没有结束,反之,表示整数已经结束,取出的是操作符。①处所填内容跟t有关,理由是从①片下找,发现变量t没有被赋值过。从语句y=y+t来推断,t是就是字符串中第1个整数。用表格表示程序在运行过程中的值。从表是可以看出随着ch的变化,变量t的变化规律:2→25→250→0→4。如果取出的字符不是0~9之间的数字,则表示当前是运算符,该整数结束了,变量t将存储下一个整数的值,因此要初始化为0。这是从算术运算上来获取整个整数部分,也可以从字符连接来获得整数部分。观察上表,随着ch的变化,变量t的变化规律:“2”→“25”→“250”→ “”→“4”。把每次的ch连接起来,当读取的字符不是数字时,表示该整数已经结束,把取得的字符串转换成数字,同时把s1清空,以便存储下一个整数的值。部分代码如下所示:s1=""For i=1 To Len(s)ch=Mid(s,i,1)If ch>="0" And ch<="9" Then s1=s1+chElse ysf=ch y=Val(s1) s1=""End IfNext it=Val(s1)答案 ①t=t*10+Val(ch) ②0[方法总结] 在字符串中不全是数字时,要掌握把其中部分数字字符转换为一个整数的方法和技巧。在程序运行过程中,先从输入输出来理解变量的含义,从选择结构来看实现的功能,可以借助表格来推断各个变量的关系。【变式训练】 在文本框Text1中输入一段只包含大小字母的英语短文,且每个单词以一个空格或一个标点分隔,点击“统计”按钮Command1,在文本框Text2中输出单词的数量,在文本框Text3中输出单词的最大长度。 程序代码如下,请将程序空白处填写完整。Private Sub Command1_Click() Dim s As String,ch As String,i As Integer Dim t As Integer,max As Integer,n As Integer s=Text1.Text For i=1 To Len(s)ch=Mid(s,i,1)If ① Then t=t+1Else ② If maxEnd If Next i Text2.Text=Str(n) Text3.Text=Str(max) End Sub划线处代码为①______________________________________②__________________________________________________答案 ①Asc(ch)>64 And Asc(ch)<91 Or Asc(ch)>96 And Asc(ch)<123或ch>=”a” And ch<=”z” or ch>=”A” And ch<=”Z” ②n=n+1 展开更多...... 收起↑ 资源列表 第二章 第9节.doc 第二章 第9节.ppt