|
注释语句:'和rem后的语句为注释,vb不会处理这些语句
条件:
if 条件 then
语句
elseif 条件 then
语句
else
语句
end if
其中elseif 和 else为可选,也就是说if语句还可以有一下格式:
if 条件 then 语句
if 条件 then
语句
end if
if 条件 then
语句
else
语句
end if
if语句很好理解,如果条件成立,执行then后面的语句,如果不成立,执行else后面的语句,elseif只是把条件不成立之后又进行了一次判断,道理是一样的
select case 语句
select case 表达式
case 条件1
语句1
case 条件2
语句3
……
case else
语句
end select
如过明白了if语句那么可以这样理解selectcase语句
if 表达式=条件1 then
语句1
elseif 表达式=条件2 then
语句2
……
else
语句
end if
case后面的表达式可以有很多,用,分开
比如
select case NUm
case 2,4,6,8
print "偶数"
case 1,3,5,7,9
print "奇数"
end select
循环:
for 计数器=初值 to 终值 step 步长
语句
next
比如计算1加到100
dim i as long
dim sum as long
for i=1 to 100
sum=sum+i
next
i为计数器,sum结果为5050
do ...loop
还比如1加到100
dim i as long
dim sum as long
i=1
do while i<=100
sum=sum+i
i=i+1
loop
意思是while后面的表达式成立则执行循环,循环由do和loop包围起来,由于do...loop语句没有计数器,所以我们要自己让i每循环一次加1,while可以写在do后面,也可以写在loop后面
不同就是做判断的时间不同,写在loop后面那么执行一遍循环中的语句再检查是否表达式成立,do后面就先检查,while的地方可以写until,作用和while相反:while表示表达式成立则执行循环,until表示表达式 不 成立则执行循环。
exit语句
可以exit for,exit do,表示不管三七二十一退出循环,执行后面的东东
下面看第一篇里的程序:
For i = 3 To 10000 Step 2
CurNum = i
For j = 1 To ArrCount
If Arr(j) > Sqr(CurNum) Then Exit For
If CurNum Mod Arr(j) = 0 Then
Zhishu = False
Exit For
End If
Next
If Zhishu Then
ArrCount = ArrCount + 1
ReDim Preserve Arr(1 To ArrCount)
Arr(ArrCount) = CurNum
OutArr = OutArr + Str(CurNum) + vbCrLf
Else
Zhishu = True
End If
Next
先看最外层,是一个for循环计数器从3开始,每次加2,直到10000,为什么每次加2?因为除了2以外所有的质数都是奇数,好了,最外面的循环把3到10000的奇数挨个过一遍,我们要对这些奇数进行检验,看是不是质数,方法是让这个奇数除以所有小于这个奇数算术平方根的质数,如果都不能整除,那么这个奇数就是质数了,CurNum = i,CurNum是我们当前处理的奇数
下面又有一个循环,计数器j从1开始到ArrCount每次加1,ArrCount是数组Arr()的元素个数,也就是我们已经找到的质数的个数
If Arr(j) > Sqr(CurNum) Then Exit For
Sqr(CurNum)是求CurNum的算术平方根,Sqr是一个函数,这个以后说
所以这个if语句就是说如果Arr(j)找到的质数的第j个如果大于CurNum的算术平方根了,那么退出循环,执行后面(也就是next后面的语句)
If CurNum Mod Arr(j) = 0 Then
Zhishu = False
Exit For
End If
Mod嘛,两数相除取余数,9 Mod 2=1,10 mod 3=1
如果一个数mod另一个数等于0那就是整除了,我们这里让CurNum除找到的质数的第j个(j一次加1,就是一次除已经找到的质数)整除 了的话那这个curnum就不是质数,让Zhishu=false,然后退出循环
If Zhishu Then
ArrCount = ArrCount + 1
ReDim Preserve Arr(1 To ArrCount)
Arr(ArrCount) = CurNum
OutArr = OutArr + Str(CurNum) + vbCrLf
Else
Zhishu = True
End If
这里判断Zhishu的值,如果为true,执行then后面的语句,为false,执行else后面的语句,
如果为true,我们又发现了一个质数,ArrCount加1,数组重新分配内存,多一个元素的地方,同时保护已有数据,然后把新找到的质数加到数组里,
OutArr = OutArr + Str(CurNum) + vbCrLf表示在outarr字符串后面连上新的质数,外加一个换行符
Str()用于把数值转换为字符串,函数后面说
如果为false,这个数不是质数,把zhishu标记置为true
可能有点乱,zhishu这个标记默认为true,在最外层的循环之前就执行了Zhishu = True,然后我们一直除阿除阿除阿,整除了,不是质数,zhishu=false,执行后面的判断,除到所有比curnum的算术平方根小的质数都除过了,还没整除,是质数,zhishu标记不用动,退出循环,执行判断 |
|