加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

VB 教案之数组

(2011-04-01 10:11:03)
标签:

杂谈

分类: vb数组

授课对象:初一兴趣班学生)

教学过程:

一、引入: 在学习if语句时,我们曾做过一个题,在文本框内输入正整数,判断这3个数的大小然后将他们按从小到大的顺序输出。

  if a>b then

  temp =a:a=b : b =temp

  end if

  if a >c then

  temp =a : a=c :c= temp

  end if

  if b>c then

  temp = b : b=c : c=temp

  end if

  print "这三个数从小到大的顺序是"; a;b;c;

这是3个数的大小排序,假如多于三个数的排序呢? 当然我们还可以用IF语句予以解决,但大家可以想象到它的麻烦程度,其实,我们可以用数组来解决这个问题。那么何谓数组呢?

二、1)新课讲授:所谓数组是一群数据类型相同的变量,在内存里能拥有连续存放空间的集合。数组在使用之前必须先声明,声明的目的是确定内存中应保留多少连续空间给此数组使用,并定出数组中每一个元素的数据类型。

   语法:dim 数组名称(下标1,[下标2[……]])[as 数据类型]

   功能:声明所指定数据类型为一维(二维……)数据

eg :  dim a(6) as integer 

声明一个a(6)的数组,其包含了a(0)---a(6)7个整型变量。数组的默认下标值从0开始,假如你觉得不习惯的话,可以用用这个方式声明:

 dim 数组名称(下界to上界[下界to上界][……])[as 数据类型]

假若要定义a(1)----a(6)的整型数组,则可以这样写:

  dim a(1to 6) as integer

请学生判断以下下列数组说明语句是否正确,说明原因:

(1) Dim a(10) as integer

(2) Dim b(-10) as integer      /错误  没有用关键之to显示知名下标范围。

(3)Dim c(5,3)as byte

(4)Dim y()          /错误,只有重定义语句才可以不带下标

2)回到我们刚上课讲的内容,如何利用数组解决数字的排序问题呢?这里我们先介绍两个函数:

随机函数Rnd  产生介于0到1之间的函数   随机数种子函数 Randomize 在Rnd函数之前使用,以当做随机数产生器的种子。

(注:如果不用语句来播放随机数的种子,则每次使用Rnd函数时将会得到相同顺序的随机数)

下面我们用数组来解决数字的排序问题:

1)定义数组,产生1000内的随机数 (这里我们以生成6个数为例)

Dim a(1 to 6) as integer

Dim i as integer,j as integer

Dim t as integer

cls                           清除屏幕

Randomize 

for i =1 to 6             

a(i)=int(Rnd*1000+1)                 /产生1--1000的随机整数

print a(i);

next i

print "-----------------------------------------------"

end sub

(解释程序,使学生读懂本程序后,关闭代码。让学生自己编程:由button控制产生出10个随机整数)

2) 6个随机数按大小顺序排列

for i = 1 to 6

  if a(1)<a(i) then

  t = a(1)

  a(1)= a(i)

  a(i) =t

  end if

next i                   

print a(1)                             / 打印出最大的那个数

end sub

我们当然可以用5个if语句依次将6个数从小到大打印出来,但如果是20个、100、1000个数的排序,那我们就得相应的写出无数的if语句来做,但显然这办法是不理想的。其实这里我们可以套用两个循环语句完成此题。

3)将2)改成

for i=1 to 6

  for j = i+1 to 6

    if a(i) < a(j) then

    t = a (i)

    a(i)= a(j)

    a(j)=t

    end if

  next j

  print a(i);

next i                 双重循环将6个数从大到小打印出来。

end sub

解释:1)当i =1的时候, j=2时,比较出a(1) a(2)的大小,将大的数给a(1)

                    j =2时,比较出a(1) a(3)的大小,将大的数给a(1)

                    ……

                    j =6时,比较出a(2) a(6)的大小,将大的数给a(1)

      打印出a(1)   i变成2

    2)当i=2时, j =3时,比较出a(2)a(3)的大小,将大的数给a(2)

                …………

     打印出a(2) i 变成3

    ……

    5) 当i=5时 j=6时, 比较a(5) a(6)的大小,将大的数给a(5)

    6) 当i=6时,j 已经超出了循环范围。所以这里的循环我们也可以将i的语句改为

    for i =1 to 5

(在学生读懂程序的情况下请学生写出程序:随机产生100个数并将其排序)

   const n =100

   Dim a(1to n) as integer

   Dim i as integer,j as integer,t as interger

   cls

   Randomize

   for i=1 to n

   a(i)=int(Rnd*1000+1)

   print a(i);

   if i mod 20 =0 then

   print

   end if

   next i

   print "————————————————————————————————"

   for i =1 to n

    for j =i+1 to n

    if a(i)<a(j) then

    t = a(i)

    a(i)=a(j)

    a(j)= t

    end if

    next j

   print a(i);

   if i mod 20 = 0 then

   print

   end if

   next i

   end sub

三、课堂小结 :(数组声明、如何利用数组和循环语句给数字排序等)

四、作业:对于给定的数组a(n)as integer(n>=20),设计一个程序,找出在a中出现频率最高的元素值及出现的次数。例如(1,5,4,2,5,8,5,4)中,出现频率最高的是5, 次数是3次。

 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有