【VB开源代码栏目提醒】:网学会员VB开源代码为您提供VBNET程序设计实用教程3 PDF - 综合课件参考,解决您在VBNET程序设计实用教程3 PDF - 综合课件学习中工作中的难题,参考学习。
方阵转置 求一维数组的最小值及其位置 求矩阵的各行最小值及位置 求每个学生的平均成绩并按平均成绩排序 一维数组排序算法
演示 本章任务 数组的概念 二维数组的定义、赋初值与数组元 素的引用 与数组相关的语句、函数的使用 控件对象数组的定义与使用 本章要点 一维数组的定义、赋初值与数组元素的引用 在前面的章节中程序中要存放或处理一个数据首先应声明一个变量这在只处理少量数据的程序中是可以的但若程序需处理很多个数据特别是同类数据使用变量实现将显得比较麻烦甚至不可能完成需要的功能。
如某次期中考试后需要用
计算机处
理学生的信息学课程成绩假设全年级为200人若用变量来记录学生的成绩不但需要200个变量而且在编程过程中程序员还需要记住每个变量与学生的对应关系显然是极不方便的。
为了解决该问题在
VB.NET中提供了一种名叫“数组”的数据结构利用它可以方便地处理像考试成绩这种具有多个相同类型的一批数据。
可以把数组看成是很多个变量的集合这些变量具有相同的类型它们在内存中是连续存放的这些变量均具有相同的名称并且可以通过下标相互区分每一个这样的变量我们把它称为数组元素。
由于在程序中数组元素是通过下标相互区分的而下标又可以用变量或表达式来表示所以为程序员循环处理成批数据带来了方便。
如假设存放200个学生信息学成绩的数组名为InformationScore要求出所有学生的信息学的平均分可使用下列语句 Dim AvgInformationScore As Single Dim InformationScore199 As Integer AvgInformationScore 0 For i 0 To 199 Step 1 AvgInformationScore AvgInformationScore InformationScore i Next I AvgInformationScore AvgInformationScore / 300 读者不妨试着使用变量来求信息学
课程的平均分会发现程序编起来非常麻烦。
可见与变量相比使用数组来处理同类的多个数据优势十分明显。
3-1 编写一个程序用来从随机产生10个两位数找出其中的最小数及最小数的位置。
程序的设计界面如图3-1所示程序运行时单击“产生数组”按钮将产生10个两位数并显示在第一个文本框中单击“求最小数及位置”按钮将从产生的10个两位数中找出最小数及其位置并显示在第二和第三个文本框中如图3-2所示: 图3-2 可使用一个一维数组来存放一批随机产生的数再设两个变量一个用来记下数组中的最小数一个用来记下最小数的下标。
首先认为第一个数最小记下它的值和下标然后用记下的最小数和后面的数比较如果后面的数小则用记最小数的变量记下该数用记最小数下标的变量记下该数的下标用记下的最小数再与后面的数比较……直到所有的数都比较完毕记最小数变量中的值就是最小数记最小数下标的变量中的值就是最小数的下标最小数下标从0开始加1就是最小数的位置。
1启动
VB.NET新建一个项目项目类型为“Windows应用程序”项目的存放位置为“D:VBTASKCH03”项目名为“Task3_2”。
2把Form1窗体的Text属性值设置为“方阵转置”把它的Name属性值设置为“frmTranspose”。
单击“解决方案资源管理器”中的“Form1.
VB”窗体然后在属性窗口中把它文件名属性设置为“frmTranspose.
vb”。
然后执行【项目】→【Task3_2属性】命令在出现的“Task3_2属性页”对话框中把“启动对象”设置为“frmTranspose”。
3对照程序
设计界面为窗体添加控件并设置控件的属性。
控件的属性设置如表3-2所示。
表3-2 任务3-2控件属性设置及其功能 控件名 属性名 属性值 说明 Label1 BorderStyle FixedSingle 显示生成的方阵 Label2 BorderStyle FixedSingle 显示转置后的方阵 Button1 Text 生成方阵 单击它将生成方阵并显示出来 Button2 Text 转置方阵 单击它将把方阵转置并显示出来 4在
代码窗口中定义常量并定义模块级二维数组如下。
Const N 5 ‘方阵的阶数 Dim ArrN - 1 N - 1 As Integer 该数组用来存放方阵 1Dim ArrN - 1 N - 1 As Integer”ArrNNNN 2 Declare 12 As Declare”DimStaticPublicProtectedFriendProtectedPrivate0
VB.NETOption Base Object Dim a9 As Integer //定义了一个数组a该数组的数据类型是integer具有10个元素。
第一个元素为a0最后一个元素为a9数组定义后将占用连续的存储空间其占用存储空间大小为“长度数据类型所占用的字节数”。
例如对于上面定义的a数组在程序运行时
系统将为该数组分配一个连续的40字节的存储单元用来存放该数组的每一个元素该数组占用存储空间的情况如图3-3所示。
a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 每个元素占4个字节整个数组占40个字节 3-3 5Button1Click Private Sub Button1_ClickByVal sender As System.Object ByVal e As System.EventArgs Handles Button1.Click Dim i As Integer Randomize 随机数初始化 TextBox1.Text 清空显示数的文本框 For i 0 To N 该循环产生10个数并显示在第一个文本框中 Arri Int90 Rnd 10 产生一个两位随机数存放到数组元素Arri中 TextBox1.Text TextBox1.Text CStrArri 把产生的数显示出来 Next i TextBox1.Text MidTextBox1.Text 1 LenTextBox1.Text - 1 去掉最后的逗号 End Sub 说明 1程序中的语句“Arri Int90 Rnd 10”是把产生的两位随机数赋值给数组元素ArriArri是对数组元素的引用。
2在
VB.NET语言中通常并不把数组作为一个整体进行处理参与运算和数据处理的一般都是数组元素。
定义了一个数组后就可以引用它的数组元素了。
引用一维数组元素的一般形式如下 数组名下标
VB.
NET语言规定数组元素的下标从0开始因此下标上限为N的数组具有N1个元素下标范围为0N-1。
例如有定义语句 Dim A5 As Integer那么a数组具有元素a0、a1、a2、a3、a4和a5。
值得注意的是在
VB.NET语言中不允许下标越界也就是说
VB.NET对下标越界进行检查在上述的a数组定义后a6和a-1均是不可用的。
VB.NET在编译时并不检查数组元素是否越界而是在运行时检查。
其实数组元素就是一种特殊的变量在程序中也把它作为变量来使用。
凡是能够使用变量的地方均可以使用与变量数据类型相同的数组元素。
一个数组元素可以像同类型的普通变量一样参加赋值、运算、输入和输出等操作。
610” Private Sub Button2_ClickByVal sender As System.Object ByVal e As System.EventArgs Handles Button2.Click Dim i As Integer Dim Min Min_i As Integer 分别用来存放最小值和最小值的下标 Min Arr0 : Min_i 0 首先认为第一个元素值最小 For i 1 To N 该循环找最大值及其下标 If Min Arri Then 如果后面的元素值小 Min Arri 记下该元素 Min_i i 记下该元素的下标 End If Next i TextBox2.Text StrMin 显示最小值 TextBox3.Text StrMin_i 1 显示最小值的位置下标加1 End Sub 7编写Button2的Click事件过程
代码如下。
8Click: Private Sub Button3_ClickByVal sender As System.Object ByVal e As System.EventArgs Handles Button3.Click Application.Exit End Sub 9运行程序单击“产生数组”按钮产生10个随机数并显示出来。
单击“求最小数及位置”按钮将找出其中的最小值及位置并在相应的文本框中显示出来。
单击“退出”按钮
程序运行结束。
10保存项目至此本任务全部完成。
注意在以后的任务中“退出”按钮的功能说明及
代码编写不再叙述。
本任务通过一个典型的算法——求一维数组的最小值及其位置讲解了一维数组的声明与使用方法。
与变量一样在使用数组之前必须声明数组。
在
VB.NET中并不整体使用数组而是使用数组的数组元素需注意的是数组元素的下标是从0开始的。
一个数组元素相当于一个同类型的变量凡是能够使用变量的地方均可使用同类型的数组元素。
拓展与提高 其实在定义数组的时候还可以通过给数组元素赋初值来给数组分配存储空间并确定数组元素个数及各元素的值。
给数组元素赋初值的格式与功能如下。
格式Declare 数组名 As 数据类型符 初值列表 功能定义 一个名为“数组名”的数组数组元素的数据类型由“数据类型符”确定。
该数组的元素个数由“初值列表”中的值的个数指定“初值列表”是由逗号分隔开来的若干个值它们作为初值依次赋值给相应的数组元素。
例如有下列语句 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 Integer3 1 2 3 4 注意此处的“New Short3”中的3不是元素个数而是下标上限。
思考与实训 1为什么要使用数组 2如何定义一维数组如何给一维数组赋初值数组元素的下标从几开始 3编写一个程序把从键盘上输入的10个数保存到一维数组中然后再把该数组各元素的值在界面上显示出来。
4编写一个程序把从键盘上输入的10个数保存到一维数组中把该数组的各元素值反序存放再在界面上显示出来。
提示反序存放数组元素可通过下列方法来实现如图3-4所示可用两个变量P1和P2分别存放第一个元素和最后一个元素的下标然后交换它们作为下标的数组元素值再把P1的值加1P2的值减1再交换以它们作为下标的数组元素的值……直到P1的值等于或大于P2的值时为止。
P1 P2 …直到 直到… P1和P2作为下标的元素交换 P1加1P2减1再交换… 图3-4 一维数组反序存放示意图 510 任务3-2描述 随机产生一个5×5的方阵然后把该方阵转置。
所谓方阵的转置就是把方阵的行与列互换。
程序的设计界面如图3-5所示。
程序运行时单击“生成方阵”按钮将产生一个5×5的方阵并显示在Label1中如图3-6所示。
单击“转置方阵”按钮并把产生的方阵进行转置并把转置后的方阵显示在Label2中如图3-7所示。
图3-5 程序设计界面 图 图3-6 程序运行界面一 图3-7 程序运行界面二 任务分析 方阵的转置就是以对角线为轴把对角线之上的元素和对角线之下的元素进行交换可通过二重循环来实现二重循环的外层循环对应行假设为i内层循环对应列假设为j那么在二重循环的循环体内只需将第i行第j列的数组元素值与第j行第i列的数组元素交换即可注意由于只需把方阵上半部分和下半部分交换因此循环变量j的取值范围只能是0到i-1。
任务实现 1启动
VB.NET新建一个项目项目类型为“Windows应用程序”项目的存放位置为“D:VBTASKCH03”项目名为“Task3_2”。
2把Form1窗体的Text属性值设置为“方阵转置”把它的Name属性值设置为“frmTranspose”。
单击“解决
方案资源管理器”中的“Form1.
VB”窗体然后在属性窗口中把它文件名属性设置为“frmTranspose.
vb”。
然后执行【项目】→【Task3_2属性】命令在出现的“Task3_2属性页”对话框中把“启动对象”设置为“frmTranspose”。
3对照程序设计界面为窗体添加控件并设置控件的属性。
控件的属性设置如表3-2所示。
表3-2 任务3-2控件属性设置及其功能 控件名 属性名 属性值 说明 Label1 BorderStyle FixedSingle 显示生成的方阵 Label1 BorderStyle FixedSingle 显示转置后的方阵 Button1 Text 生成方阵 单击它将生成方阵并显示出来 Button2 Text 转置方阵 单击它将把方阵转置并显示出来 4在
代码窗口中定义常量并定义模块级二维数组如下。
Const N 5 方阵的阶数 Dim ArrN - 1 N - 1 As Integer 该数组用来存放方阵 1语句“Dim ArrN - 1 N - 1 As Integer”的作用是定义了一个名为Arr的N行N列的二维数组用它来存放N×N的方阵。
所谓二维数组就是有两个下标的数组适合处理如成绩
报告表、矩阵等具有行列结构的数据。
类似的可以定义三维数组具有三个下标和多维数组具有多个下标。
本章只介绍二维数组。
2使用二维数组之前也必须对二维数组进行声明或称定义。
定义二维数组的语句格式及功能如下。
格式Declare 数组名下标1上限下标2上限 As 数据类型符 功能定义一个名为“数组名”的二维数组数组元素的数据类型由“数据类型符”确定。
说明 ①数组的各维的下标下限从0开始因此定义的二维数组的元素个数为“下标1上限1下标2上限1”。
②“Declare”与变量定义完全相同。
例如有下列语句 Dim a23 As Integer 定义了一个二维数组a该数组的数据类型是integer具有12个元素。
从逻辑上看二维数组是一种“行列”结构由若干行和若干列组成如上面定义的数组a有3行每行有4列4个元素可以形象地用图3-8来描述。
a00 a01 a02 a03 a10 a11 a12 a13 a20 a21 a22 a23 首列 第2行 第3行 第2列 第3列 第4列 首行 图3-8 二维数组的逻辑结构 二维数组定义好后就可以引用二维数组的每一个元素了。
5编写“生成方阵”按钮的Click事件过程
代码如下。
Private Sub Button1_ClickByVal sender 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 Arri j Int90 Rnd 10 产生随机数并赋值给数组元素 Label1.Text Label1.Text CStrArri j 显示该元素值 Next j Label1.Text Label1.Text Chr10 Chr13 换行 Next i End Sub 1程序中的语句“Arri j Int90 Rnd 10”的作用是产生一个两位随机数并赋值给二维数组Arr的数组元素ArrijArrij是对二维数组元素的引用。
引用二维数组元素的一般格式如下 数组名下标1下标2 需注意的是各维的下标都是从0开始的。
二维数组元素也相当于同类型的一个变量凡是能够使用变量的地方均可以使用同类型的数组元素。
2可以通过Label控件按行显示二维数组换行是通过连接字符串“Chr10 Chr13”来实现的。
6编写“转置方阵”按钮的Click事件过程
代码如下。
Private Sub Button2_ClickByVal 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 Arri j : Arri j Arrj i : Arrj i t Next j Next i Label2.Text For i 0 To N - 1 该循环用来显示转置后的方阵 For j 0 To N - 1 Label2.Text Label2.Text CStrArri j 显示一个元素值 Next j Label2.Text Label2.Text Chr10 Chr13 换行 Next i End Sub 7运行程序对程序的功能进行测试测试无误后保存程序。
至此本项目全部完成。
本任务通过方阵转置的实现过程讲解了二维数组的定义方法与二维数组元素引用的方法。
二维数组适合解决具有行列结构的
问题二维数组的输入与输出一般都要用到二重循环。
与一维数组一样二维数组元素的两个下标也是从0开始二维数组元素相当于同类型的变量。
除了可能在运行时给二维数组元素赋值外还可以在定义二维数组时给二维数组元素赋初值。
二维数组赋初值的语句格式及功能如下。
格式Dim 数组名 As 数据类型符 初值
列表1初值列表2…初值列表n 功能定义名为“数组名”的二维数组同时给它的各行赋初值。
二维数组的行数由分组的个数确定。
Dim Arr As Short New Short2 3 1 2 3 4 5 6 7 8 9 10 11 12 该语句定义了具有12个元素的二维数组arr并依次赋初值初值情况为Arr001、Arr012、Arr023、Arr034、Arr105、Arr116、Arr127、Arr138、Arr209、Arr2110、Arr2211、Arr2312。
上述语句也可以写成 Dim Arr As Short 1 2 3 4 5 6 7 8 9 10 11 12 1二维数组通常在什么场合下使用 2如何定义二维数组并给二维数组元素赋初值 3编写一个程序实现如下功能随机产生25个两位随机数并把它们赋值给5行5列的二维数组然后再按行显示在一个Label控件中。
4在上题的基础上把数组的第2行和第4行互换然后把互换后的二维数组显示在一个Label控件中。
5在上题的基础上再把数组的第1列和第3列互换然后把互换后的二维数组显示在一个Label控件中。
3-3 假设一个班有多个学生每个学生都必须修多门课请编写一个程序用来求出每个学生所学的各门课中的最高成绩及该门课的序号。
程序初始运行情况如图3-9所示某一次单击“模拟产生学生成绩”按钮后的程序运行情况如图3-10所示此时单击“求每个学生最高成绩”按钮后的程序运行界面如图3-11所示。