vbs基础教程(4)循环

介绍

大家好,今天我们学第4章:循环结构
小伙伴们可能会想:上节课说好的彩蛋呢?先别急嘛,我们学完循环再揭晓。

在这里插入图片描述
我们先来看一道题:班里要进行总分统计,要求累加出一个班60人的总分数(分数由用户输入),请问你该怎么设计这个程序?
下面是原程序:

dim a
a=0

a=a+int(inputbox("请输入一个同学的分数"))
a=a+int(inputbox("请输入一个同学的分数"))
a=a+int(inputbox("请输入一个同学的分数"))
a=a+int(inputbox("请输入一个同学的分数"))
a=a+int(inputbox("请输入一个同学的分数"))
...
a=a+int(inputbox("请输入一个同学的分数"))'第60

这什么时候才能打完呀?
在这里插入图片描述
这时候,循环大人就闪亮登场了。首先我们来讲第一个循环结构: do…loop语句。

do…loop

do…loop的结构看上去非常简单, 就是:do…loop, 仅此而已, __这个结构不断执行do和loop之间的语句{死循环}(学名叫:循环体), 永不停止. __举个例子来说:

do 
msgbox "这个信息会不断重复出现, 要停止程序请使用任务管理器(Ctrl+Alt+Del)中止wscript.exe进程" 
loop

是不是有一丝熟悉?(第一节课我们做恶搞程序就用的这个)不过,除了恶搞别人,谁会干这种事呢?更别提做程序了。
所以在do…loop结构中还有一个语句:exit do, 这个语句会终止循环,做下面的语句,下面我来举个栗子:

 dim a
   const pass="123456" '这是一个字符串 请用""包裹起来. 设定密码为常量, 不可变更
   '自定义常量我们在第二节课讲过
     do 
     a=inputbox("请输入密码") 
     if a=pass then 
       msgbox "密码验证成功" 
      exit do 
      end if 
      loop 

嗯…我用大白话说说意思:

定义一个变量
定义一个字符串为常量
进入循环
要求用户输入密码储存在a这个变量里
如果a等于前面自定义的字符串常量:
那么输出:密码验证成功
退出循环
退出if语句
不满足if语句的条件继续循环,直到满足为止

大家都清楚这个程序的功能吧!它会一直不停的问你密码, 直到你输入了正确的密码为止。我们知道用循环,别人难道就不能用循环来破解密码吗?这种无限次认证程序很容易被穷举破解, 我们要来限定认证的次数. 修改程序如下

dim a,ctr 
ctr=0 '设置变量统计输入次数
const pass="tycxt478f__y7h" '上面的那个是弱密码, 这次改的强一点 
do 
a=inputbox("请输入密码") 
    if a=pass then 
        msgbox "认证成功" 
        exit do 
  else 
  if ctr=3 then 
  msgbox "已经达到认证上限, 认证程序关闭" 
  exit do 
   else 
  ctr=ctr+1 '注意:这一句是赋值句,要从右往左读,即每出错一次就把ctr加上1,然后再放回ctr里面,使得这个常量加1 
  msgbox "认证出错, 请检查密码" 
  end if 
  end if 
 loop 

运行这个程序试试看, 当你出了3次错误以后, 就会停止再次询问密码, 关闭程序。要注意的是嵌套的if语句, 请仔细读一下这个程序, 可能比较难懂, 也请你试着自己设计一下类似的程序.

while

我们再来看另一种循环结构: while语句。__while可以放在do或者是loop后面, 然后再接一个表达式, 当表达式的值为true的时候(表达式成立),才运行循环体。__我们来看一看用while编写同样的程序。

 dim a,ctr 
  ctr=0 
  const pass="yu76tfy7bvr66__" 
  do while ctr<3 
  a=inputbox("请输入密码") 
  if a=pass then 
  msgbox "认证成功" 
  msgbox "(你可以在这里加一段成功后得到的信息)" 
  exit do 
  else 
  ctr=ctr+1 '如果密码出错就增加一次错误认证计数 
  msgbox "认证出错, 请检查密码" 
  end if 
  loop 

或者:

扫描二维码关注公众号,回复: 12124219 查看本文章
 dim a,ctr 
  ctr=0 
  const pass="yu76tfy7bvr66__" 
  do 
  a=inputbox("请输入密码") 
  if a=pass then 
  msgbox "认证成功" 
  msgbox "(你可以在这里加一段成功后得到的信息)" 
  exit do 
  else 
  ctr=ctr+1 '如果密码出错就增加一次错误认证计数 
  msgbox "认证出错, 请检查密码" 
  end if 
  loop while ctr<3 

请自己动手运行这两个程序,看看有什么不同。

答案: 功能是一样的, 为什么要放在loop后面呢? 你把ctr的值改成3就知道了, while在do后面的程序会直接退出, 而在loop后面还会允许一次认证, 到了loop才结束.和while相反的是until, 用法和while一样, 不过他只有当后面的表达式的值为false(表达式不成立)的时候才执行循环体

for… next

还有一种循环: for…next.这种循环结构是基于计数的, 也是在编程中最常见到的循环结构,下面举个栗子
在这里插入图片描述

dim i 
  for i=0 to 5 
  msgbox i 
  next 
  '定义一个i变量
  i从一循环到五
  输出每一次循环的结果
  结束

结果为:0~5
这个程序也可以写成:

dim i 
  i=0 
  do while i<5 
  msgbox i 
  i=i+1 '因为do不能自动计数, 必须手动加 
  loop 

除了单个循环,还有__嵌套循环__。

dim i,j 
  for i=1 to 9 
      for j=1 to 9 
      str=str & i * j & " " '&是和并字符串的符号 
  next '每个next对应一个for 
  next 
  msgbox str 

这里面有一个大的for,一个小的for,小的for执行九次,大的for执行1次,一共执行9*9=81次,把81个数打印了出来.

要点

(1) do…loop和exit do的用法
  (2) while当表达式true的时候执行循环体
  (3) for…next是计数循环, 每次执行计数器递加
  (4) 嵌套循环的作用和写法
  (5) &用于连接字符串

作业

在我国的数学经典著作"九章算术"中有这样一道题:百钱买百鸡, 公鸡5钱一只, 母鸡3钱一只, 小鸡1钱3只)求得是能有多少种办法买这些鸡. (建议用for… next)

猜你喜欢

转载自blog.csdn.net/CSDN_C2/article/details/105933573
今日推荐