'1.
'本段共有20句,为方便分析给每句加上了编号。下面列出各句的主要作用:
1 Private Sub Command1_Click() '当按钮command按下时发生下列过程。
2 Dim a(-1 To 5) As Boolean '声明一个布尔型数组a(),共6个元素,下标从-1至5。
3 Dim flag As Boolean '声明一个布尔型变量flag
4 flag = False '将flag的值设定为false
5 Dim i As Integer '声明一个整数型变量I
6 Dim j As Integer '声明一个整数型变量J
7 Do Until flag = True '执行循环直到flag的值为true
8 For i = -1 To 5 '设定一个内循环,循环变量为i,循环取值从-1至5,执行全部循环时共6次。
9 j = j + 1 'j的值加止1
10 If a(i) = False Then '选择如果a(i)=false时执行以下语句。
11 a(i) = True '将a(i)的值设定为true
12 Exit For '退出从for开始至end for之间的内循环。
13 End If '选择结束。
14 If i = 5 Then '又一个选择语句。
15 flag = True '让flag的值为true
16 End If '选择结束。
17 Next '执行下一个i,返回for语句(8)。
18 Loop '返回do语句(7)。
19 Print j '打印j的值。
20 End Sub '本过程结束。
运行过程:
1、第2、3、4、5、6句就不说了,除了声明语句就是赋值语句。从第7句分析:
2、执行第7句,进入外循环(第18句Loop 是这个循环的结束。第一次进入循环执行第7句时,先判断flag是否等于True,若成立则退出循环。因为第4句赋值flag = False,所以不成立,故第一次进入循环体。执行语句8.
3、执行第8句,又进入另一个循环,不妨叫它内循环,开始进入时,i取得初值-1,进入内循环体。执行语句9.
4、执行第9句,因自从第5句声明了j变量之后并没有对它赋值,所以,j的值应为系统默认的0,故j=j+1=0+1=1.
5、执行第10句,这时i=-1,就是判断a(-1)的值,同样因为没有对a()赋值,所以各个a()元素的值都是系统默认的值——false。a(-1)=false是成立的,则执行下一条语句(11)。
6、执行第11句 a(i) = True,执行完后a(-1)=True.往下执行。
7、执行第12句,退出内循环,去执行next后面的语句(18)。
8、执行第18句,返回do语句(7)。
9、执行第7句,仍判断flag,因为flage仍=false,所以第二次进入外循环体,执行8.
10、执行第8句,i再取得初值-1,进入内循环体。执行语句9.
11、执行第9句, 这时j = j + 1 = 1 + 1 = 2。
12、执行第10句,因a(i)=a(-1)=true,条件不成立,所以执行endif之后的第14句。
13、执行第14句,因i=-1不等于5 ,则执行endif之后的第17句。
14、执行第17句next,将i=i+1=-1+1=0,返回for语句(8)。
15、执行第8句,判断i=0小于终值5,往下执行(语句9).
16、执行第9句, 这时j = j + 1 = 2 + 1 = 3。
17、执行第10句,因a(i)=a(0)=false,条件成立,往下执行第11句。
18、执行第11句 a(i) = True,执行完后a(0)=True.往下执行。
19、执行第12句,退出内循环,去执行next后面的语句(18)。
20、执行第18句,返回do语句(7)。
21、执行第7句,仍判断flag,因为flage仍=false,所以第三次进入外循环体,执行8.
22、执行第8句,i再取得初值-1,进入内循环体。执行语句9.
23、执行第9句, 这时j = j + 1 = 3 + 1 = 4。
24、执行第10句,因a(i)=a(-1)=true,条件不成立,所以执行endif之后的第14句。
25、执行第14句,因i=-1不等于5 ,则执行endif之后的第17句。
26、执行第17句next,将i=i+1=-1+1=0,返回for语句(8)。
27、执行第8句,判断i=0小于终值5,往下执行(语句9).
28、执行第9句, 这时j = j + 1 = 4 + 1 = 5。
29、执行第10句,因a(i)=a(0)=true,条件不成立,所以执行endif之后的第14句。
30、执行第14句,因i=0不等于5 ,则执行endif之后的第17句。
31、执行第17句next,将i=i+1=0+1=1,返回for语句(8)。
32、执行第8句,判断i=1小于终值5,往下执行(语句9).
28、执行第9句, 这时j = j + 1 = 5 + 1 = 6。
29、执行第10句,因a(i)=a(1)=false,条件成立,往下执行第11句。
30、执行第11句 a(i) = True,执行完后a(1)=True.往下执行。
31、执行第12句,退出内循环,去执行next后面的语句(18)。
32、执行第18句,返回do语句(7)。
哈,以此类推,最后j=35完成程序。
第二题至三题。。。。。说起来真是太复杂。
要起听
首先建议你用好f8,可以进行逐步跟踪
1、
定义什么的我就不说了。这是一个嵌套循环,j是用来统计“for”循环运行的次数的。
然后你要知道开始的时候,数组a()所有的元素都是false。至于算法分析么,建议你还是点着f8自己跟踪一下,会理解得比较透。这里可以告诉你,结果为1+2+3+...+(n-1)+n +n
n在这里是7,因为“For i = -1 To 5”中,-1到5有7个数
Do Until flag = True
For i = -1 To 5
j = j + 1
If a(i) = False Then
a(i) = True
Exit For
End If
If i = 5 Then
flag = True
End If
Next
Loop
2、选择法是指找出一个最大的数,放在数组开头;然后在剩余的元素里找出最大的数,放在第2位...
冒泡法是指比较数组各相邻的两个数,然后对这两个数排序。这样,经过多次的两个数的排序后,整个数组的序就排好了。
输入10个整数的部分我就不写了,假设数放在num()里面
选择法
dim t ,max
for i=1 to 10
max=i
for j=i to 10
if num(max)
'交换
t=num(i)
num(i)=num(max)
num(max)=t
next i
冒泡:
dim t
for i=1 to 9
for j=9 to i step -1'从底往上(冒泡)
if num(j)
num(j)=num(j+1)
num(j+1)=t
end if
next j
next i
3、
Randomize 就是初始化随机数生成器的意思。这样能使rnd函数产生不同的序列。否则你每次打开程序,第一次调用rnd函数的时候,都出现同一个数字。
程序里面确实有几个循环,但是没有嵌套。看来你上课不认真喔。按照规范的格式写的话,嵌套循环一眼就能看出来了
给你讲下个循环的意义:
'产生10个10--99范围的随机数
For i = 1 To 10
a(i) = Int(Rnd * 90) + 10
Next i
'把随机数显示在屏幕上。
Print "产生的随机数是"
For i = 1 To 10
Print a(i)
Next i
Print
'通过依次对每个数进行比较,找出最大、最小的数。第一句是假设最大的数和最小的数都是a(1)
min = a(1): max = a(1)
For i = 2 To 10
If a(i) > max Then max = a(i)
If a(i) < min Then min = a(i)
Next i
我先看看代码,过会给你解释。 你代码格式比较乱,应该注意一点。
第一个程序运行相当于是计算了:1+2+3+4+5+6+7+7=35
首先,申明了一个数组。a(-1)到a(5)共七个布尔变量,因为没有赋初值,全部为0,即false.
Private Sub Command1_Click()
Dim a(-1 To 5) As Boolean '声明一个大小为7的数组
Dim flag As Boolean 'flag为布尔值
flag = False '预设为false
Dim i As Integer
Dim j As Integer
Do Until flag = True '循环直到flag的值为true
For i = -1 To 5
j = j + 1
If a(i) = False Then '初始a(-1)为false,所以循环一次后退出,j的值为1 第二次循环的时候,要知道a(0)为false,
所以要循环两次,j的值为3 ,a(1)循环3次,a(2)4次,后面依次类推
a(i) = True
Exit For
End If
If i = 5 Then
flag = True
End If
Next
Loop
Print j
End Sub
我们来根据程序运行流程分析。 首先flag初始为false,循环开始。for i=-1 to 5这里是一个for循环,从i=-1开始,执行j=j+1,
那么j的值从0变成了1.而a(-1)因为没有赋初值,为false.所以要执行a(i)=true,由exit for会跳出循环,本次循环结束。后面的
if i=5因为条件不成立,不执行。跳出循环后因为flag还是为flase,就继续执行do until循环。此时a(-1)的值已经变成了true.相
应地,for循环就会执行2次,j的值变成1+2.类推后面执行do until循环,j的值会变成1+2+3+4+5+6+7.那么为什么后面还要加一个7
呢? 分析一下当a(4)为true了,此时执行循环,从a(-1)到a(5)会执行7次,然而,这个时候因为a(5)为false,会执行exit for语
句,循环被跳出了。do until循环继续执行。此时a(5)的值已经变成了true.
If a(i) = False Then
a(i) = True
Exit For
End If
这里的循环是可以一直执行下去的,不会因为exit for退出循环。
最后i的值变成了5,flag变为ture,do until循环到此结束。
所以,最后的结果是1+2+3+4+5+6+7+7.最后的一次比较关键,你如果理解错误,可能会得到错误的结果28.
我这样说你要是再不理解我就真要吐血了
打了一遍很长的解释百fd度居然没更新上,撞墙ING。。。
第一题:
35得来原因:1+2+3+4+5+6+7+7=35
说明一点:布尔型变量如果不赋初始值那么默认为false 。这个题目的大体意思就是用循环把数组a()中所有的成员的值都改成true,用j记录循环的次数
LZ聪明,前几个循环肯定不用解释了至于最后一个7是怎么来的,主要是因为把所有数组成员都改成TRUE之后FLAG的值仍然是FALSE,所以还要进行一次DO循环,进行到i=5的这次循环的时候才赋值了flag=false,跳出了do循环,这时候最后一次循环进行了7次
下面是代码解释:
Private Sub Command1_Click()
Dim a(-1 To 5) As Boolean '定义a()数组,类型为布尔型
Dim flag As Boolean '设置一个标志
flag = False '此标志初始设定为false
Dim i As Integer '定义变量
Dim j As Integer
Do Until flag = True '直到标志变成true为止做循环
For i = -1 To 5 '从-1到5做循环
j = j + 1 '计数器,用来记录循环的次数
If a(i) = False Then '判断数组a()中有没有哪个成员的值是false
a(i) = True '如果有则把该成员的值改为true
Exit For '并且退出for循环
End If
If i = 5 Then '如果i=5,即前面所有代码中没有运行到Exit For这句,for循环已经循环到了最后一圈
flag = True '把标志设定为true
End If
Next '对应for
Loop '对应do until
Print j '在form上打印出来j的值
End Sub
第二题
我有代码但是这里打不下了,发不出来,你参考这两个帖子
http://zhidao.baidu.com/question/91188219.html
http://zhidao.baidu.com/question/91273200.html
第三题
Randomize是初始化随机函数rnd,使用Randomize可以防止rnd产生重复的值
没太多时间解释 你按F8 来看代码是如何执行的 自己来理解~