找回密码

碧海潮声大学生网

查看: 1121|回复: 0
打印 上一主题 下一主题

从零开始学VB 献给想学习VB的朋友们 第三篇 语句

[复制链接]
跳转到指定楼层
1#
发表于 2006-9-4 19:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
注释语句:'和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标记不用动,退出循环,执行判断
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 顶 踩
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋| 碧海潮声大学生网  

Copyright © 2001-2013 Comsenz Inc.   All Rights Reserved.

Powered by Discuz! X3.2( 浙ICP备11026473号 )

快速回复 返回顶部 返回列表