n=Ubound(a) For i=0 To n-1 For j=0 To n-i-1
If a(j)>a(j+1) Then
( ):( ):a(j+1)=t End If Next j Next i
For i=0 To Ubound(a) Print a(i) Next i End Sub
为了提高效率,若在某一轮排序时,未发生位置交换,说明欲排序的序列已有序,排序就可结束。只要在程序中增加一个逻辑变量来进行判断。程序如下:
Private Sub Form_Click( )
Dim a,n%,m%,i%,Tag As Boolean a=Array(1,5,6,7,4,13,23,26,31,51) n=Ubound(a) For i=0 To n-1 Tag=False
For j=0 To n-1-i If a(j)>a(j+1)Then ( )
( ):( ):a(j+1)=t End If Next j
If( ) Next i
For i=0 To Ubound(a) Print a(i) Next i End Sub
5.下面程序,随机产生n个-10~10无序的随机数,存放到数组中,并显示结果;将数组中相同的那些数删得只剩一个,并输出经过删除后的数组元素,如图5.3所示。
31
图5.3 产生随机数运行结果
Option Base 1
Private Sub Form_Click( ) Dim i%,j%,n%,m%,a%( ),r! n=InputBox(“输入数组大小”) ReDim a(1 To n)
Print“产生的数组:”; For i=1 To n r=Rnd
lf r>0.5 Then m=1 Else m=-1 a(i)=( ) Print a(i); Next i m=1
Do While m<=n
i=( ) Do While i<=n
If a(i)=a(m) Then
For j=( ) a(j)=a(j+1) Next j
( ) Else
i=i+1 End If Loop m=m+1 Loop
ReDim( ) Print
Print“删除后的数组:”; For i=1 To UBound(a) Print a(i); Next i End Sub
32
5.3 编程题
1.用随机数产生5行6列的矩阵,其值为1-100之间的分数,表示5位学生期末6门课程的成绩。再利用ReDim Preserve重新定义5行7列的矩阵,增加的最右列存放每位学生的最高分数;再定义6个元素的一维数组,存放每门课程的平均分数。计算并按图5.4形式显示。
图5.4 学生成绩矩阵运行界面 例如,求每位学生的最高分程序段如下: For i=0 To 4 maxl=a(i,0) For j=1 To 5
If a(i,j)>maxl Then maxl=a(i,j) Next j
a(i,6)=maxl Next i
求每门课程的平均分程序段如下: 1 For j=0 To 5 2 aver=0
3 For i=0 To 4
4 aver=aver+a(i,j) 5 Next i
6 b(j)=aver/5 7 Next j [思考]
若把第2句的aver=0移动到外循环语句即1句的前面,是否影响程序的运行?是否影响程序的正确性?这和前面讲过累加时要在循环体外对求和清零矛盾否?
2.随机产生25个[1,9]的整数放入5*5的二维数组中并输出,统计出靠边元素之和。
33
计算机技术基础习题集
习题五 参考答案
5.1 选择题
1.B A不应出现方括号;C静态数组定义时下标不能出现变量;D下标之间少逗号。
2.B ReDim语句可以反复使用,用以改变数组的维数和元素的个数,但不能改变数组的类型。 3.B
4.C A一维数组,而且浪费了一个空间;B数组有4行4列的方阵,浪费了存储空间;D声明的是3行3列的整型数组,不能存放题目中要求的实数。 5.A 每一维的大小:(上界-下界)+1,多维数组的大小等于每一维的乘积。所以,该题是三维数组的大小为:4×5×6=120。
6.D 因为当出了循环,循环控制变量i的值比数组上界Ubound(a)大1,超出数组上界的范围,因此显示“下标越界”的出错信息。
7.A 该题主要难点是除数组的第1行、第1列的6个元素与下标有关外,其他数组元素的下标又是数组元素。
8.D 该题要点:通过Array函数对数组赋初值;将一维数组赋值给二维数组;打印上三角方阵。
9.C 最后程序要输出的是M(2+M(x)),而x=6,M(x)的值为5,所以M(2+M(x))的值就是M(7)的值,即4。
10.C 该题要点:因为i的值从未改变过,所以执行Print语句后,即输出N(3),M(3)的值。 11.B
12.A 掌握Each语句的用法是关键
13.B 定义数组时的区间设置要从小到大 14.A
15.C 该题考察动态数组赋初值及Lbound()、Ubound()函数的用法。 16.C 此程序采用的是嵌套的For??Next语句结构,为数组m赋值,按照步骤一步步推得结果。
5.2 填空题
1.Int(Rnd*100+1) 产生1-100的随机分数 string(a(i)\\2,”*”);”A(“;i;”)=”;a(i) 2.a(7) 最后元素移出
a(j+1)=a(j) 每个元素往右移,最左位置留出 a(1)=t
3.Preserve a(n+1) 插入一个数,先使数组加一个元素,而且要保留原数据
a(i+1)=a(i) 找插入的位置
35