背景:                 
[本书目录] [图书首页] [本书讨论区]  
链接地址:http://www.17xie.com/read-6164.html    注册17xie 一起来写书 实现您的出书梦想!

例如:

DIM x20,20           '假设x是动态数组

ERASE x                '释放x数组的存储空间

DIM x15,30           '重新进行分配

8.3.3  重新定维语句REDIM

式:

REDIMSHARED]〈数组名〉[(〈维数定义〉)][AS〈类型说明词〉][,〈数组名〉[(〈维数定义〉)][AS〈类型说明词〉]]…

功能:重新定义已为动态数组分配的空间。

说明:

1)使用REDIM重新定维时可以改变每维的大小,但不能改变数组的维数。

2)用REDIM语句进行重新定维时,必须首先用ERASE语句释放已分配的存储空间。

[8-8]  有如下程序,判断其运行后的输出结果。

'EXAMPLE 8

n=20

DIM xn

ERASE x

REDIM x30

xn+2=n+2:xn+5=n+5

PRINT x22);x25

END

问题分析:在Quick BASIC中,可以对动态数组用REDIM语句进行重定维操作,还可用ERASE语句(释放语句)释放数组所占据的空间。该空间可以用来建立一个新的数组,也可以建立一个同名的数组,维数和大小均可重新指定。

本题中各语句的作用见下:

n=20                      '给变量n赋值为20

DIM xn                  '定义一个一维动态数组x

ERASE x                   'ERASE语句释放数组x所占据的空间

REDIM x30               'REDIM语句重定义了一维数组x,其下标上界为30

xn+2=n+2:xn+5=n+5     'x22)及x25)这两个数组元素分别赋值2225

PRINT x22;x25         '输出x22)的值22x25)的值25

END

程序运行后输出结果为:

22      25

8.4  利用数组进行查找数据

程序设计中常常会遇到在一批数据中找出其中某一元素。例如在一个学校的学生姓名中,查找某一学生。

查找的方法有两种:一是顺序查找,二是折半查找。

8.4.1  顺序查找

顺序查找(又称线性查找),把要查找的元素与整个数组的元素逐一比较,直到发现有与被查找元素相同的为止。

[8-9]  有一批数:5376322581410864,找出数据是32的数。

'EXAMPLE 9

CLS

INPUT"请输入这一批数的数量:"n

DIM num1 TO n

INPUT"你找什么数?"find

FOR i=1 TO n                       '输入每个数值

INPUT numi

NEXT i

flag=0

FOR i=1 TO n

IF numi=find THEN

PRINT find:"已被找到"

flag=1

EXIT FOR

END IF

NEXT i

IF flag=0 THEN PRINT "没有找到"find

END

8.4.2  折半查找

折半查找又叫二分查找,使用这种方法查找必须要把数组先排序。

[8-10]  将例8-9中的数采用折半法查找。

首先将这8个数排列成如下的顺序,例如要查找32,查找步骤见如图8-1所示:

折半查找的思路是:

1)把整个数组对分,取第一个元素的下标为low,最后一个元素的下标为high,居中的元素为mid,mid=INT((low+high/2)。

 

8-1  折半查找

mid位置上的元素与被找的元素find比较,有3种情况:

n         中间元素大于find,去掉后一半,再从前一半中查找,把被找的区间缩短,这时新的区间最后一个元素的下标应该用mid代换high

n         中间元素小于find,去掉前一半,再从后一半中查找,把被找的区间缩短,这时新的区间开始一个元素的下标应该用mid代换low

n         中间元素等于find,这正是要查找的对象,这时就算找到了。

2)如果发生前两种情况之一,查找的过程继续直到没有可查找的元素,或出现第三种情况为止,本例经过3次缩短区间,得到要查找的元素。

'EXAMPLE 10

DIM num1 TO 8

CLS

INPUT"你想找什么数?";find

FOR i=1 TO 8

READ numi

NEXT i

low=1

high=8

WHILE ABSlow-high>1

mid=INT((low+high/2

IF findmidTHEN

high=mid

ELSEIF find>nummid THEN

low=mid

ELSE

low=high

END IF

WEND

IF low=high THEN

PRINT "num";mid;")是找到的数为";find

ELSE

PRINT find;"没有找到"

END IF

DATA4253253647881108

END

程序说明:

顺序查找,在最好的情况下,只需比较一次,即第一个元素;在最坏情况下,需要比较所有元素,因此平均的比较次数是数组元素的一半。对于大型数组,这种查找可能要花费相当长的时间,但是对于未排序的数组,只有用顺序查找。

二分查找并不查找数组中的各个元素,它比顺序查找要快得多,但它只适合于已排序好了的数组。

8.5  本章小结

1.数组是相同类型数据的有序集合,用一个数组名代表数据的全体,用下标区别同一数组中的各个元素,数组元素又称下标变量,下标变量中下标个数就是该数组的维。

2.常用的数组多为一维数组、二维数组,可以有更高维的数组,在BASICA中,最高维不超过255,在Quick Basic中,最高维不超过60

3.在BASIC中数组必须说明后使用,说明数组的维数和每维的大小(也即上下界)使用DIM语句。

BASIC中,维的下界不能为负数,选择Option BASIC语句的时候,隐含下界为0

Quick BASIC中用关键字TO,可以把下界值扩充到-32768~32767

4.数组可以分为静态数组和动态数组。一般用常量说明维的大小的数组是静态数组,用变量说明维的大小的数组是动态数组。

5.数组经过定维说明,只是在内存中开辟了一片连续的数据存储区。

6.数组的输入输出或处理,和循环结构分不开,通常用单循环作一维数组的处理,用双循环作二维数组的处理。

7.数组的处理,是通过下标变量进行的,因此,下标不能超出数组定义的范围,否则会发生下标出界(Subscript out of range)的错误。

8.数组是很重要的一种数据结构,为处理大批量数据提供了方便,对数组的操作有很多有用的算法,如矩阵运算、排序、查找等,应通过实例很好掌握。

 

1.任给一个实数矩阵Am×nm<100,n<100,试找出其中一个最大元素。

2.设某学校某班共10名学生,为了评定某门课程的奖学金,按规定超过全班平均成绩10%者发给一等奖,超过全班成绩5%者发给二等奖。试设计程序,打印出应获奖学金的学生名单(包括姓名、学号、成绩、奖学金等级)。

3.求矩阵A的转置矩阵A'

4.假设5个百货公司一月内销售电视机的情况如下表:

8-3  百货公司一月内销售电视机的情况表

商店

兰花牌

梅花牌

菊花牌

第一百货公司

50

80

20

第二百货公司

105

92

20

第三百货公司

20

65

32

第四百货公司

80

150

98

第五百货公司

15

36

110

另外,假设各牌号电视机的价格如下:

8-4  各牌号电视机的价格

牌号

价格(元)

兰花牌

2500

梅花

3200

菊花牌

2850

试计算各百货公司的营业额。

5.某地区人口普查处理中,需要统计各种年龄下的人口数,以便制定合理的人口发展战略。若已知人类现有最高年龄为150岁,试设计程序,求以123,…,150岁为条件下的人口数。

6.在任给n个实数(n<2000),试找出其中的众数(即出现次数最多者)、众数的次数、众数频率(即其次数与总次数之比)以及众数首次出现的位置。

7.设某市某宾馆共有3层,每层共有2排各5个客房。试为该宾馆设计程序来统计住宿旅客总人数以及查询某一房间住宿旅客人数。


字数:4676    最后更新:1年以前 [08-24 11:09]我爱钱 修改
本页编辑者:我爱钱  
[前一页]:第八章  [后一页]:第九章 函数与子程序
[在本页中加入书签] [收藏本书] [推荐本书]
  17xie论坛 > 本书讨论区 > 本页评论   (共0条)
发表评论

用户名称 匿名发表
评论内容
验证码

关于我们 | 版权声明 | 免责声明 | 诚聘英才 | 联系我们 | 合作伙伴 | 友情链接 | 广告合作 | 提交意见
Copyright © 2007 17xie.com 互联网协同写书平台 京ICP备08002671号