Vb实验五数组的应用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《Visual Basic 6.0程序设计》实验报告(五)
一、实验名称:数组的应用(4学时)
二、实验目的:
1.掌握数组的声明和数组元素的引用;
2.掌握静态数组和动态数组的声明和使用;
3.学会应用数组解决与数组有关的常用算法问题;
4.掌握控件数组的建立和应用。
三、实验环境
多媒体计算机WindowsXP操作系统Visual Basic 6.0
四、实验内容及实验步骤(或记录)
1.输入10名同学的成绩,求平均分、最高分和最低分。
设计步骤如下:
①在窗体上添加3个标签(Label1、Label2和Label3)和3个文本框(Text1、Text2和Text3),设计界面如图7.2所示。各控件的主要属性和作用如表1所示。
控件的属性和作用
②编写程序代码如下:
Private Sub Command1_Click()
Dim Score(1 To 10) As Integer '声明存放成绩的数组Score
Dim i As Integer,Max As Integer,Min As Integer,Average As Single
For i = 1 To 10 '逐一输入每个同学的成绩
Score (i) = Val (InputBox ("输入第" & Str(i)& "个学生的成绩","成绩统计",""))
Next i
End Sub
Private Sub Command2_Click()
Dim i As Integer
Dim sum As Single, aver As Single
sum = Score (1) ' sum 用于存放总成绩,初值为数组中的第一个元素
Max = Score (1) ' 设变量Max的初值为数组中的第一个元素
Min = Score (1) ' 设变量Min的初值为数组中的第一个元素
For i = 2 To 10 ' 通过循环依次比较,求最大、最小值;求总和
If Score(i) > Max Then Max = Score(i)
If Score(i) < Min Then Min = Score(i)
sum = sum + Score(i)
Next i
aver = sum / 10 ' 求平均值
Text1.Text = Format (Average, "0.00 " ) ' 以两位小数显示平均值
Text2.Text = Max
Text3.Text = Min
End Sub
2.生成20个0到100之间的随机整数存于数组A,然后将这20个数按递增顺序排序。
方法1:选择法排序。
第l趟:找出A(1)~A(n)中最小数的位置p,将A(p)与A(1)交换,于是数组A的最小数交换到了A(1);
第2趟:找出A(2)~A(n)中最小数的位置p,将A(p)与A(2)交换,于是当前最小数即数组A的次小数交换到了A(2);
第i趟:找出A(i)~A(n)中最小数的位置p,将A(p)与A(i)交换,于是当前最小数即数组A的第i小的数交换到了A(i);
第n-1趟:找出A(n-1)~A(n)中最小数的位置p,将A(p)与A(n-1)交换,于是当前最小数即数组A的第n-1小的数交换到了A(n-1),A(n)则存放数组的最大数。
共经过了n-l趟,完成了n个数的递增排序。
图1以5个数为例,给出选择法排序过程。
A(1) A(2) A(3) A(4) A(5)
交换最小数到A(1) 1√15 11 7 8
交换最小数到A(2) 7√11 15
8
交换最小数到A(3) 8√15 11
交换最小数到A(4) 11√15√
选择法排序的实现:程序界面同例7.2,只需将第二个命令按钮(Command2)的Caption属性值改为“排序”,其Click过程改为:
Private Sub Command2_Click()
Dim A(1 To 20) As Integer,i As Integer, j As Integer, p As Integer, t As Integer
For i = 1 To 19 '外循环控制19趟比较
p = i '第i趟时,初始假定第i个元素最小
For j = i + 1 To 20 '内循环在第i~20个元素中选最小数的下标并存于p
If A(j) < A(p) Then p = j
Next j
t = A(i) '最小数A(p)与第i个元素A(i)交换A(i) = A(p)
A(p) = t
Next i
For i = 1 To 20
'数组各元素显示于Text2中Text2.Text = Text2.Text & A(i) & " "
Next i
End Sub
运行效果如图所示。
图1 选择法排序过程示意图
方法2:冒泡法排序。
第l趟:依次将A(1)~A(n)中每对相邻元素进行比较,使两数中的小数上冒、大数下沉,于是本趟结束时数组A的最大数“沉底”到了A(n);
第2趟:依次将A(1)~A(n-1)中每对相邻元素进行比较,使两数中的小数上冒、大数下沉,于是本趟结束时当前最大数即数组A的次大数“沉底”到了A(n-1);
第i趟:依次将A(1)~A(n-i+1)中每对相邻元素进行比较,使两数中的小数上冒、大数下沉,于是本趟结束时当前最大数即数组A的第i大的数“沉底”到了A(n-i+1);
第n-1趟:将A(1)~A(2)中两个元素进行比较,使两数中的小数上冒、大数下沉,于是本趟结束时当前最大数即数组A的第n-1大的数“沉底”到了A(2),A(1)则存放数组的最小数。
共经过了n-l趟,完成了n个数的递增排序。
图3以5个数为例,给出冒泡法排序过程。图中用“√”标记的数为每一趟后的最大数,它是从其他位置交换过来的。
使用冒泡法排序只需将Command2的Click过程改为:
Private Sub Command2_Click()
Dim A(1 To 20) As Integer, i As Integer, j As Integer, p As Integer, t As Integer
For i = 1 To 19 '外循环控制19趟比较
For j = 1 To 20 - i '内循环控制A(1)~A(20-i+1)中每对相邻元素之间的比较
If A(j) > A(j + 1) Then
t = A(j) 'A(j)与A(j+1)交换
A(j) = A(j + 1)
A(j + 1) = t
End If
Next j
Next i
Text2.Text = ""
For i = 1 To 20 '数组各元素显示于Text2中
Text2.Text = Text2.Text & A(i) & " "
Next i
End Sub
A(1) A(2) A(3) A(4) A(5)
结果7 11 1 8 15√
结果7 1 8 11√
结果 1 7 8√
结果 1 7√
图3 冒泡排序过程示意图