今天我们来了解语言本身的最后一个论题:数组.  
  要理解"数组", 这个概念我觉得另一种翻译对学习来说更加容易:"阵列", 没错, 数组就是一个阵列, 一个数据的阵列. 最简单的例子是数据库系统, 假设你要储存20名学生的英语成绩, 如果不是用数组, 你则要创建20个不同的变量, 累死. 数组就是类型相同(重要!)的一组数据(或者n组), 用来储存相关的量, 最简单的数组是一维数组, 我们就先来学习它吧.  
  什么是一维数组呢? 在3维以下,你可以利用几何知识来理解"维"的概念,一维相当于一条线, 二维则是一个矩形, 三维是一个长方体. 我知道这么讲是很抽象的, 我们先举个一维数组的例子就比较容易了解了.

dim a(9) '从零开始  
for i=0 to 9  
    a(i)=i '填充每一个数组元素  
    msgbox(a(i)) '输出数组元素  
next

  我们可以看到, 定义一个数组的方法和定义一个变量没有什么不同, 同样是使用dim语句. 定义一维数组的方法如下:  
dim 数组名(元素数量), 这里大家要注意一点, 这里定义的元素数量总是比你要的要少一个, 因为一个数组的起点是0号数据而不是1, 所以大家一定要小心: 你需要10个数据, 就定义"9", 需要100个就定义99, 依此类推. 数组的元素可以看成一个个独立的变量, 你可以像独立的变量那样使用他们. 数组元素的量可能是毫无关系的, 比如第一个数组元素储存你的年龄, 第二个储存今年西瓜的销售量, 但这种做法是不鼓励的, 甚至是不被接受的, 不要这么干, 这样的情况请定义独立的变量. for语句在数组中可算是大显身手, 还记得for吗? 它累加一个变量, 我们可以把这个变量应用在数组中正好用来读取或者填充按照顺序排列的数组元素, 上面就是这样一个例子. 数组其实是很简单的东西(再BASIC语言里面), 数组难的是怎么捣弄这些循环, 让他们按照你的要求运转. 这个等到二维数组再说, 我们先看看如何手工填充数组.  
  如果你这个都想不到的话, 那你真是白学了:

dim name(7),str '一共八个学生, str变量是用来把他们储存成一个字符串以便输出  
for i=0 to 7  
    name(i)=inputbox("请输入第" & i+1 & "个学生的名字")  
    str=str & " " & name(i)  
next  
msgbox(str)

  这样我们就有了一个小小的数据库, 它们的数据排列可以看成这样:  
  name(0),name(1),name(2).....name(7)

  看到了吧, 所以我说我们可以把它看成是"一条线", 等到我们学到了文件操作, 就可以把他们输出到文件中去了. 一维数组有很多用处, 我们来看一下一个复杂的例子. 我们要储存3各学生的名字, 身高, 成绩这三种数据, 由于名字是字符串, 而身高可能是浮点数(带小数点的数), 成绩则可能是整数, 所以我们不能把他们储存在一个数组里面(不要忘记, 数组织只能存储同类的数据), 所以我们要建3个数组, 以下是例程:

dim name(2), high(2), mark(2) '定义三个数组分别储存3个人的名字, 身高和得分  
dim ctr '计数器  
for ctr=0 to 2  
    name(ctr)=inputbox("请输入第"  & ctr+1 & "个学生的姓名")  
    high(ctr)=inputbox("请输入第"  & ctr+1 & "个学生的身高")  
    mark(ctr)=inputbox("请输入第"  & ctr+1 & "个学生的得分")  
next

  OK, 我们已经填充好了数据, 现在我们的小小数据库只能按顺序输入, 我们要让它看起来像点样子, 我们来给他设计查询功能:

'接着上面的程序  
dim cname, temp '要查询的名字, 和一个临时变量, 用来储存数据的位置  
cname=inputbox("请输入你要查询的名字:")  
for ctr=0 to 2 '遍历所有name数组的成员, 寻找要查询的名字  
    if name(ctr)=cname then  
        temp=ctr '记录数据位置  
        exit for '退出循环, 和exit do的用法一样  
    end if '不要忘了end if  
next  
msgbox("姓名:" & name(temp) & " " & "身高:" & high(temp) & " " & "得分:" & mark(temp))

  嘿嘿, 有意思吧, 其实在这个程序里面, 那个temp变量完全没有必要, 只是为了更清楚地说明问题. 因为当exit for以后ctr变量的值就不会改变, 储存的正好是对应数据在数组中的位置, 写这个temp变量是为了照顾到以后要学C++的朋友(C++可以在for语句里声明新变量, 只在这个for结构中有效, 所以到了外部就不能访问了). 也就是说可以简化成如下:

dim cname  
cname=inputbox("请输入你要查询的名字:")  
for ctr=0 to 2  
    if name(ctr)=cname then exit for '因为只有exit for就不需要块if了  
next  
msgbox("姓名:" & name(ctr) & " " & "身高:" & high(ctr) & " " & "得分:" & mark(ctr))

  这是最直接的路子. 好好重读一下上面所有的源代码, 然后自己写几个程序, 完全搞清楚一维数组及其应用以后再看后面的二位数组. 二维数组好像是一个一维数组的集合, 就好像"线积成面"一样, 由n各一维数组组成二维数组, 这是初学者比较好理解的办法(比较精确的是用"编号"的概念去理解, 因为4维以上的数组就比较难以用欧几里德几何概念去解释了). 二维数组是很好解释的, 我们来看一下:

dim a(2,2) '从零开始, 一共有3 X 3 = 9 个数据  
dim i,j '需要两个计数器  
for i=0 to 2  
    for j=0 to 2 '使用嵌套循环  
        a(i,j)="X"  
    next  
next

  我们创建了一个这样的二维数组(那些","是我用来分割元素的,并不存在), 了解二维数组的了吗? 不清楚我们再讲一下  
编号 0 1 2  
0    X,X,X  
1    X,X,X  
2    X,X,X

  二维数组的看起来是不是就是一个矩形呢?(你在内存中看不到这样的矩形, 只是便于你理解), 每个数据都有编号, 由两个数来定位, 这个很像(非常像)你在国际象棋棋盘上寻找一个格, 我们用类似"C6","A2"这样的"垂直坐标"进行定位, 对, "垂直坐标", 很确切. 我们要使用一个二维数组元素的时候可以和普通变量一样使用, 只要指定数组元素的"定位点"就可以了, 例如  
a(0)(1)=1, b(2)(1)="你好", 诸如此类. 要注意的是二维数组也只能储存类型相同的元素, 而且上标(起点)也从0开始. 计算一个二维数组的元素个数只要把两个下标+1(以得到实际的值)再乘起来就可以了, 非常类似于求一个矩形的面积.  
  假如需要储存的都是同一类型的数据, 我们就可以用二维数组, 比如要储存5个人的姓名,国籍,民族, 就可以使用二维数据

dim info(4,2) '一共五个人, 要储存的数据类型有3项  
dim i,j  
for i=0 to 4  
    for j=0 to 2  
    dim opt '定义一个变量用于存储数据项提示  
        select  case j '判断应该输入的是什么数据      
        case 0  
            opt="姓名"  
        case 1  
            opt="国籍"  
        case 2  
            opt="民族"  
        end select  
        info(i,j)=inputbox("请输入第" & i+1 & "个人的" & opt)  
    next  
next

'输出太麻烦了, 我懒得动, 你知道那么回事就行了  
  这样就不需要定义3个一维数组了.  
  多位数组(三维以上)的定义和使用方法与二维数组一样, 但不太好在欧几里德几何空间里加以解释, 幸好我们并不太常用那么多维的数组.定义一个三位数组:dim a(1,2,3) '一共24各数组元素.

要点:  
1) 一维数组是"线", 二维数组是"面", 三维数组是"体" (多维数组就乱套)  
2) 数组的下标从0开始  
3) for循环在数组的应用中起了很大作用, 二维数组需要嵌套循环

作业:   
1) 定义一个数组, 包含5个元素, 都是随机整数(随便输入), 要求把他们按照从大到小的顺序排列起来  
2) 有两个二维数组a(4,4)和b(4,4) (元素值随便), 交换两个数组(原来的a的所有元素值变成b的, b的所有元素值变成a的)

转载于:https://blog.51cto.com/jianchi1825/136577

VBS编程基础教程 (第5篇)相关推荐

  1. VBS编程基础教程 (第2篇)

    今天讲各种"量"和基本运算   先说常量, 这个比较简单.   什么是常量呢, 常量就是其值不可变化的量.   常量分为两种:第一种, 自然常量. 这叫是因为它们本身就是常量, 你 ...

  2. python人工智能编程教程-清华大学出版社-图书详情-《人工智能基础教程:Python篇(青少版)》...

    2017 年国务院印发了<关于印发新一代人工智能发展规划的通知>,提出要围绕教育. 医疗.养老等迫切民生需求,加快人工智能创新应用.要发展智能教育,利用智能技术加 快推动人才培养模式.教学 ...

  3. Windows驱动编程基础教程 (转)

     Windows驱动编程基础教程(转) 我经常在网上遇到心如火燎的提问者.他们碰到很多工作中的技术问题,是关于驱动开发的.其实绝大部分他们碰到的"巨大困难"是被老牛们看成初级得 ...

  4. 人工智能python自学教程-人工智能基础教程:Python篇(青少版)

    人工智能基础教程:Python篇(青少版) 编辑推荐 源代码及PPT下载:https://pan.baidu.com/s/1mWa2fy457fhUXKxT-FgyPw 哈工智诚在线编程云平台:htt ...

  5. Windows驱动编程基础教程

    前言     本书非常适合熟悉Windows应用编程的读者转向驱动开发.所有的内容都从最基础的编程方法入手.介绍相关的内核API,然后举出示范的例子.这本书只有不到70页,是一本非常精简的小册子.所以 ...

  6. java程序设计之网络编程基础教程_Java程序设计之网络编程基础教程

    基本信息 书名:Java程序设计之网络编程基础教程(21世纪高等学校计算机基础实用规划教材) :43.50元 作者:李芝兴 主编 出版社:清华大学出版社 出版日期:2012-12-1 ISBN:978 ...

  7. 楚狂人Windows驱动编程基础教程

    版权声明     本书是免费电子书.作者保留一切权利.但在保证本书完整性(包括版权声明.前言.正文内容.后记.以及作者的信息),并不增删.改变其中任何文字内容的前提下,欢迎任何读者以任何形式(包括各种 ...

  8. DirectX12(D3D12)基础教程(外篇一)——编译Assimp

    目录 1.前言 2.Assimp库简介 3.编译Assimp库的准备工作 4.下载Assimp源码并编译 1.前言   D3D12系列教程因为我转移精力学习Nodejs.VueJs等技能,暂时中断了一 ...

  9. 【ThreeJS基础教程-材质纹理篇】3.2 初识基础网格材质MeshStandardMaterial

    初识标准网格材质 学习ThreeJS的捷径 了解材质的基本知识 材质继承关系 常用的通用材质属性 alphaTest的验证和应用 depthTest和depthWrite应用 渲染哪一面Side 常用 ...

最新文章

  1. 定时从linux获取文件,Linux 使用scp命令定时将文件备份到另一台服务器
  2. 【郭林专刊】10个步骤让你成为高效的Web开发者
  3. 《编译原理》第二章知识点
  4. php 5.3.3 46.el6 6,centos php 5.3升级到 php5.4版本
  5. 第五季1:AP模式USB-WIFI网卡移植与测试
  6. 微信公众号配置后台接入
  7. ES6/05/正则表达式简介,正则表达式如何使用,正则表达式中的特殊字符(边界符,量词符),预定义类,正则表达式中的替换
  8. ajaxSubmit的data属性
  9. 帧栈使用的基本用法c语言,栈帧详解
  10. 看到这个密码,我就笑了
  11. 操作系统课程设计(linux操作系统)
  12. python中的chardet模块
  13. ios降级后无法用itunes恢复新版本的备份
  14. MySQL自定义函数计算年龄
  15. Java num+=1、num++与num=num+1的区别(通俗易懂,附带例子)
  16. 大数据开发工程师目录
  17. JAVA计算机毕业设计橱柜定制系统Mybatis+系统+数据库+调试部署
  18. 荐书 | 8 本热门 AI 原版好书,趁假期充电!
  19. soc均衡,soc均衡控制,储能,蓄电池充放电控制,蓄电池储 能
  20. intel服务器cpu芯片线路图,Intel至强(Xeon)处理器产品发布线路图

热门文章

  1. [PLSQL] 游标学习
  2. vocabulary of ERP
  3. 放纵的感觉其实没有想象的那么好!
  4. nginx日志中$request_time时间异常问题排查
  5. 容器技术第一讲:容器入门篇
  6. kindeditor图片服务器php,kindeditor 粘贴网络图片保存到服务器
  7. android高德地图绘制多边形_Android安卓高德地图实现多边形绘制与编辑
  8. 01 | 基础架构:一条SQL查询语句是如何执行的?笔记(转)
  9. 网关Spring Cloud Gateway的配置和使用
  10. linux进行显卡配置修改什么游戏,配置好Linux显卡驱动 爽快玩游戏