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

最大数n=  91    最小数m=  18

[8-3]  编一程序输入n个数据,将其排序后按从小到大的顺序输出。

问题分析:利用数组依次输入n个数据,逐个进行比较,把较小数排在前面,较大数排在后面。

程序为:

'EXAMPLE 3

REM   从小到大排序

INPUT  "请输入N"n

DIM a1TO n                 '定义数组

FOR i=1TO n                  '数组的输入

PRINT "a";i;"=";           '显示输入第几个元素

INPUT ai                   ’输入

NEXT i

FOR i=1 TO n-1

FOR j=i+1 TO n

IF aiTHEN SWAP ai,aj

NEXT j

NEXT I

PRINT  "按从小到大排序后:"

FOR i=1 TO n                 '显示已排序数组

PRINT ai);

NEXT i

PRINT

END

程序运行结果为:

请输入 N 8

a1= 60

a2= 33

a3= 45

a4= 25

a5= 19

a6= 90

a7= 4

a8= 78

按从小到大排序后:

4  19  25  33  45  60  78  90

[8-4]  有一个已按升序排序的数组,现在输入一个数,要求按原来的排序规律将它插入数组中。

问题分析:根据题意,现在已有一个按升序排序的数组,假设该数组有14个元素,把这14个元素放在DATA语句中,利用READ语句来读取其中的内容。从键盘输入指定的数据个数n,但不能超过14个,因为DATA语句中只有14个数。由于要在原数组中插入一个数,所以在用DIM语句定义数组单元个数时,定义为DIMan+1,其下标上界为n+1

DATA语句中顺序读入n个数据,放在a1)元素中,读完一个数即输出此数,然后从键盘输入要插入的数x。将其依次与ai)相比,如果x>a1),则不作任何处理然后再与a2)相比,…,直到遇到某一个ai)大于x为止。将ai)以后的各处元素顺序向后移动一个位置,就完成了插入工作。

另外,还有两种特殊情况需要考虑:

1)当x最小时,即x<a1),可以与一般情况同时考虑。

2)当x比所有数都大时,即x>an),则应该直接将x的值赋给an+1)。

程序如下:

'EXAMPLE 4

INPUT "n=";n

DIM an+1

FOR i=1 TO n

READ ai

PRINT ai);

NEXT i

PRINT

INPUT"请输入一个数:"x

FOR i=1 TO n

IF x<aiTHEN

FOR j=n TO i STEP -1

aj+1=aj

NEXT j

EXIT FOR

END IF

IF x>anTHEN an+1=x

NEXT i

PRINT

DATA 2,4,6,8,10,12,14,16,18,20,22,24,26,28

END

[8-5]  利用一维数组统计一个班学生0~910~1920~29、…90~99100各分数段的人数。

问题分析:定义一个有11个元素的一维数组a0 TO 10,0~9分的学生人数存入a10)中。

程序为:

'EXAMPLE 5

INPUT "请输入学生数N"n

DIM a0 TO 10

i=1

DO WHILE i<=n

PRINT "请输入第";i;"名学生的成绩";

INPUT x

p=INTx/10

ap=ap+1

i=i+1

LOOP

p=0

DO WHILE p<=10

IF P<=9 THEN

PRINT p*10;";p*10+9;"分的人数为:";ap

ELSE

PRINT "100分的人数为:"a10

END IF

p=p+1

LOOP

END

[8-6]  有一个n×m的矩阵,各元素的值由键盘输入,求全部元素的平均值,并把高于平均值的元素以及它们的行列号打印出来。

问题分析:首先应定义一个n×m的二维数组an,m,用双重循环输入二维数组的各元素值,并将这些值进行累加,由此可以求得平均值av(累加和/总元素数)。然后按行i、列j逐个元素判断其值ai,j)是否大于av,如果为真,则输出其值ai,j)、所在行i、所在列j

程序如下:

'EXAMPLE 6

OPTION BASE 1

INPUT "请输入行列数n,m=";n,m

PRINT "这是一个有";n;"";m;"列组成的矩阵"

DIM an,m

s=0

PRINT  "请输入各元素的值:"

FOR i=1 TO n

FOR j=1 TO m

PRINT "a";i;",";j;"=";

INPUT ai,j

s=s+ai,j

NEXT j

NEXT i

av=s/n*m

PRINT "高于平均值的元素""行号""列号"

FOR i=1 TO n

FOR j=1 TO m

IF ai,j>av THEN PRINTai,j,i,j

NEXT j

NEXT i

END

程序运行结果为:

请输入行列数n,m= ? 2,3

这是一个有23列组成的矩阵

请输入元素的值:

a1,1= 10

a1,2= 20

a1,3= 30

a2,1= 20

a2,2= 10

a2,3= 30

高于平均值的元素       行号       列号

30                      1           3

30                      2           3

[8-7]  将两个3×3的矩阵ab相加。即将相应位置上的元素相加,放到c数组的相应位置上。

问题分析:本题需要先定义3个二维数组,每个二维数组的行和列都为3,即a3,3)、b3,3)和c3,3)。根据题意,数组a3,3)和数组b3,3)的各元素值是已知的,只需用READ语句从DATA语句中读出即可。相应位置上的元素相加,放到c数组上的相应位置,其实就是将ai,j+bi,j)的值赋给ci,j)。

程序如下:

'EXAMPLE 7

OPEION BASE 1

DIM a3,3,b3,3,c3,3

PRINT "数组a:"

FOR i=1 TO 3

FOR j=1 TO 3

READ ai,j

PRINT ai,j,

NEXT j

PEINT

NEXT i

PRINT

PRINT "数组b:"

FOR i=1 TO 3

FOR j=1 TO 3

READ bi,j

PRINT bi,j,

NEXT j

PRINT

NEXT i

PRINT

PRINT "数组c:"

FOR i=1 TO 3

FOR j=1 TO 3

ci,j=ai,j+bi,j,

NEXT j

PRINT

NEXT i

DATA 1,2,3,4,5,6,7,8,9

DATA 2,4,6,8,10,12,14,16,18

END

程序运行结果为:

数组a:

1     2     3

4     5     6

7     8     9

数组b:

2     4     6

8     10    12

14    16    18

数组c

3     6     9

12    15    18

21    24    27

8.3  静态数组和动态数组

Quick BASIC中,数组的应用灵活方便,其主要原因就是在静态数组之外引进了动态数组的概念。我们知道,计算机的内存是有限的,程序在运行的过程中,数据占了很大一部分存储空间,有时会使得一些程序因内存不够而不能正常运行。Quick BASIC中的动态数组,通过在程序运行的过程中动态地分配与释放内存,更有效地利用内存空间,使得Quick BASIC的功能进一步得到加强和完善。

8.3.1  静态数组和动态数组

1.静态数组

计算机在程序执行前,系统进行编译的时候,根据数组说明语句开辟的固定存储空间,直到程序执行完毕,在整个过程中不再改变,这种数组就叫静态数组。

在静态数组中,数组一经定义直到程序运行结束,该数组的维数和大小不再改变,因此,它所占用的内存单元也不改变。这是各种高级语言有关数组所共同具有的基本特点。

Quick BASIC语言中规定,在用DIM语句定义数组的时候,如果下标的上下界用的是常数,则这样的数组是静态数组。

2.动态数组

计算机在执行过程中才给数组开辟存储空间,当不需要时,可以用ERASE语句删除它,收回分配给它的存储空间,还可以用REDIM(或DIM)语句再次分配存储空间。这样的数组就叫动态数组。

Quick BASIC语言规定,在用DIM语句定义数组的时侯,如果下标的上下界用的是变量或者表达式,这样的数组为动态数组。动态数组是Quick BASIC语言对数组功能的扩充。

3.判断静态数组和动态数组的方法

在程序未运行时,动态数组不占用内存,可以将这部分存储空间移作他用。而对于静态数组,编译程序将为它在Quick BASIC数据段据预留空间。

判断静态数组和动态数组的方法主要有:

n         数值常量和CONST语句中说明的常量定维的数组是静态数组。

n         用变量作为下标定维的数组是动态数组。

用变量它维的动态数组,在使用DIM语句说明前必须先对变量赋值,否则会出错。

静态数组的大小不能超过64KB,如果超过会发生“Overflow”的错误。动态数组可以超过64KB,只是在进入Quick BASIC环境时必须使用/ah命令行参数。

8.3.2  数组的释放语句ERASE

格式:

ERASE〈数组名〉[,〈数组名〉]…

功能:重新初始化静态数组元素,释放动态数组的存储空间。

说明:

1)该语句对静态数组和动态数组的作用不一样。

对于静态数组不能删除,只能进行初始化,即把数组的数值元素置为0,或把字符串元素置为空;

对于动态数组就能删除,释放该数组所占用的内存,释放后的内存可以重新定维。

2DIM语句本身不具备再定义的功能,但当动态数组通过ERASE语句操作,释放数组空间后,就可以用DIM语句对该数组进行再定义。


字数:5879    最后更新:1年以前 [08-16 19:40]我爱钱 修改
本页编辑者:我爱钱  
[前一页]:第八章  [后一页]:第八章
[在本页中加入书签] [收藏本书] [推荐本书]
  17xie论坛 > 本书讨论区 > 本页评论   (共0条)
发表评论

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

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