《VBNET程序设计实用教程3.ppt》由会员分享,可在线阅读,更多相关《VBNET程序设计实用教程3.ppt(114页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、VB.NETVB.NET清华大学出版社清华大学出版社Visual Basic.NETVisual Basic.NET程序设计实用教程程序设计实用教程第3章 数 组SGD本章任务:本章任务:方阵转置方阵转置 求一维数组的最小值及其位置求一维数组的最小值及其位置 求矩阵的各行最小值及位置求矩阵的各行最小值及位置求每个学生的平均成绩并按平均成求每个学生的平均成绩并按平均成绩排序绩排序 一维数组排序算法演示一维数组排序算法演示本本章章任任务务SGD 本章要点:本章要点:本章要点:本章要点:数组的概念数组的概念 二维数组的定义、赋初值与数组元二维数组的定义、赋初值与数组元 素的引用素的引用与数组相关的语
2、句、函数的使用与数组相关的语句、函数的使用 控件(对象)数组的定义与使用控件(对象)数组的定义与使用本本章章要要点点一维数组的定义、赋初值与一维数组的定义、赋初值与数组元素的引用数组元素的引用SGD3.1 数组的概念数组的概念 u在前面的章节中,程序中要存放或处理一在前面的章节中,程序中要存放或处理一个数据,首先应声明一个变量,这在只处理少个数据,首先应声明一个变量,这在只处理少量数据的程序中是可以的,但若程序需处理很量数据的程序中是可以的,但若程序需处理很多个数据,特别是同类数据,使用变量实现将多个数据,特别是同类数据,使用变量实现将显得比较麻烦,甚至不可能完成需要的功能。显得比较麻烦,甚至
3、不可能完成需要的功能。如某次期中考试后,需要用计算机处理学生的如某次期中考试后,需要用计算机处理学生的信息学课程成绩,假设全年级为信息学课程成绩,假设全年级为200人,若用人,若用变量来记录学生的成绩,不但需要变量来记录学生的成绩,不但需要200个变量,个变量,而且在编程过程中程序员还需要记住每个变量而且在编程过程中程序员还需要记住每个变量与学生的对应关系,显然是极不方便的。与学生的对应关系,显然是极不方便的。SGD3.1 数组的概念数组的概念u为了解决该问题,在为了解决该问题,在VB.NET中提供了一种名中提供了一种名叫叫“数组数组”的数据结构,利用它可以方便地的数据结构,利用它可以方便地处
4、理像考试成绩这种具有多个相同类型的一处理像考试成绩这种具有多个相同类型的一批数据。可以把数组看成是很多个变量的集批数据。可以把数组看成是很多个变量的集合,这些变量具有相同的类型,它们在内存合,这些变量具有相同的类型,它们在内存中是连续存放的,这些变量均具有相同的名中是连续存放的,这些变量均具有相同的名称,并且可以通过下标相互区分,每一个这称,并且可以通过下标相互区分,每一个这样的变量我们把它称为数组元素。由于在程样的变量我们把它称为数组元素。由于在程序中数组元素是通过下标相互区分的,而下序中数组元素是通过下标相互区分的,而下标又可以用变量或表达式来表示,所以为程标又可以用变量或表达式来表示,所
5、以为程序员循环处理成批数据带来了方便。序员循环处理成批数据带来了方便。SGD3.1 数组的概念数组的概念 如假设存放如假设存放200个学生信息学成绩的数组名为个学生信息学成绩的数组名为InformationScore,要求出所有学生的信息学的平均分,可使用下列语句:要求出所有学生的信息学的平均分,可使用下列语句:u Dim AvgInformationScore As Singleu Dim InformationScore(199)As Integeru AvgInformationScore=0u For i=0 To 199 Step 1u AvgInformationScore=Avg
6、InformationScore+InformationScore(i)u Next Iu AvgInformationScore=AvgInformationScore/300 读者不妨试着使用变量来求信息学课程的平均分,会发现程序编起来非读者不妨试着使用变量来求信息学课程的平均分,会发现程序编起来非常麻烦。可见与变量相比,使用数组来处理同类的多个数据,优势十分常麻烦。可见与变量相比,使用数组来处理同类的多个数据,优势十分明显。明显。SGD3.2 任务3-1:求一维数组的最小值及其位置 一维数组 任务任务3-1描述:描述:编写一个程序,用来从随机产生编写一个程序,用来从随机产生10个两位数找
7、个两位数找出其中的最小数及最小数的位置。程序的设计界出其中的最小数及最小数的位置。程序的设计界面如图面如图3-1所示,程序运行时,单击所示,程序运行时,单击“产生数组产生数组”按钮,将产生按钮,将产生10个两位数并显示在第一个文本个两位数并显示在第一个文本框中,单击框中,单击“求最小数及位置求最小数及位置”按钮将从产生的按钮将从产生的10个两位数中找出最小数及其位置并显示在第二个两位数中找出最小数及其位置并显示在第二和第三个文本框中,如图和第三个文本框中,如图3-2所示所示:SGD3.2 任务3-1:求一维数组的最小值及其位置一维数组u图图3-2 SGD可使用一个一维数组来存放一批随机产生的可
8、使用一个一维数组来存放一批随机产生的数,再设两个变量,一个用来记下数组中的最数,再设两个变量,一个用来记下数组中的最小数,一个用来记下最小数的下标。首先认为小数,一个用来记下最小数的下标。首先认为第一个数最小,记下它的值和下标;然后用记第一个数最小,记下它的值和下标;然后用记下的最小数和后面的数比较,如果后面的数小,下的最小数和后面的数比较,如果后面的数小,则用记最小数的变量记下该数,用记最小数下则用记最小数的变量记下该数,用记最小数下标的变量记下该数的下标;用记下的最小数再标的变量记下该数的下标;用记下的最小数再与后面的数比较与后面的数比较直到所有的数都比较完毕,直到所有的数都比较完毕,记最
9、小数变量中的值就是最小数,记最小数下记最小数变量中的值就是最小数,记最小数下标的变量中的值就是最小数的下标,最小数下标的变量中的值就是最小数的下标,最小数下标(从标(从0开始)加开始)加1就是最小数的位置。就是最小数的位置。任务分析:任务分析:3.2 任务3-1:求一维数组的最小值及其位置一维数组SGD3.2 任务3-1:求一维数组的最小值及其位置一维数组任务实现:任务实现:1启动启动VB.NET,新建一个项目,项目类型为,新建一个项目,项目类型为“Windows应用程序应用程序”,项目的存放位置为,项目的存放位置为“D:VBTASKCH03”,项目名为,项目名为“Task3_2”。2把把Fo
10、rm1窗体的窗体的Text属性值设置为属性值设置为“方阵转置方阵转置”,把,把它的它的Name属性值设置为属性值设置为“frmTranspose”。单击。单击“解决解决方案资源管理器方案资源管理器”中的中的“Form1.VB”窗体,然后在属性窗体,然后在属性窗口中把它文件名属性设置为窗口中把它文件名属性设置为“frmTranspose.vb”。然。然后执行后执行【项目项目】【Task3_2属性属性】命令,在出现的命令,在出现的“Task3_2属性页属性页”对话框中把对话框中把“启动对象启动对象”设置为设置为“frmTranspose”。SGD3.2 任务3-1:求一维数组的最小值及其位置一维数
11、组3对照程序设计界面,为窗体添加控件并设置控对照程序设计界面,为窗体添加控件并设置控件的属性。控件的属性设置如表件的属性。控件的属性设置如表3-2所示。所示。表表3-2 任务任务3-2控件属性设置及其功能控件属性设置及其功能控件名控件名属性名属性名属性值属性值说明说明Label1Label1BorderStyleBorderStyleFixedSingleFixedSingle显示生成的方阵显示生成的方阵Label2Label2BorderStyleBorderStyleFixedSingleFixedSingle显示转置后的方阵显示转置后的方阵Button1Button1TextText 生
12、成方阵生成方阵单击它将生成方阵并单击它将生成方阵并显示出来显示出来Button2Button2TextText 转置方阵转置方阵单击它将把方阵转置单击它将把方阵转置并显示出来并显示出来SGD3.2 任务3-1:求一维数组的最小值及其位置一维数组4在在代代码码窗窗口口中中定定义义常常量量并并定定义义模模块块级级二二维维数数组,如下。组,如下。Const N=5 方阵的阶数方阵的阶数Dim Arr(N-1,N-1)As Integer 该数数组用用来来存放方存放方阵SGD3.2 任务3-1:求一维数组的最小值及其位置一维数组说明:说明:(1)语句)语句“DimArr(N-1,N-1)AsInteg
13、er”的作用是定义了一个名为的作用是定义了一个名为Arr的的N行行N列的二维数组,用它来存放列的二维数组,用它来存放NN的方阵。的方阵。所谓二维数组,就是有两个下标的数组,适所谓二维数组,就是有两个下标的数组,适合处理如成绩报告表、矩阵等具有行列结构合处理如成绩报告表、矩阵等具有行列结构的数据。类似的可以定义三维数组(具有三的数据。类似的可以定义三维数组(具有三个下标)和多维数组(具有多个下标)。本个下标)和多维数组(具有多个下标)。本章只介绍二维数组。章只介绍二维数组。SGD3.2 任务3-1:求一维数组的最小值及其位置一维数组(2)使用二维数组之前也必须对二)使用二维数组之前也必须对二维数
14、组进行声明(或称定义)。定维数组进行声明(或称定义)。定义二维数组的语句格式及功能如下。义二维数组的语句格式及功能如下。格式格式:Declare数组名数组名(下标下标1上限上限,下标下标2上限上限)As数据类型符数据类型符功能功能:定义一个名为:定义一个名为“数组名数组名”的的二维数组,数组元素的数据类型由二维数组,数组元素的数据类型由“数据类型符数据类型符”确定。确定。SGD3.2 任务3-1:求一维数组的最小值及其位置一维数组“Declare”可以是可以是Dim、Static、Public、Protected、Friend、Protected和和Private等。数组的每维的下标下限等。数
15、组的每维的下标下限均为均为0,且不可以改变,且不可以改变,VB.NET不支不支持持OptionBase语句。如果不指定语句。如果不指定“数数据类型符据类型符”,则默认为,则默认为Object型的数组。型的数组。说明:说明:SGD3.2 任务3-1:求一维数组的最小值及其位置一维数组 Dima(9)AsInteger;/定义了一个数组定义了一个数组a,该数组的数据类型是,该数组的数据类型是integer,具有,具有10个个元素。第一个元素为元素。第一个元素为a(0),最后一个元素,最后一个元素为为a(9)数组定义后,将占用连续的存储空数组定义后,将占用连续的存储空间,其占用存储空间大小为间,其占
16、用存储空间大小为“长度长度*数据数据类型所占用的字节数类型所占用的字节数”。例如对于上面定。例如对于上面定义的义的a数组,在程序运行时,系统将为该数组,在程序运行时,系统将为该数组分配一个连续的数组分配一个连续的40字节的存储单元,字节的存储单元,用来存放该数组的每一个元素,该数组占用来存放该数组的每一个元素,该数组占用存储空间的情况如图用存储空间的情况如图3-3所示。所示。例如,有下列语句:例如,有下列语句:SGD3.2 任务3-1:求一维数组的最小值及其位置一维数组a(0)a(1)a(2)a(3)a(4)a(5)a(6)a(7)a(8)a(9)每个元素占每个元素占4 4个字节,整个数组占个
17、字节,整个数组占4040个字节个字节图图3-3数组在内存中的存储情况示意数组在内存中的存储情况示意SGD3.2 任务3-1:求一维数组的最小值及其位置一维数组u5编写编写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=清空显示数的文本框清空显示数的文
18、本框 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 SubSGD3.2 任务3-1:求一维数组的最小值及其位置一维数组u说明:说明:
19、(1)程序中的语句)程序中的语句“Arr(i)=Int(90*Rnd()+10)”是把产生的两位随机数赋值给数是把产生的两位随机数赋值给数组元素组元素Arr(i),Arr(i)是对数组元素的引用。是对数组元素的引用。(2)在)在VB.NET语言中通常并不把数组作为语言中通常并不把数组作为一个整体进行处理,参与运算和数据处理的一个整体进行处理,参与运算和数据处理的一般都是数组元素。定义了一个数组后就可一般都是数组元素。定义了一个数组后就可以引用它的数组元素了。引用一维数组元素以引用它的数组元素了。引用一维数组元素的一般形式如下:的一般形式如下:数组名(下标)数组名(下标)VB.NET语言规定,数
20、组元语言规定,数组元素的下标从素的下标从0开始,因此下标上限为开始,因此下标上限为N的数组,的数组,具有具有N+1个元素,下标范围为个元素,下标范围为0N-1。SGD3.2 任务3-1:求一维数组的最小值及其位置一维数组u例如,有定义语句:例如,有定义语句:DimA(5)AsInteger那么那么a数组具有元素数组具有元素a(0)、a(1)、a(2)、a(3)、a(4)和和a(5)。值得注意的是,在值得注意的是,在VB.NET语言中不允许下标越界,语言中不允许下标越界,也就是说也就是说VB.NET对下标越界进行检查,在上述的对下标越界进行检查,在上述的a数数组定义后,组定义后,a(6)和和a(
21、-1)均是不可用的。均是不可用的。VB.NET在编在编译时并不检查数组元素是否越界,而是在运行时检查。译时并不检查数组元素是否越界,而是在运行时检查。其实数组元素就是一种特殊的变量,在程序中也把其实数组元素就是一种特殊的变量,在程序中也把它作为变量来使用。凡是能够使用变量的地方均可以它作为变量来使用。凡是能够使用变量的地方均可以使用与变量数据类型相同的数组元素。一个数组元素使用与变量数据类型相同的数组元素。一个数组元素可以像同类型的普通变量一样参加赋值、运算、输入可以像同类型的普通变量一样参加赋值、运算、输入和输出等操作。和输出等操作。SGD3.2 任务3-1:求一维数组的最小值及其位置一维数
22、组u6运行程序,单击运行程序,单击“产生数组产生数组”按钮按钮,会发现第一个文本框中会发现第一个文本框中出现了出现了10个用个用“,”分隔开的两分隔开的两位随机数。位随机数。SGD3.2 任务3-1:求一维数组的最小值及其位置一维数组PrivateSubButton2_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton2.ClickDimiAsIntegerDimMin,Min_iAsInteger分别用来存放最小值和最小值的下标分别用来存放最小值和最小值的下标Min=Arr(0):Min_i=0首先认
23、为第一个元素值最小首先认为第一个元素值最小Fori=1ToN该循环找最大值及其下标该循环找最大值及其下标IfMinArr(i)Then如果后面的元素值小如果后面的元素值小Min=Arr(i)记下该元素记下该元素Min_i=i记下该元素的下标记下该元素的下标EndIfNextiTextBox2.Text=Str(Min)显示最小值显示最小值TextBox3.Text=Str(Min_i+1)显示最小值的位置(下标加显示最小值的位置(下标加1)EndSubu7编写编写Button2的的Click事件过程代码,如下。事件过程代码,如下。SGDu说明:说明:该程序段是求一维数组的最小值该程序段是求一维
24、数组的最小值及其位置的算法实现,请读者参照及其位置的算法实现,请读者参照语句的注释认真领会算法的思想。语句的注释认真领会算法的思想。SGD3.2 任务3-1:求一维数组的最小值及其位置一维数组u8编写编写“退出退出”按钮的按钮的Click事件事件过程代码,如下过程代码,如下:PrivateSubButton3_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton3.ClickApplication.Exit()退出应用程序退出应用程序EndSubSGD3.2 任务3-1:求一维数组的最小值及其位置一维数组
25、u9运行程序,单击运行程序,单击“产生数组产生数组”按钮,按钮,产生产生10个随机数并显示出来。单击个随机数并显示出来。单击“求求最小数及位置最小数及位置”按钮将找出其中的最小按钮将找出其中的最小值及位置并在相应的文本框中显示出来。值及位置并在相应的文本框中显示出来。单击单击“退出退出”按钮,程序运行结束。按钮,程序运行结束。u10保存项目,至此本任务全部完成。保存项目,至此本任务全部完成。注意:在以后的任务中,注意:在以后的任务中,“退出退出”按钮的按钮的功能说明及代码编写不再叙述。功能说明及代码编写不再叙述。SGD3.2 任务3-1:求一维数组的最小值及其位置一维数组u归纳说明:归纳说明:
26、本任务通过一个典型的算法本任务通过一个典型的算法求求一维数组的最小值及其位置,讲解了一一维数组的最小值及其位置,讲解了一维数组的声明与使用方法。与变量一样,维数组的声明与使用方法。与变量一样,在使用数组之前,必须声明数组。在在使用数组之前,必须声明数组。在VB.NET中,并不整体使用数组,而是中,并不整体使用数组,而是使用数组的数组元素,需注意的是数组使用数组的数组元素,需注意的是数组元素的下标是从元素的下标是从0开始的。一个数组元开始的。一个数组元素相当于一个同类型的变量,凡是能够素相当于一个同类型的变量,凡是能够使用变量的地方均可使用同类型的数组使用变量的地方均可使用同类型的数组元素。元素
27、。SGD3.2 任务3-1:求一维数组的最小值及其位置一维数组u拓展与提高:拓展与提高:其实在定义数组的时候,还可以通过给数其实在定义数组的时候,还可以通过给数组元素赋初值来给数组分配存储空间并确定组元素赋初值来给数组分配存储空间并确定数组元素个数及各元素的值。给数组元素赋数组元素个数及各元素的值。给数组元素赋初值的格式与功能如下。初值的格式与功能如下。格式格式:Declare数组名数组名()As数据类型符数据类型符=初值列表初值列表功能功能:定义:定义一个名为一个名为“数组名数组名”的数组,的数组,数组元素的数据类型由数组元素的数据类型由“数据类型符数据类型符”确定。确定。该数组的元素个数由
28、该数组的元素个数由“初值列表初值列表”中的值的中的值的个数指定,个数指定,“初值列表初值列表”是由逗号分隔开来是由逗号分隔开来的若干个值,它们作为初值依次赋值给相应的若干个值,它们作为初值依次赋值给相应的数组元素。的数组元素。SGD3.2 任务3-1:求一维数组的最小值及其位置一维数组u例如,有下列语句:例如,有下列语句:DimClass()AsInteger=1,2,3,4该语句定义了具有该语句定义了具有4个元素的数组个元素的数组Class,并依次,并依次给给Class(0)、Class(1)、Class(2)和和Class(3)赋赋初值初值1、2、3和和4。上述语句也可以写成:。上述语句也
29、可以写成:DimClass()AsInteger=NewInteger(3)1,2,3,4注意注意:此处的:此处的“NewShort(3)”中的中的3不是元素个不是元素个数,而是下标上限。数,而是下标上限。SGD3.2 任务3-1:求一维数组的最小值及其位置一维数组u思考与实训:思考与实训:u1为什么要使用数组?为什么要使用数组?u2如何定义一维数组?如何给一维数组赋初如何定义一维数组?如何给一维数组赋初值?数组元素的下标从几开始?值?数组元素的下标从几开始?u3编写一个程序,把从键盘上输入的编写一个程序,把从键盘上输入的10个数个数保存到一维数组中,然后再把该数组各元素保存到一维数组中,然后
30、再把该数组各元素的值在界面上显示出来。的值在界面上显示出来。u4编写一个程序,把从键盘上输入的编写一个程序,把从键盘上输入的10个数个数保存到一维数组中,把该数组的各元素值反保存到一维数组中,把该数组的各元素值反序存放再在界面上显示出来。序存放再在界面上显示出来。SGD3.2 任务3-1:求一维数组的最小值及其位置一维数组u提示提示:反序存放数组元素可通过下列方:反序存放数组元素可通过下列方法来实现:如图法来实现:如图3-4所示,可用两个变量所示,可用两个变量(P1和和P2)分别存放第一个元素和最后)分别存放第一个元素和最后一个元素的下标,然后交换它们作为下一个元素的下标,然后交换它们作为下标
31、的数组元素值,再把标的数组元素值,再把P1的值加的值加1,P2的值减的值减1,再交换以它们作为下标的数,再交换以它们作为下标的数组元素的值组元素的值直到直到P1的值等于或大于的值等于或大于P2的值时为止。的值时为止。SGD3.2 任务3-1:求一维数组的最小值及其位置一维数组P1P2直到直到P1和P2作为下标的元素交换P1加1,P2减1,再交换图图3-4 一维数组反序存放示意一维数组反序存放示意图图SGD3.2 任务3-1:求一维数组的最小值及其位置一维数组u5编写一个程序,随机产生编写一个程序,随机产生10个两位数并保存到一维数组中,个两位数并保存到一维数组中,然后求出这些数的平均值并在然后
32、求出这些数的平均值并在界面上显示出来。界面上显示出来。SGD3.3 任务3-2:方阵转置 二维数组u任务任务3-2描述:描述:随机产生一个随机产生一个55的方阵,然后把该方阵的方阵,然后把该方阵转置。所谓方阵的转置就是把方阵的行转置。所谓方阵的转置就是把方阵的行与列互换。程序的设计界面如图与列互换。程序的设计界面如图3-5所示。所示。程序运行时单击程序运行时单击“生成方阵生成方阵”按钮将产按钮将产生一个生一个55的方阵并显示在的方阵并显示在Label1中,中,如图如图3-6所示。单击所示。单击“转置方阵转置方阵”按钮并按钮并把产生的方阵进行转置,并把转置后的把产生的方阵进行转置,并把转置后的方
33、阵显示在方阵显示在Label2中,如图中,如图3-7所示。所示。SGD3.3 任务3-2:方阵转置 二维数组 图图3-5 程序设计界面程序设计界面 图图图图3-6 程序运行界面一程序运行界面一图图3-7 程序运行界面二程序运行界面二 SGD3.3 任务3-2:方阵转置 二维数组u任务分析:任务分析:方阵的转置就是以对角线为轴,把对角线之上方阵的转置就是以对角线为轴,把对角线之上的元素和对角线之下的元素进行交换,可通的元素和对角线之下的元素进行交换,可通过二重循环来实现,二重循环的外层循环对过二重循环来实现,二重循环的外层循环对应行(假设为应行(假设为i),内层循环对应列(假设为),内层循环对应
34、列(假设为j),那么在二重循环的循环体内,只需将第),那么在二重循环的循环体内,只需将第i行第行第j列的数组元素值与第列的数组元素值与第j行第行第i列的数组元素列的数组元素交换即可,注意由于只需把方阵上半部分和交换即可,注意由于只需把方阵上半部分和下半部分交换,因此循环变量下半部分交换,因此循环变量j的取值范围只的取值范围只能是能是0到到i-1。SGD3.3 任务3-2:方阵转置 二维数组u任务实现:任务实现:u1启动启动VB.NET,新建一个项目,项目类型,新建一个项目,项目类型为为“Windows应用程序应用程序”,项目的存放位置为,项目的存放位置为“D:VBTASKCH03”,项目名为,
35、项目名为“Task3_2”。u2把把Form1窗体的窗体的Text属性值设置为属性值设置为“方阵方阵转置转置”,把它的,把它的Name属性值设置为属性值设置为“frmTranspose”。单击。单击“解决方案资源管解决方案资源管理器理器”中的中的“Form1.VB”窗体,然后在属性窗体,然后在属性窗口中把它文件名属性设置为窗口中把它文件名属性设置为“frmTranspose.vb”。然后执行。然后执行【项目项目】【Task3_2属性属性】命令,在出现的命令,在出现的“Task3_2属性页属性页”对话框中把对话框中把“启动对象启动对象”设置为设置为“frmTranspose”。SGD3.3 任务
36、3-2:方阵转置 二维数组u3对照程序设计界面,为窗体添加控件并设置控件对照程序设计界面,为窗体添加控件并设置控件的属性。控件的属性设置如表的属性。控件的属性设置如表3-2所示。所示。表表3-2任务任务3-2控件属性设置及其功能控件属性设置及其功能控件名控件名 属性名属性名属性值属性值 说明说明 Label1 BorderStyle FixedSingle 显示生成的方阵显示生成的方阵 Label1 BorderStyle FixedSingle 显示转置后的方阵显示转置后的方阵 Button1Text生成方阵生成方阵单击它将生成方阵并显示单击它将生成方阵并显示出来出来 Button2 Tex
37、t转置方阵转置方阵 单击它将把方阵转置并显单击它将把方阵转置并显示出来示出来 SGD3.3 任务3-2:方阵转置 二维数组u4在代码窗口中定义常量并定义模块级二维在代码窗口中定义常量并定义模块级二维数组,如下。数组,如下。ConstN=5方阵的阶数方阵的阶数DimArr(N-1,N-1)AsInteger该数组用来该数组用来存放方阵存放方阵SGD3.3 任务3-2:方阵转置 二维数组u说明:说明:(1)语句)语句“DimArr(N-1,N-1)AsInteger”的的作用是定义了一个名为作用是定义了一个名为Arr的的N行行N列的二维列的二维数组,用它来存放数组,用它来存放NN的方阵。所谓二维数
38、的方阵。所谓二维数组,就是有两个下标的数组,适合处理如成组,就是有两个下标的数组,适合处理如成绩报告表、矩阵等具有行列结构的数据。类绩报告表、矩阵等具有行列结构的数据。类似的可以定义三维数组(具有三个下标)和似的可以定义三维数组(具有三个下标)和多维数组(具有多个下标)。本章只介绍二多维数组(具有多个下标)。本章只介绍二维数组。维数组。SGD3.3 任务3-2:方阵转置 二维数组u(2)使用二维数组之前也必须对二维数组进)使用二维数组之前也必须对二维数组进行声明(或称定义)。定义二维数组的语句行声明(或称定义)。定义二维数组的语句格式及功能如下。格式及功能如下。u格式格式:Declare数组名
39、数组名(下标下标1上限上限,下标下标2上限上限)As数据类型符数据类型符u功能功能:定义一个名为定义一个名为“数组名数组名”的二维数组,的二维数组,数组元素的数据类型由数组元素的数据类型由“数据类型符数据类型符”确定。确定。SGD3.3 任务3-2:方阵转置 二维数组u说明说明:u数组的各维的下标下限从数组的各维的下标下限从0开始,因此定义的二维开始,因此定义的二维数组的元素个数为:数组的元素个数为:“(下标(下标1上限上限+1)*(下标(下标2上上限限+1)”。u“Declare”与变量定义完全相同。与变量定义完全相同。u例如,有下列语句:例如,有下列语句:uDima(2,3)AsInteg
40、er定义了一个二维数组定义了一个二维数组a,该数,该数组的数据类型是组的数据类型是integer,具有,具有12个元素。个元素。u从逻辑上看,二维数组是一种从逻辑上看,二维数组是一种“行列行列”结构,由若干结构,由若干行和若干列组成,如上面定义的数组行和若干列组成,如上面定义的数组a有有3行,每行有行,每行有4列(列(4个元素),可以形象地用图个元素),可以形象地用图3-8来描述。来描述。SGD3.3 任务3-2:方阵转置 二维数组a(0,0)a(0,1)a(0,2)a(0,3)a(1,0)a(1,1)a(1,2)a(1,3)a(2,0)a(2,1)a(2,2)a(2,3)首列首列第第2行行第
41、第3行行第第2列列第第3列列第第4列列首行首行图图3-8二维数组的逻辑结构二维数组的逻辑结构二维数组定义好后就可以引用二维数组的每一二维数组定义好后就可以引用二维数组的每一个元素了。个元素了。SGD3.3 任务3-2:方阵转置 二维数组u5编写编写“生成方阵生成方阵”按钮的按钮的Click事件过程代码,如下。事件过程代码,如下。uPrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.ClickuDimi,jAsIntegeruRandomize()随机数初始化随机数初
42、始化uLabel1.Text=uFori=0ToN-1该循环给方阵中的每个元素赋值该循环给方阵中的每个元素赋值uForj=0ToN-1uArr(i,j)=Int(90*Rnd()+10产生随机数并赋值给数产生随机数并赋值给数组元素组元素uLabel1.Text=Label1.Text+CStr(Arr(i,j)+显示显示该元素值该元素值uNextjuLabel1.Text=Label1.Text+Chr(10)+Chr(13)换行换行uNextiuEndSubSGD3.3 任务3-2:方阵转置 二维数组u说明:说明:u(1)程序中的语句)程序中的语句“Arr(i,j)=Int(90*Rnd()
43、+10”的作用是产生一个两位随机数并赋值给二维数组的作用是产生一个两位随机数并赋值给二维数组Arr的数组元素的数组元素Arr(i,j),Arr(i,j)是对二维数组元素的是对二维数组元素的引用。引用二维数组元素的一般格式如下:引用。引用二维数组元素的一般格式如下:u数组名(下标数组名(下标1,下标下标2)u需注意的是:各维的下标都是从需注意的是:各维的下标都是从0开始的。二维数组开始的。二维数组元素也相当于同类型的一个变量,凡是能够使用变量元素也相当于同类型的一个变量,凡是能够使用变量的地方均可以使用同类型的数组元素。的地方均可以使用同类型的数组元素。u(2)可以通过)可以通过Label控件按
44、行显示二维数组,换行是控件按行显示二维数组,换行是通过连接字符串通过连接字符串“Chr(10)+Chr(13)”来实现的。来实现的。SGD3.3 任务3-2:方阵转置 二维数组u6编写编写“转置方阵转置方阵”按钮的按钮的Click事件过程代码,如下。事件过程代码,如下。uPrivateSubButton2_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton2.ClickuDimi,j,tAsIntegeruFori=0ToN1该循环用来把该循环用来把Arr数组表示的方阵进行转置数组表示的方阵进行转置uF
45、orj=0Toi1注意下标注意下标j的范围的范围ut=Arr(i,j):Arr(i,j)=Arr(j,i):Arr(j,i)=tuNextjuNextiuLabel2.Text=uFori=0ToN-1该循环用来显示转置后的方阵该循环用来显示转置后的方阵uForj=0ToN-1uLabel2.Text=Label2.Text+CStr(Arr(i,j)+显示一个元素值显示一个元素值uNextjuLabel2.Text=Label2.Text+Chr(10)+Chr(13)换行换行uNextiuEndSubu7运行程序,对程序的功能进行测试,测试无误后保存程序。至此本项目运行程序,对程序的功能进
46、行测试,测试无误后保存程序。至此本项目全部完成。全部完成。SGD3.3 任务3-2:方阵转置 二维数组u归纳说明:归纳说明:本任务通过方阵转置的实现过程,本任务通过方阵转置的实现过程,讲解了二维数组的定义方法与二维数组讲解了二维数组的定义方法与二维数组元素引用的方法。二维数组适合解决具元素引用的方法。二维数组适合解决具有行列结构的问题,二维数组的输入与有行列结构的问题,二维数组的输入与输出一般都要用到二重循环。与一维数输出一般都要用到二重循环。与一维数组一样,二维数组元素的两个下标也是组一样,二维数组元素的两个下标也是从从0开始,二维数组元素相当于同类型开始,二维数组元素相当于同类型的变量。的
47、变量。SGD3.3 任务3-2:方阵转置 二维数组u拓展与提高:拓展与提高:u除了可能在运行时给二维数组元素赋值外,还可以在除了可能在运行时给二维数组元素赋值外,还可以在定义二维数组时给二维数组元素赋初值。二维数组赋定义二维数组时给二维数组元素赋初值。二维数组赋初值的语句格式及功能如下。初值的语句格式及功能如下。u格式格式:Dim数组名数组名(,)As数据类型符数据类型符=初值列表初值列表1,初值列表初值列表2,初值列表初值列表nu功能功能:定义名为:定义名为“数组名数组名”的二维数组,同时给它的二维数组,同时给它的各行赋初值。二维数组的行数由的各行赋初值。二维数组的行数由分组的个数确定。分组
48、的个数确定。SGD3.3 任务3-2:方阵转置 二维数组u例如,有下列语句:例如,有下列语句:uDimArr(,)AsShort=NewShort(2,3)1,2,3,4,5,6,7,8,9,10,11,12u该语句定义了具有该语句定义了具有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
49、)=12。u上述语句也可以写成:上述语句也可以写成:uDimArr(,)AsShort=1,2,3,4,5,6,7,8,9,10,11,12SGD3.3 任务3-2:方阵转置 二维数组u思考与实训:思考与实训:u1二维数组通常在什么场合下使用?二维数组通常在什么场合下使用?u2如何定义二维数组并给二维数组元素赋初值?如何定义二维数组并给二维数组元素赋初值?u3编写一个程序实现如下功能:随机产生编写一个程序实现如下功能:随机产生25个两位个两位随机数并把它们赋值给随机数并把它们赋值给5行行5列的二维数组,然后再按列的二维数组,然后再按行显示在一个行显示在一个Label控件中。控件中。u4在上题的
50、基础上,把数组的第在上题的基础上,把数组的第2行和第行和第4行互换,行互换,然后把互换后的二维数组显示在一个然后把互换后的二维数组显示在一个Label控件中。控件中。u5在上题的基础上,再把数组的第在上题的基础上,再把数组的第1列和第列和第3列互换,列互换,然后把互换后的二维数组显示在一个然后把互换后的二维数组显示在一个Label控件中。控件中。SGD3.4 任务3-3:求每个学生的多门课的最高成绩及课程序号控件数组u任务任务3-3描述:描述:u假设一个班有多个学生,每个学生都必须修多假设一个班有多个学生,每个学生都必须修多门课,请编写一个程序用来求出每个学生所门课,请编写一个程序用来求出每个