第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 Integer
Dim j As Integer,k As Integer,i As Integer
Randomize
k=0:j=0
n=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 If
Text2.Text=Str(k)
Text3.Text=Str(j)
Next i
End 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)+jc
yb=Int(Rnd()*6)+yc
If ____②____Then
List1.AddItem Str(jc)+” ”+Str(jb)+” ”+”平”
List2.AddItem Str(yc)+” ”+Str(yb)+” ”+”平”
jd=jd+1
yd=yd+1
ElseIf 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-1
End If
Next i
Text2.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 Integer
Dim b As Integer,c As Integer,n As Integer
n=0
For i=1000 To 9999
a=____①____
b=(i '10) Mod 100
c=i Mod 100
If b<>0 And c<>0 Then
If ____②____Then
List1.AddItem Str(i)
____③____
End If
End If
Next i
Text1.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
____①____
Else
ysf=ch
y=t
t=____②____
End If
Next i
If ysf=”+” Then
y=y+t
ElseIf ysf=”-” Then
y=y-t
ElseIf ysf=”*” Then
y=y*t
ElseIf ysf=”/” Then
If 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个整数。用表格表示程序在运行过程中的值。
i
ch
t
S1另一种方法中变量
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+ch
Else
ysf=ch
y=Val(s1)
s1=””
End If
Next i
t=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+1
Else
____②____
If max t=0
End 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
1.模拟石头剪刀布游戏。规则如下:随机产生两个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 Then
jm=”石头”
ElseIf jc=2 Then
jm=”剪刀”
Else
jm=”布”
End If
yc=Int(Rnd()*3)+1
If yc=1 Then
ym=”石头”
ElseIf yc=2 Then
ym=”剪刀”
Else
ym=”布”
End If
If 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+” ”+”路人乙赢”
Else
jd=jd+1
yd=yd+1
List1.AddItem jm+” ”+ym+” ”+”平了”
End If
Next i
Text2.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+2
2.公元1900年是鼠年,以后每12年一个轮回,在文本框Text1中输入一个年份,单击“开始”按钮Command1,在列表框List1中输出该年及该年以后共12个年份的属相。程序运行的界面如图所示:
程序代码如下,请把空白处填空完整。
Private Sub Command1_Click()
Dim y As Integer,t As Integer,sx As String
sx=”鼠牛虎兔龙蛇马羊猴鸡狗猪”
y=Val(Text1.Text)
For i=____①____
t=____②____
List1.AddItem Str(i)+”年的属相是”+____③____
Next i
End 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.8
List1.AddItem ____②____+” ”+____③____
Next i
End 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-1
ch=Mid(s,i,1)
If ch=”1” Or ch=”0” Then
____①____
j=j+1
Else
____②____
Exit For
End If
Next i
If flag=True Then
Text2.Text=Str(t)
Else
Text2.Text=”非法的二进制数!”
End If
End Sub
划线处代码为①___________________________________________________
②_______________________________________________________________
解析 理解变量的含义。S输入的二进制数,t是转换后的十进制数,ch是从低位向高位分解的字符,j从0、1、2、3……的变化规律,flag是否是二进制数的标志。
答案 ①t=t+Val(ch)*2^j ②flag=False
5.判断是否是回文。一个字符串,从左到右读和从右到左读是完全一样的。在文本框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 For
End 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的关系。
i
j
1
Len(s)
2
Len(s)-1
3
Len(s)-2
……
……
发现i与j的和是一个定值Len(s)+1,即i+j=Len(s)+1,那么j=Len(s)-i+1
答案 ①j=Len(s)-i+1 ②flag=True
6.在文本框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 n
a=Int(Rnd()*100)
b=Int(Rnd()*100)
____①____
If c=2 And ai=i-1
ElseIf c=4 And____②____
i=i-1
Else
____③____
List1.AddItem”(”+Str(i)+”)”+Str(a)+ch+Str(b)+”=”
End If
Next i
End 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 n
a=Int(Rnd()*22+1)
b=____①____
c1=Mid(s1,a,1)
____②____
List1.AddItem”顾客”+c1+”所中奖品为:”+c2
Next i
End 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 n
If ____②____Then
List1.AddItem Str(a)
sum=sum+a
____③____
Else
List2.AddItem Str(b)
sum=sum+b
b=b*2
End If
Next i
Text2.Text=Str(sum)
End Sub
划线处代码为①___________________________________________________
②_______________________________________________________________
③_______________________________________________________________
解析 本题考核的知识点是用For结构循环来控制确定的循环次数。从输出语句来看,变量s是前20项的和,s的初值为2,表示前两项和。根据题目意思,从第3项开始有规律,并且计算到第20项。从第二空向下找,确定与变量s有关,累加求和。
答案 ①0 ②i Mod 2=1 ③a=a+4
2.编写一个“模拟抛硬币”程序,实现如下功能:在文本框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+1
Else
x2=x2+1
End 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 29999
If ____①____ 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+1
4.某条形码共有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 Then
Label1.Caption=”条形码位数错误”
Else
For i=____①____
____②____
If ____③____ Then js=js+x Else os=os+x
Next i
jy=os*3+js
jy=jy Mod 10
If ____④____ Then
yz=”验证码正确”
Else
yz=”验证码错误”
End If
Label1.Caption=yz
End If
End 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-1
Else
____②____
End If
Next i
Text3.Text=newch
End Sub
划线处代码为①__________________________________________________
②_______________________________________________________________
解析 变量的含义:s是输入的字符串,c1是要删除的字符串,newch是删除后的字符串,i表示每次取出与c1长度相同字符串的起始位置,s1表示字符串从第i个位置取出与c1长度相同的字符串。从选择结构来看,如果找到了,下次要找的位置跳到当前位置再加上要删除子串长度的位置。没有找到,把当前位置的字符联接起来作为新的字符串。也可以用表格的形式列出变量的变化情况。
i
S1
Newch
1
”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-1
x=Int(Rnd()*100*i*s/n)/100
If x>Max Then Max=x
If x=0 Then
i=i-1
Else
List1.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
____①____
Else
k=0
End If
If____②____ Then
max=k
ss=____③____
End If
i=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 Sub
n=0
For i=1 To Len(bcd)
ch=Mid(bcd,i,1)
____①____
If t=1 Then
n=Val(ch)*5
ElseIf t=2 Then
n=n+Val(ch)*4
ElseIf t=3 Then
n=n+Val(ch)*2
Else
n=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 26
ch=Mid(s,i,1)
For j=1 To i
____②____
If ch=ch1 Then flag=False
Next j
Next i
If____③____ Then
Text2.Text=”密钥正确!”
Else
Text2.Text=”密钥中有重复字符!”
End If
End Sub
(1)实现验证功能事件的过程名称是________。
(2)划线处代码为①_________________________________________________
②________________________________________________________________
③________________________________________________________________
答案 (1)Command1_Click (2)①Len(s)<26 ②ch1=Mid(s,j,1) ③flag
10.两个数的平方和等于另外一个数的平方,把这三个数称为一组勾股数。编写一个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 100
For j=i To 100
sum=____①____
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 Integer
Dim j As Integer,k As Integer,i As Integer
Randomize
k=0:j=0
n=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 If
Text2.Text=Str(k)
Text3.Text=Str(j)
Next i
End 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)+jc
yb=Int(Rnd()*6)+yc
If ② 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-1
End If
Next i
Text2.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 Integer
Dim b As Integer,c As Integer,n As Integer
n=0
For i=1000 To 9999
a= ①
b=(i 10) Mod 100
c=i Mod 100
If b<>0 And c<>0 Then
If ② Then List1.AddItem Str(i)
③
End If
End If
Next i
Text1.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
①
Else
ysf=ch
y=t
t= ②
End If
Next i
If ysf="+" Then
y=y+tElseIf ysf="-" Then
y=y-t
ElseIf ysf="*" Then
y=y*t
ElseIf ysf=”/” Then
If 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+ch
Else ysf=ch
y=Val(s1)
s1=""
End If
Next i
t=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+1
Else
②
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