VBNET程序设计实用教程3.ppt_第1页
VBNET程序设计实用教程3.ppt_第2页
VBNET程序设计实用教程3.ppt_第3页
VBNET程序设计实用教程3.ppt_第4页
VBNET程序设计实用教程3.ppt_第5页
已阅读5页,还剩109页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Visual Basic .NET程序设计实用教程,第3章 数 组,本章任务:,方阵转置,求一维数组的最小值及其位置,求矩阵的各行最小值及位置,求每个学生的平均成绩并按平均成绩排序,一维数组排序算法演示,本章任务,本章要点:,本章要点:,数组的概念,二维数组的定义、赋初值与数组元 素的引用,与数组相关的语句、函数的使用,控件(对象)数组的定义与使用,本章要点,一维数组的定义、赋初值与数组元素的引用,3.1 数组的概念,在前面的章节中,程序中要存放或处理一个数据,首先应声明一个变量,这在只处理少量数据的程序中是可以的,但若程序需处理很多个数据,特别是同类数据,使用变量实现将显得比较麻烦,甚至不可

2、能完成需要的功能。如某次期中考试后,需要用计算机处理学生的信息学课程成绩,假设全年级为200人,若用变量来记录学生的成绩,不但需要200个变量,而且在编程过程中程序员还需要记住每个变量与学生的对应关系,显然是极不方便的。,3.1 数组的概念,为了解决该问题,在VB.NET中提供了一种名叫“数组”的数据结构,利用它可以方便地处理像考试成绩这种具有多个相同类型的一批数据。可以把数组看成是很多个变量的集合,这些变量具有相同的类型,它们在内存中是连续存放的,这些变量均具有相同的名称,并且可以通过下标相互区分,每一个这样的变量我们把它称为数组元素。由于在程序中数组元素是通过下标相互区分的,而下标又可以用

3、变量或表达式来表示,所以为程序员循环处理成批数据带来了方便。,3.1 数组的概念,如假设存放200个学生信息学成绩的数组名为InformationScore,要求出所有学生的信息学的平均分,可使用下列语句: Dim AvgInformationScore As Single Dim InformationScore(199) As Integer AvgInformationScore = 0 For i = 0 To 199 Step 1 AvgInformationScore = AvgInformationScore + InformationScore (i) Next I AvgIn

4、formationScore = AvgInformationScore / 300 读者不妨试着使用变量来求信息学课程的平均分,会发现程序编起来非常麻烦。可见与变量相比,使用数组来处理同类的多个数据,优势十分明显。,3.2 任务3-1:求一维数组的最小值及其位置 一维数组,任务3-1描述:,编写一个程序,用来从随机产生10个两位数找出其中的最小数及最小数的位置。程序的设计界面如图3-1所示,程序运行时,单击“产生数组”按钮,将产生10个两位数并显示在第一个文本框中,单击“求最小数及位置”按钮将从产生的10个两位数中找出最小数及其位置并显示在第二和第三个文本框中,如图3-2所示:,3.2 任务

5、3-1:求一维数组的最小值及其位置一维数组,图3-2,可使用一个一维数组来存放一批随机产生的数,再设两个变量,一个用来记下数组中的最小数,一个用来记下最小数的下标。首先认为第一个数最小,记下它的值和下标;然后用记下的最小数和后面的数比较,如果后面的数小,则用记最小数的变量记下该数,用记最小数下标的变量记下该数的下标;用记下的最小数再与后面的数比较直到所有的数都比较完毕,记最小数变量中的值就是最小数,记最小数下标的变量中的值就是最小数的下标,最小数下标(从0开始)加1就是最小数的位置。,任务分析:,3.2 任务3-1:求一维数组的最小值及其位置一维数组,3.2 任务3-1:求一维数组的最小值及其

6、位置一维数组,任务实现:,1启动VB.NET,新建一个项目,项目类型为“Windows应用程序”,项目的存放位置为“D:VBTASKCH03”,项目名为“Task3_2”。,2把Form1窗体的Text属性值设置为“方阵转置”,把它的Name属性值设置为“frmTranspose”。单击“解决方案资源管理器”中的“Form1.VB”窗体,然后在属性窗口中把它文件名属性设置为“frmTranspose.vb”。然后执行【项目】【Task3_2属性】命令,在出现的“Task3_2属性页”对话框中把“启动对象”设置为“frmTranspose”。,3.2 任务3-1:求一维数组的最小值及其位置一维数

7、组,3对照程序设计界面,为窗体添加控件并设置控件的属性。控件的属性设置如表3-2所示。,表3-2 任务3-2控件属性设置及其功能,3.2 任务3-1:求一维数组的最小值及其位置一维数组,4在代码窗口中定义常量并定义模块级二维数组,如下。,Const N = 5 方阵的阶数,Dim Arr(N - 1, N - 1) As Integer 该数组用来存放方阵,3.2 任务3-1:求一维数组的最小值及其位置一维数组,说明:,(1)语句“Dim Arr(N - 1, N - 1) As Integer”的作用是定义了一个名为Arr的N行N列的二维数组,用它来存放NN的方阵。所谓二维数组,就是有两个下

8、标的数组,适合处理如成绩报告表、矩阵等具有行列结构的数据。类似的可以定义三维数组(具有三个下标)和多维数组(具有多个下标)。本章只介绍二维数组。,3.2 任务3-1:求一维数组的最小值及其位置一维数组,(2)使用二维数组之前也必须对二维数组进行声明(或称定义)。定义二维数组的语句格式及功能如下。 格式:Declare 数组名(下标1上限,下标2上限) As 数据类型符 功能:定义一个名为“数组名”的二维数组,数组元素的数据类型由“数据类型符”确定。,3.2 任务3-1:求一维数组的最小值及其位置一维数组,“Declare”可以是Dim、Static、Public、Protected、Frien

9、d、Protected和Private等。数组的每维的下标下限均为0,且不可以改变,VB.NET不支持Option Base 语句。如果不指定“数据类型符”,则默认为Object型的数组。,说明:,3.2 任务3-1:求一维数组的最小值及其位置一维数组,Dim a(9) As Integer; /定义了一个数组a,该数组的数据类型是integer,具有10个元素。第一个元素为a(0),最后一个元素为a(9)数组定义后,将占用连续的存储空间,其占用存储空间大小为“长度*数据类型所占用的字节数”。例如对于上面定义的a数组,在程序运行时,系统将为该数组分配一个连续的40字节的存储单元,用来存放该数组

10、的每一个元素,该数组占用存储空间的情况如图3-3所示。,例如,有下列语句:,3.2 任务3-1:求一维数组的最小值及其位置一维数组,图3-3 数组在内存中的存储情况示意,3.2 任务3-1:求一维数组的最小值及其位置一维数组,5编写Button1按钮的Click事件过程代码,如下。 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim i As Integer Randomize() 随机数初始化 TextBox1.Text

11、= 清空显示数的文本框 For i = 0 To N 该循环产生10个数并显示在第一个文本框中 Arr(i) = Int(90 * Rnd() + 10) 产生一个两位随机数存放到数组元素Arr(i)中 TextBox1.Text = TextBox1.Text + CStr(Arr(i) + , 把产生的数显示出来 Next i TextBox1.Text = Mid(TextBox1.Text, 1, Len(TextBox1.Text) - 1) 去掉最后的逗号 End Sub,3.2 任务3-1:求一维数组的最小值及其位置一维数组,说明: (1)程序中的语句“Arr(i) = Int(

12、90 * Rnd() + 10)”是把产生的两位随机数赋值给数组元素Arr(i),Arr(i)是对数组元素的引用。 (2)在VB.NET语言中通常并不把数组作为一个整体进行处理,参与运算和数据处理的一般都是数组元素。定义了一个数组后就可以引用它的数组元素了。引用一维数组元素的一般形式如下: 数组名(下标)VB.NET语言规定,数组元素的下标从0开始,因此下标上限为N的数组,具有N+1个元素,下标范围为0N-1。,3.2 任务3-1:求一维数组的最小值及其位置一维数组,例如,有定义语句: Dim A(5) As Integer那么a数组具有元素a(0)、a(1)、a(2)、a(3)、a(4)和a

13、(5)。 值得注意的是,在VB.NET语言中不允许下标越界,也就是说VB.NET对下标越界进行检查,在上述的a数组定义后,a(6)和a(-1)均是不可用的。VB.NET在编译时并不检查数组元素是否越界,而是在运行时检查。 其实数组元素就是一种特殊的变量,在程序中也把它作为变量来使用。凡是能够使用变量的地方均可以使用与变量数据类型相同的数组元素。一个数组元素可以像同类型的普通变量一样参加赋值、运算、输入和输出等操作。,3.2 任务3-1:求一维数组的最小值及其位置一维数组,6运行程序,单击“产生数组”按钮,会发现第一个文本框中出现了10个用“,”分隔开的两位随机数。,3.2 任务3-1:求一维数

14、组的最小值及其位置一维数组,Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim i As Integer Dim Min, Min_i As Integer 分别用来存放最小值和最小值的下标 Min = Arr(0) : Min_i = 0 首先认为第一个元素值最小 For i = 1 To N 该循环找最大值及其下标 If Min Arr(i) Then 如果后面的元素值小 Min = Arr(i) 记下该元素 Min_i

15、 = i 记下该元素的下标 End If Next i TextBox2.Text = Str(Min) 显示最小值 TextBox3.Text = Str(Min_i + 1) 显示最小值的位置(下标加1) End Sub,7编写Button2的Click事件过程代码,如下。,说明:,该程序段是求一维数组的最小值及其位置的算法实现,请读者参照语句的注释认真领会算法的思想。,3.2 任务3-1:求一维数组的最小值及其位置一维数组,8编写“退出”按钮的Click事件过程代码,如下:,Private Sub Button3_Click(ByVal sender As System.Object,

16、ByVal e As System.EventArgs) Handles Button3.Click Application.Exit() 退出应用程序 End Sub,3.2 任务3-1:求一维数组的最小值及其位置一维数组,9运行程序,单击“产生数组”按钮,产生10个随机数并显示出来。单击“求最小数及位置”按钮将找出其中的最小值及位置并在相应的文本框中显示出来。单击“退出”按钮,程序运行结束。 10保存项目,至此本任务全部完成。 注意:在以后的任务中,“退出”按钮的功能说明及代码编写不再叙述。,3.2 任务3-1:求一维数组的最小值及其位置一维数组,归纳说明: 本任务通过一个典型的算法求一维

17、数组的最小值及其位置,讲解了一维数组的声明与使用方法。与变量一样,在使用数组之前,必须声明数组。在VB.NET中,并不整体使用数组,而是使用数组的数组元素,需注意的是数组元素的下标是从0开始的。一个数组元素相当于一个同类型的变量,凡是能够使用变量的地方均可使用同类型的数组元素。,3.2 任务3-1:求一维数组的最小值及其位置一维数组,拓展与提高: 其实在定义数组的时候,还可以通过给数组元素赋初值来给数组分配存储空间并确定数组元素个数及各元素的值。给数组元素赋初值的格式与功能如下。 格式:Declare 数组名() As 数据类型符 =初值列表 功能:定义 一个名为“数组名”的数组,数组元素的数

18、据类型由“数据类型符”确定。该数组的元素个数由“初值列表”中的值的个数指定,“初值列表”是由逗号分隔开来的若干个值,它们作为初值依次赋值给相应的数组元素。,3.2 任务3-1:求一维数组的最小值及其位置一维数组,例如,有下列语句: Dim Class() As Integer = 1, 2, 3, 4 该语句定义了具有4个元素的数组Class,并依次给Class (0)、Class (1)、Class (2)和Class (3)赋初值1、2、3和4。上述语句也可以写成: Dim Class() As Integer = New Integer(3) 1, 2, 3, 4 注意:此处的“New

19、Short(3)”中的3不是元素个数,而是下标上限。,3.2 任务3-1:求一维数组的最小值及其位置一维数组,思考与实训: 1为什么要使用数组? 2如何定义一维数组?如何给一维数组赋初值?数组元素的下标从几开始? 3编写一个程序,把从键盘上输入的10个数保存到一维数组中,然后再把该数组各元素的值在界面上显示出来。 4编写一个程序,把从键盘上输入的10个数保存到一维数组中,把该数组的各元素值反序存放再在界面上显示出来。,3.2 任务3-1:求一维数组的最小值及其位置一维数组,提示:反序存放数组元素可通过下列方法来实现:如图3-4所示,可用两个变量(P1和P2)分别存放第一个元素和最后一个元素的下

20、标,然后交换它们作为下标的数组元素值,再把P1的值加1,P2的值减1,再交换以它们作为下标的数组元素的值直到P1的值等于或大于P2的值时为止。,3.2 任务3-1:求一维数组的最小值及其位置一维数组,3.2 任务3-1:求一维数组的最小值及其位置一维数组,5编写一个程序,随机产生10个两位数并保存到一维数组中,然后求出这些数的平均值并在界面上显示出来。,3.3 任务3-2:方阵转置 二维数组,任务3-2描述: 随机产生一个55的方阵,然后把该方阵转置。所谓方阵的转置就是把方阵的行与列互换。程序的设计界面如图3-5所示。程序运行时单击“生成方阵”按钮将产生一个55的方阵并显示在Label1中,如

21、图3-6所示。单击“转置方阵”按钮并把产生的方阵进行转置,并把转置后的方阵显示在Label2中,如图3-7所示。,3.3 任务3-2:方阵转置 二维数组,图3-5 程序设计界面 图,图3-6 程序运行界面一,图3-7 程序运行界面二,3.3 任务3-2:方阵转置 二维数组,任务分析: 方阵的转置就是以对角线为轴,把对角线之上的元素和对角线之下的元素进行交换,可通过二重循环来实现,二重循环的外层循环对应行(假设为i),内层循环对应列(假设为j),那么在二重循环的循环体内,只需将第i行第j列的数组元素值与第j行第i列的数组元素交换即可,注意由于只需把方阵上半部分和下半部分交换,因此循环变量j的取值

22、范围只能是0到i-1。,3.3 任务3-2:方阵转置 二维数组,任务实现: 1启动VB.NET,新建一个项目,项目类型为“Windows应用程序”,项目的存放位置为“D:VBTASKCH03”,项目名为“Task3_2”。 2把Form1窗体的Text属性值设置为“方阵转置”,把它的Name属性值设置为“frmTranspose”。单击“解决方案资源管理器”中的“Form1.VB”窗体,然后在属性窗口中把它文件名属性设置为“frmTranspose.vb”。然后执行【项目】【Task3_2属性】命令,在出现的“Task3_2属性页”对话框中把“启动对象”设置为“frmTranspose”。,3

23、.3 任务3-2:方阵转置 二维数组,3对照程序设计界面,为窗体添加控件并设置控件的属性。控件的属性设置如表3-2所示。 表3-2 任务3-2控件属性设置及其功能,3.3 任务3-2:方阵转置 二维数组,4在代码窗口中定义常量并定义模块级二维数组,如下。 Const N = 5 方阵的阶数 Dim Arr(N - 1, N - 1) As Integer 该数组用来存放方阵,3.3 任务3-2:方阵转置 二维数组,说明: (1)语句“Dim Arr(N - 1, N - 1) As Integer”的作用是定义了一个名为Arr的N行N列的二维数组,用它来存放NN的方阵。所谓二维数组,就是有两个

24、下标的数组,适合处理如成绩报告表、矩阵等具有行列结构的数据。类似的可以定义三维数组(具有三个下标)和多维数组(具有多个下标)。本章只介绍二维数组。,3.3 任务3-2:方阵转置 二维数组,(2)使用二维数组之前也必须对二维数组进行声明(或称定义)。定义二维数组的语句格式及功能如下。 格式:Declare 数组名(下标1上限,下标2上限) As 数据类型符 功能:定义一个名为“数组名”的二维数组,数组元素的数据类型由“数据类型符”确定。,3.3 任务3-2:方阵转置 二维数组,说明: 数组的各维的下标下限从0开始,因此定义的二维数组的元素个数为:“(下标1上限+1)*(下标2上限+1)”。 “D

25、eclare”与变量定义完全相同。 例如,有下列语句: Dim a(2,3) As Integer 定义了一个二维数组a,该数组的数据类型是integer,具有12个元素。 从逻辑上看,二维数组是一种“行列”结构,由若干行和若干列组成,如上面定义的数组a有3行,每行有4列(4个元素),可以形象地用图3-8来描述。,3.3 任务3-2:方阵转置 二维数组,图3-8 二维数组的逻辑结构 二维数组定义好后就可以引用二维数组的每一个元素了。,3.3 任务3-2:方阵转置 二维数组,5编写“生成方阵”按钮的Click事件过程代码,如下。 Private Sub Button1_Click(ByVal s

26、ender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim i, j As Integer Randomize() 随机数初始化 Label1.Text = For i = 0 To N - 1 该循环给方阵中的每个元素赋值 For j = 0 To N - 1 Arr(i, j) = Int(90 * Rnd() + 10 产生随机数并赋值给数组元素 Label1.Text = Label1.Text + CStr(Arr(i, j) + 显示该元素值 Next j Label1.Text =

27、Label1.Text + Chr(10) + Chr(13) 换行 Next i End Sub,3.3 任务3-2:方阵转置 二维数组,说明: (1)程序中的语句“Arr(i, j) = Int(90 * Rnd() + 10”的作用是产生一个两位随机数并赋值给二维数组Arr的数组元素Arr(i,j),Arr(i,j)是对二维数组元素的引用。引用二维数组元素的一般格式如下: 数组名(下标1,下标2) 需注意的是:各维的下标都是从0开始的。二维数组元素也相当于同类型的一个变量,凡是能够使用变量的地方均可以使用同类型的数组元素。 (2)可以通过Label控件按行显示二维数组,换行是通过连接字符

28、串“Chr(10) + Chr(13)”来实现的。,3.3 任务3-2:方阵转置 二维数组,6编写“转置方阵”按钮的Click事件过程代码,如下。 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim i, j, t As Integer For i = 0 To N 1 该循环用来把Arr数组表示的方阵进行转置 For j = 0 To i 1 注意下标j的范围 t = Arr(i, j) : Arr(i, j) = Arr

29、(j, i) : Arr(j, i) = t Next j Next i Label2.Text = For i = 0 To N - 1 该循环用来显示转置后的方阵 For j = 0 To N - 1 Label2.Text = Label2.Text + CStr(Arr(i, j) + 显示一个元素值 Next j Label2.Text = Label2.Text + Chr(10) + Chr(13) 换行 Next i End Sub 7运行程序,对程序的功能进行测试,测试无误后保存程序。至此本项目全部完成。,3.3 任务3-2:方阵转置 二维数组,归纳说明: 本任务通过方阵转置

30、的实现过程,讲解了二维数组的定义方法与二维数组元素引用的方法。二维数组适合解决具有行列结构的问题,二维数组的输入与输出一般都要用到二重循环。与一维数组一样,二维数组元素的两个下标也是从0开始,二维数组元素相当于同类型的变量。,3.3 任务3-2:方阵转置 二维数组,拓展与提高: 除了可能在运行时给二维数组元素赋值外,还可以在定义二维数组时给二维数组元素赋初值。二维数组赋初值的语句格式及功能如下。 格式:Dim 数组名(,) As 数据类型符= 初值列表1,初值列表2,初值列表n 功能:定义名为“数组名”的二维数组,同时给它的各行赋初值。二维数组的行数由分组的个数确定。,3.3 任务3-2:方阵

31、转置 二维数组,例如,有下列语句: Dim Arr(,) As Short = New Short(2, 3) 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 该语句定义了具有12个元素的二维数组arr,并依次赋初值,初值情况为:Arr(0,0)=1、Arr(0,1)=2、Arr(0,2)=3、Arr(0,3)=4、Arr(1,0)=5、Arr(1,1)=6、Arr(1,2)=7、Arr(1,3)=8、Arr(2,0)=9、Arr(2,1)=10、Arr(2,2)=11、Arr(2,3)=12。 上述语句也可以写成: Dim Arr(,) As Short = 1,

32、 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,3.3 任务3-2:方阵转置 二维数组,思考与实训: 1二维数组通常在什么场合下使用? 2如何定义二维数组并给二维数组元素赋初值? 3编写一个程序实现如下功能:随机产生25个两位随机数并把它们赋值给5行5列的二维数组,然后再按行显示在一个Label控件中。 4在上题的基础上,把数组的第2行和第4行互换,然后把互换后的二维数组显示在一个Label控件中。 5在上题的基础上,再把数组的第1列和第3列互换,然后把互换后的二维数组显示在一个Label控件中。,3.4 任务3-3:求每个学生的多门课的最高成绩及课程序号控件数组,任务

33、3-3描述: 假设一个班有多个学生,每个学生都必须修多门课,请编写一个程序用来求出每个学生所学的各门课中的最高成绩及该门课的序号。程序初始运行情况如图3-9所示,某一次单击“模拟产生学生成绩”按钮后的程序运行情况如图3-10所示,此时单击“求每个学生最高成绩”按钮后的程序运行界面如图3-11所示。,3.4 任务3-3:求每个学生的多门课的最高成绩及课程序号控件数组,图3-9 程序初始运行界面,图3-10 单击“模拟产生学生成绩”按钮后的程序运行界面,图3-11 单击“求每个学生最高成绩”按钮后的程序运行界面,3.4 任务3-3:求每个学生的多门课的最高成绩及课程序号控件数组,任务分析: 该任务

34、的实现要点有两个:一是如何求二维数组的每行最大值及其下标,二是如何把二维数组和一维数组的各数组元素值显示在文本框中。 (1)要求出每个学生的最高成绩和课程序号,可定义一个二维数组用来存放学生的成绩,一行代表一个学生的成绩数据,一列代表一门课程的成绩数据,则该题其实就是求二维数组的每行最大值及其下标。由于对每行都要求出一个最高成绩及其课程序号,因此可定义两个长度与学生人数一致的一维数组分别用来存放每个学生的最高成绩及其课程序号。其实对于每一行而言也相当于求一维数组的最大值及其下标,该算法我们已经熟悉。,3.4 任务3-3:求每个学生的多门课的最高成绩及课程序号控件数组,(2)把学生成绩信息、最高

35、成绩信息、最高成绩课程序号信息显示在界面上的文本框中,可以通过控件数组来实现。定义一个与存放学生成绩信息一样大小的二维文本框控件数组,产生学生成绩时只需把相应的成绩信息赋值给文本框控件数组的相应数组元素Text属性即可。同样也可分别定义两个与学生人数一致的一维文本框控件数组,分别用来显示每个学生的最高分及相应的课程序号,只需在求得最高成绩和课程序号时,把最高成绩和课程序号赋值给相应的文本框控件数组的数组元素的Text属性即可。,3.4 任务3-3:求每个学生的多门课的最高成绩及课程序号控件数组,任务实现: 1启动VB.NET,新建一个项目,项目类型为“Windows应用程序”,项目的存放位置为

36、“D:VBTASKCH03”,项目名为“Task3_3”。 2把Form1窗体的Text属性值设置为“求每个学生的最高成绩和课程序号”,把它的Name属性值设置为“frmScoreProcess1”。单击“解决方案资源管理器”中的“Form1.VB”窗体,然后在属性窗口中把它文件名属性设置为“frmScoreProcess1.vb”。然后执行【项目】【Task3_3属性】命令,在出现的“Task3_3属性页”对话框中把“启动对象”设置为“frmScoreProcess1”。,3.4 任务3-3:求每个学生的多门课的最高成绩及课程序号控件数组,3对照图3-9程序运行界面,为窗体添加三个按钮控件(

37、其它控件由程序自动产生)。控件的属性设置如表3-3所示。 任务3-3控件属性设置及其功能,3.4 任务3-3:求每个学生的多门课的最高成绩及课程序号控件数组,4定义模块级常量及数组,代码如下。 Const M As Integer = 5 人数 Const N As Integer = 5 课程 Dim Score(M - 1, N - 1) As Integer 存放学生的成绩 Dim Max(M - 1) As Integer 存放每个学生的最高成绩 Dim Max_i(M - 1) As Integer 存放每个学生最高成绩的课程序号 Dim txtScore(M - 1, N - 1)

38、 As TextBox 显示成绩数组中的数据,即显示学生成绩 Dim txtMax(M - 1) As TextBox 显示各学生最高成绩的文本框控件数组 Dim txtMax_i(M - 1) As TextBox 显示各学生最高成绩课程序号的文本框控件数组,3.4 任务3-3:求每个学生的多门课的最高成绩及课程序号控件数组,(1)程序中的语句“Dim txtScore(M - 1, N - 1) As TextBox”定义的是一个二维控件数组,控件类型为文本框,用来显示学生成绩信息。控件数组与普通数组类似,下标也是从0开始,可以通过下标访问它的每一个元素。控件数组的每一个元素相当于同类型的

39、控件,可以通过程序访问或设置它的属性,调用它的方法,响应发生的事件等。 (2)程序中的语句“Dim txtMax(M - 1) As TextBox”和“Dim txtMax_i(M - 1) As TextBox”分别定义了两个一维文本框控件数组,用来显示每个学生的最高分和课程序号。,3.4 任务3-3:求每个学生的多门课的最高成绩及课程序号控件数组,5编写窗体的Load事件过程代码,如下。 Private Sub frmScoreProcess1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles

40、 MyBase.Load Dim i As Integer, j As Integer Dim LeftLen As Integer 每行文本框控件数组的第一个元素离左边界的距离 Dim TopLen As Integer 控件数组第一行数组元素离上边界的距离 Dim lxs(M - 1) As Label 显示行号 Dim lblMax(M - 1) As Label 显示“最高分”提示 Dim lblMax_i(M - 1) As Label 显示“课程序号”提示 LeftLen = 120 : TopLen = 10 Randomize() 随机数初始化 For i = 0 To M -

41、 1 该二重循环的作用是产生二维文本框控件数组并在窗体上显示 lxs(i) = New Label 产生一个标签控件数组元素,3.4 任务3-3:求每个学生的多门课的最高成绩及课程序号控件数组,lxs(i).Width = 110 : lxs(i).Height = 30 设置标签控件数组元素的大小 lxs(i).Left = 10 : lxs(i).Top = TopLen + i * 32 设置标签控件数组元素的位置 lxs(i).Parent = Me : lxs(i).Visible = True 设置标签控件数组元素的容量并使之可见 lxs(i).Text = No. & i + 1

42、 & 学生成绩: For j = 0 To N - 1 产生显示成绩的二维文本框控件数组各数组元素 txtScore(i, j) = New TextBox 产生一个文本框控件数组元素 设置控件数组元素的宽度和高度 txtScore(i, j).Width = 30 : txtScore(i, j).Height = 30 设置控件数组元素的位置 txtScore(i, j).Left = LeftLen + j * 40 : txtScore(i, j).Top = TopLen + i * 32 设置控件的容器并使之可见 txtScore(i, j).Parent = Me : txtSc

43、ore(i, j).Visible = True Next j Next i 在此接着输入程序代码 End Sub,3.4 任务3-3:求每个学生的多门课的最高成绩及课程序号控件数组,说明: (1)程序中的语句“Dim lxs(M - 1) As Label”、“Dim lblMax(M - 1) As Label”和“Dim lblMax_i(M - 1) As Label”定义了三个一维标签数组,分别用来显示“No.x 学生成绩”、“最高成绩”、“课程序号”等提示信息。 (2)程序中动态创建控件的一般格式如下: 格式:控件变量名=New 控件类型 作用:创建一个由控件类型指定类型的控件并赋

44、值给控件变量名,然后就可以使用控件变量名访问该控件。 控件创建后可以在程序中使用控件变量名访问它的属性、调用它的方法等,若要把控件显示出来需要设置它的两个属性:Parent和Visible。Parent属性用来指定该控件的容器,即该控件显示在哪个控件中,Visible属性应设置为True,使该控件可以看到。,3.4 任务3-3:求每个学生的多门课的最高成绩及课程序号控件数组,6运行程序,程序的运行界面如图3-12所示。,3.4 任务3-3:求每个学生的多门课的最高成绩及课程序号控件数组,7在语句“在此接着输入程序代码”后面接着添加如下程序代码,程序代码的功能与上述代码基本相同,请读者看注释。

45、For i = 0 To M - 1 显示最高分提示标签 lblMax(i) = New Label 产生一个标签控件数组元素 lblMax(i).Width = 50 : lblMax(i).Height = 30 设置标签控件数组元素的大小 lblMax(i).Left = 320 : lblMax(i).Top=TopLen+i * 32 设置标签控件数组元素的位置 设置标签控件数组元素的容量并使之可见 lblMax(i).Parent = Me : lblMax(i).Visible = True lblMax(i).Text = 最高分: Next i,3.4 任务3-3:求每个学生

46、的多门课的最高成绩及课程序号控件数组,For i = 0 To M - 1 产生显示最高分的文本框控件数组并显示出来 txtMax(i) = New TextBox 产生一个文本框控件数组元素 txtMax(i).Width = 30 : txtMax(i).Height = 30 设置文本框控件数组元素的大小 设置文本框控件数组元素的位置 txtMax(i).Left = 370 : txtMax(i).Top = TopLen + i * 32 设置文本框控件数组元素的容量并使之可见 txtMax(i).Parent = Me : txtMax(i).Visible = True Next

47、 i For i = 0 To M - 1 显示课程序号提示标签 lblMax_i(i) = New Label 产生一个标签控件数组元素 lblMax_i(i).Width = 70 : lblMax_i(i).Height = 30 设置标签控件数组元素的大小 设置标签控件数组元素的位置,3.4 任务3-3:求每个学生的多门课的最高成绩及课程序号控件数组,lblMax_i(i).Left = 410 : lblMax_i(i).Top = TopLen + i * 32 设置标签控件数组元素的容量并使之可见 lblMax_i(i).Parent = Me : lblMax_i(i).Vis

48、ible = True lblMax_i(i).Text = 课程序号: Next i For i = 0 To M - 1 产生显示课程序号的文本框控件数组并显示出来 txtMax_i(i) = New TextBox 产生一个文本框控件数组元素 txtMax_i(i).Width = 30 : txtMax_i(i).Height = 30 设置文本框控件数组元素的大小 设置文本框控件数组元素的位置 txtMax_i(i).Left = 480 : txtMax_i(i).Top = TopLen + i * 32 设置文本框控件数组元素的容量并使之可见 txtMax_i(i).Paren

49、t = Me : txtMax_i(i).Visible = True Next i,3.4 任务3-3:求每个学生的多门课的最高成绩及课程序号控件数组,8运行程序,程序的运行界面如图3-9所示。 9编写“模拟产生学生成绩”按钮的Click事件过程代码,如下。 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim i, j As Integer 该二重循环的作用是产生0100之间的随机数,作为模拟成绩赋值给存放成绩的数组 Fo

50、r i = 0 To M - 1 For j = 0 To N - 1 Score(i, j) = Int(101 * Rnd() 产生模拟成绩并赋值给对应数据元素 txtScore(i, j).Text = CStr(Score(i, j) 在界面上显示产生的成绩 Next j Next i End Sub,3.4 任务3-3:求每个学生的多门课的最高成绩及课程序号控件数组,10运行程序,单击“模拟产生学生成绩”按钮,程序的运行界面如图3-10所示。 11编写“模拟产生学生成绩”按钮的Click事件过程代码,如下。 Private Sub Button2_Click(ByVal sender

51、 As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim i, j As Integer For i = 0 To M - 1 外层循环对应学生 Max(i) = Score(i, 0) : Max_i(i) = 0 首先认为该学生的第一门课程成绩最高,记下它 用记下的最高分与后面的成绩比,若后面的成绩高,则记下高的成绩和下标 For j = 1 To N - 1 If Max(i) Score(i, j) Then Max(i) = Score(i, j) : Max_i(i) = j End If N

52、ext j,3.4 任务3-3:求每个学生的多门课的最高成绩及课程序号控件数组,12运行程序,单击“模拟产生学生成绩”按钮后,再单击“求每个学生最高成绩”按钮,程序的运行界面如图3-11如示。 13编写“退出”按钮的Click事件过程代码并进行测试,保存项目,本任务到此全部完成。 归纳说明: 本任务通过动态产生文本框显示多个学生的多门课成绩、每个学生的最高成绩和最高成绩的课程序号讲解了控件数组的定义方法、控件数组元素的引用方法等,利用控件数组可使用程序界面设计更加灵活。另外本任务还讲解了一个非常典型的二维数组算法求每行的最大值及其下标,读者应掌握该算法的实现过程。,3.4 任务3-3:求每个学

53、生的多门课的最高成绩及课程序号控件数组,拓展与提高: 控件数组和动态数组是数组中两个较难的部分,通过本任务读者学会了控件数组的使用方法。下面将讲述与动态数组有关的知识,所谓动态数组就是其大小可以变化的数组。 在VB.NET中,所有数组都是动态数组。在声明一个数组时,可以指定它的长度,但这个长度只是初始长度,在程序中可以使用ReDim语句来改变这个长度。ReDim语句的格式与功能如下。 格式:ReDim 数组名(下标1上限,下标2上限) 功能:重新定义由“数组名”指定的数组的大小。,3.4 任务3-3:求每个学生的多门课的最高成绩及课程序号控件数组,例如,有下列语句: Dim Arr(10) A

54、s Integer ReDim Arr(15) 后面的ReDim语句把原来的具有10个元素的数组Arr重新定义为具有15个元素。 使用ReDim语句,需注意以下几个问题: (1)使用ReDim语句重新定义一个数组时,不能改变数组的维数。例如,下面的ReDim语句是非法的。 Dim Arr(10) As Integer ReDim Arr(3,5),3.4 任务3-3:求每个学生的多门课的最高成绩及课程序号控件数组,(2)使用ReDim语句重新定义一个数组时,也不能改变数组的类型,除非数组类型定义为Object类型。例如,下面的ReDim语句是非法的。 Dim Arr(10) As Intege

55、r ReDim Arr(10) As Double (3)使用ReDim语句重新定义一个数组时,数组原有的值通常会丢失,但可在ReDim语句中,使用Preserve关键字来保持数组原有的值。例如: Dim Arr(3) As Integer For I=0 To 3 Arr(I)=I 各元素的值为0,1,2,3 Next I ReDim Preserve Arr(5) 各元素的值为0,1,2,3,0,0。如果没有Preserve关键字,则所有元素值均为0,3.4 任务3-3:求每个学生的多门课的最高成绩及课程序号控件数组,(4)如果在ReDim语句中使用Preserve关键字,那么只能改变数组

56、最后一维的大小。例如,下列语句是合法的: Dim Arr2(4,5) As Integer ReDim Preserve Arr2(4,10) 只改变最后一维的大小,是合法的 又如,以下语句是不合法的: Dim Arr2(4,5) As Integer ReDim Preserve Arr2(5,10) 试图改变两维的长度,是不合法的,3.4 任务3-3:求每个学生的多门课的最高成绩及课程序号控件数组,思考与实训: 1什么是控件数组?使用控件数组有什么好处? 2如何定义一个控件数组?如何把一个控件数组的数组元素显示在窗体上? 3什么是动态数组? 4编写程序统计45二维数组中奇数的个数和偶数的个

57、数。要求:数组元素的值随机产生,把数组元素的值通过文本框控件数组显示在界面上,求得的奇数的个数和偶数的个数也要通过动态产生的文本框显示出来。 5编写程序求二维数组中所有元素的最小值及其下标。要求:数组元素的值随机产生,把数组元素的值通过文本框控件数组显示在界面上,求得的所有元素的最小值及其下标也要通过动态产生的文本框显示出来。,3.5 任务3-4:一维数组排序算法演示程序选择法排序与冒泡法排序,任务3-4描述: 编写一个一维数组排序算法演示程序,能够演示出“选择法排序”和“冒泡法排序”的排序过程。程序的设计界面如图3-13所示,程序刚运行时的界面如图3-14所示,单击“产生数组”按钮将产生随机

58、数组元素的值并显示在第一行的文本框中,单击“选择法排序”将演示出选择法排序的过程,如图3-15所示。单击“产生数组”按钮后,再,单击“冒泡法排序”将演示出冒泡法排序的过程,如图3-16所示。,3.5 任务3-4:一维数组排序算法演示程序选择法排序与冒泡法排序,图3-13 程序设计界面,图3-14 程序启动时的运行界面,3.5 任务3-4:一维数组排序算法演示程序选择法排序与冒泡法排序,图3-15 “选择法排序”的演示界面,图3-16 “冒泡法排序”时演示界面,3.5 任务3-4:一维数组排序算法演示程序选择法排序与冒泡法排序,任务分析: 实现本任务,需要解决以下几个问题:一是“选择法排序”的算法思想,二是“冒泡法排序”的算法思想,三是“选择法排序”演示方法,四是“冒泡法排序”演示方法。“选择法排序”的算法思想和“冒泡法排序”的算法思想将在“任务实现”中加以讲解。 演示“选择法排序”过程可采用如下方法:假设有N个数要排序,可定义一个NN的二维文本框数组,把要排序的数组元素值首先显示在二维文本框控件数组的第一行中,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论