实用教程3.doc_第1页
实用教程3.doc_第2页
实用教程3.doc_第3页
实用教程3.doc_第4页
实用教程3.doc_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

任务3-1描述编写一个程序,用来从随机产生10个两位数找出其中的最小数及最小数的位置。程序的设计界面如图3-1所示,程序运行时,单击“产生数组”按钮,将产生10个两位数并显示在第一个文本框中,单击“求最小数及位置”按钮将从产生的10个两位数中找出最小数及其位置并显示在第二和第三个文本框中,如图3-2所示: 任务分析:可使用一个一维数组来存放一批随机产生的数,再设两个变量,一个用来记下数组中的最小数,一个用来记下最小数的下标。首先认为第一个数最小,记下它的值和下标;然后用记下的最小数和后面的数比较,如果后面的数小,则用记最小数的变量记下该数,用记最小数下标的变量记下该数的下标;用记下的最小数再与后面的数比较直到所有的数都比较完毕,记最小数变量中的值就是最小数,记最小数下标的变量中的值就是最小数的下标,最小数下标(从0开始)加1就是最小数的位置。u 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 = 清空显示数的文本框 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 u 说明: (1)程序中的语句“Arr(i) = Int(90 * Rnd() + 10)”是把产生的两位随机数赋值给数组元素Arr(i),Arr(i)是对数组元素的引用。 (2)在VB.NET语言中通常并不把数组作为一个整体进行处理,参与运算和数据处理的一般都是数组元素。定义了一个数组后就可以引用它的数组元素了。引用一维数组元素的一般形式如下: 数组名(下标)VB.NET语言规定,数组元素的下标从0开始,因此下标上限为N的数组,具有N+1个元素,下标范围为0N-1。u 例如,有定义语句: Dim A(5) As Integer那么a数组具有元素a(0)、a(1)、a(2)、a(3)、a(4)和a(5)。 值得注意的是,在VB.NET语言中不允许下标越界,也就是说VB.NET对下标越界进行检查,在上述的a数组定义后,a(6)和a(-1)均是不可用的。VB.NET在编译时并不检查数组元素是否越界,而是在运行时检查。 其实数组元素就是一种特殊的变量,在程序中也把它作为变量来使用。凡是能够使用变量的地方均可以使用与变量数据类型相同的数组元素。一个数组元素可以像同类型的普通变量一样参加赋值、运算、输入和输出等操作。u 6运行程序,单击“产生数组”按钮,会发现第一个文本框中出现了10个用“,”分隔开的两位随机数。u 7编写Button2的Click事件过程代码,如下。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 = i 记下该元素的下标 End If Next i TextBox2.Text = Str(Min) 显示最小值 TextBox3.Text = Str(Min_i + 1) 显示最小值的位置(下标加1) End Sub 该程序段是求一维数组的最小值及其位置的算法实现u 8编写“退出”按钮的Click事件过程代码,如下: Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click Application.Exit() 退出应用程序End Sub u 9运行程序,单击“产生数组”按钮,产生10个随机数并显示出来。单击“求最小数及位置”按钮将找出其中的最小值及位置并在相应的文本框中显示出来。单击“退出”按钮,程序运行结束。u 10保存项目,至此本任务全部完成。注意:在以后的任务中,“退出”按钮的功能说明及代码编写不再叙述。u 归纳说明: 本任务通过一个典型的算法求一维数组的最小值及其位置,讲解了一维数组的声明与使用方法。与变量一样,在使用数组之前,必须声明数组。在VB.NET中,并不整体使用数组,而是使用数组的数组元素,需注意的是数组元素的下标是从0开始的。一个数组元素相当于一个同类型的变量,凡是能够使用变量的地方均可使用同类型的数组元素。u 任务3-2描述: 随机产生一个55的方阵,然后把该方阵转置。所谓方阵的转置就是把方阵的行与列互换。程序的设计界面如图3-5所示。程序运行时单击“生成方阵”按钮将产生一个55的方阵并显示在Label1中,如图3-6所示。单击“转置方阵”按钮并把产生的方阵进行转置,并把转置后的方阵显示在Label2中,如图3-7所示。u 任务分析: 方阵的转置就是以对角线为轴,把对角线之上的元素和对角线之下的元素进行交换,可通过二重循环来实现,二重循环的外层循环对应行(假设为i),内层循环对应列(假设为j),那么在二重循环的循环体内,只需将第i行第j列的数组元素值与第j行第i列的数组元素交换即可,注意由于只需把方阵上半部分和下半部分交换,因此循环变量j的取值范围只能是0到i-1。u 任务实现:u 1启动VB.NET,新建一个项目,项目类型为“Windows应用程序”,项目的存放位置为“D:VBTASKCH03”,项目名为“Task3_2”。u 2把Form1窗体的Text属性值设置为“方阵转置”,把它的Name属性值设置为“frmTranspose”。单击“解决方案资源管理器”中的“Form1.VB”窗体,然后在属性窗口中把它文件名属性设置为“frmTranspose.vb”。然后执行【项目】【Task3_2属性】命令,在出现的“Task3_2属性页”对话框中把“启动对象”设置为“frmTranspose”。u 对照程序设计界面,为窗体添加控件并设置控件的属性。控件的属性设置如表3-2所示。表3-2 任务3-2控件属性设置及其功能控件名 属性名属性值 说明 Label1 BorderStyle FixedSingle 显示生成的方阵 Label1 BorderStyle FixedSingle 显示转置后的方阵 Button1 Text 生成方阵 单击它将生成方阵并显示出来 Button2 Text 转置方阵 单击它将把方阵转置并显示出来 u 4在代码窗口中定义常量并定义模块级二维数组,如下。 Const N = 5 方阵的阶数 Dim Arr(N - 1, N - 1) As Integer 该数组用来存放方阵u 说明:(1)语句“Dim Arr(N - 1, N - 1) As Integer”的作用是定义了一个名为Arr的N行N列的二维数组,用它来存放NN的方阵。所谓二维数组,就是有两个下标的数组,适合处理如成绩报告表、矩阵等具有行列结构的数据。类似的可以定义三维数组(具有三个下标)和多维数组(具有多个下标)。本章只介绍二维数组。u 说明:数组的各维的下标下限从0开始,因此定义的二维数组的元素个数为:“(下标1上限+1)*(下标2上限+1)”。“Declare”与变量定义完全相同。例如,有下列语句:Dim a(2,3) As Integer 定义了一个二维数组a,该数组的数据类型是integer,具有12个元素。从逻辑上看,二维数组是一种“行列”结构,由若干行和若干列组成,如上面定义的数组a有3行,每行有4列(4个元素),可以形象地用图3-8来描述。5编写“生成方阵”按钮的Click事件过程代码,如下。 Private Sub Button1_Click(ByVal 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 Arr(i, j) = Int(90 * Rnd() + 10 产生随机数并赋值给数组元素 Label1.Text = Label1.Text + CStr(Arr(i, j) + 显示该元素值 Next j Label1.Text = Label1.Text + Chr(10) + Chr(13) 换行 Next i End Sub u 说明:(1)程序中的语句“Arr(i, j) = Int(90 * Rnd() + 10”的作用是产生一个两位随机数并赋值给二维数组Arr的数组元素Arr(i,j),Arr(i,j)是对二维数组元素的引用。引用二维数组元素的一般格式如下:数组名(下标1,下标2)需注意的是:各维的下标都是从0开始的。二维数组元素也相当于同类型的一个变量,凡是能够使用变量的地方均可以使用同类型的数组元素。u (2)可以通过Label控件按行显示二维数u 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(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 Sub7运行程序,对程序的功能进行测试,测试无误后保存程序。至此本项目全部完成。组,换行是通过连接字符串“Chr(10) + Chr(13)”来实现的。u 归纳说明: 本任务通过方阵转置的实现过程,讲解了二维数组的定义方法与二维数组元素引用的方法。二维数组适合解决具有行列结构的问题,二维数组的输入与输出一般都要用到二重循环。与一维数组一样,二维数组元素的两个下标也是从0开始,二维数组元素相当于同类型的变量。拓展与提高:除了可能在运行时给二维数组元素赋值外,还可以在定义二维数组时给二维数组元素赋初值。二维数组赋初值的语句格式及功能如下。格式:Dim 数组名(,) As 数据类型符= 初值列表1,初值列表2,初值列表n功能:定义名为“数组名”的二维数组,同时给它的各行赋初值。二维数组的行数由分组的个数确定。u 任务3-3描述:u 假设一个班有多个学生,每个学生都必须修多门课,请编写一个程序用来求出每个学生所学的各门课中的最高成绩及该门课的序号。程序初始运行情况如图3-9所示,某一次单击“模拟产生学生成绩”按钮后的程序运行情况如图3-10所示,此时单击“求每个学生最高成绩”按钮后的程序运行界面如图3-11所示。 u 任务分析:u 该任务的实现要点有两个:一是如何求二维数组的每行最大值及其下标,二是如何把二维数组和一维数组的各数组元素值显示在文本框中。u (1)要求出每个学生的最高成绩和课程序号,可定义一个二维数组用来存放学生的成绩,一行代表一个学生的成绩数据,一列代表一门课程的成绩数据,则该题其实就是求二维数组的每行最大值及其下标。由于对每行都要求出一个最高成绩及其课程序号,因此可定义两个长度与学生人数一致的一维数组分别用来存放每个学生的最高成绩及其课程序号。其实对于每一行而言也相当于求一维数组的最大值及其下标,该算法我们已经熟悉。u (2)把学生成绩信息、最高成绩信息、最高成绩课程序号信息显示在界面上的文本框中,可以通过控件数组来实现。定义一个与存放学生成绩信息一样大小的二维文本框控件数组,产生学生成绩时只需把相应的成绩信息赋值给文本框控件数组的相应数组元素Text属性即可。同样也可分别定义两个与学生人数一致的一维文本框控件数组,分别用来显示每个学生的最高分及相应的课程序号,只需在求得最高成绩和课程序号时,把最高成绩和课程序号赋值给相应的文本框控件数组的数组元素的Text属性即可。u 任务实现:u 1启动VB.NET,新建一个项目,项目类型为“Windows应用程序”,项目的存放位置为“D:VBTASKCH03”,项目名为“Task3_3”。u 2把Form1窗体的Text属性值设置为“求每个学生的最高成绩和课程序号”,把它的Name属性值设置为“frmScoreProcess1”。单击“解决方案资源管理器”中的“Form1.VB”窗体,然后在属性窗口中把它文件名属性设置为“frmScoreProcess1.vb”。然后执行【项目】【Task3_3属性】命令,在出现的“Task3_3属性页”对话框中把“启动对象”设置为“frmScoreProcess1”。3对照图3-9程序运行界面,为窗体添加三个按钮控件(其它控件由程序自动产生)。控件的属性设置如表3-3所示。控件名 属性名 属性值 说明 Button1 Text 模拟产生学生成绩 单击将产生学生成绩赋值给存放成绩的数组并显示在界面上的文本框中 Button2 Text 求每个学生最高成绩 单击它将求出每个学生的各门课的最高成绩和课程序号并存放到相应的数组中,然后显示在界面上的文本框中 Button3 Text 退出 单击它将退出应用程序 u 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) As TextBox 显示成绩数组中的数据,即显示学生成绩 Dim txtMax(M - 1) As TextBox 显示各学生最高成绩的文本框控件数组 Dim txtMax_i(M - 1) As TextBox 显示各学生最高成绩课程序号的文本框控件数组u (1)程序中的语句“Dim txtScore(M - 1, N - 1) As TextBox”定义的是一个二维控件数组,控件类型为文本框,用来显示学生成绩信息。控件数组与普通数组类似,下标也是从0开始,可以通过下标访问它的每一个元素。控件数组的每一个元素相当于同类型的控件,可以通过程序访问或设置它的属性,调用它的方法,响应发生的事件等。u (2)程序中的语句“Dim txtMax(M - 1) As TextBox”和“Dim txtMax_i(M - 1) As TextBox”分别定义了两个一维文本框控件数组,用来显示每个学生的最高分和课程序号。u 5编写窗体的Load事件过程代码,如下。 Private Sub frmScoreProcess1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 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 - 1 该二重循环的作用是产生二维文本框控件数组并在窗体上显示 lxs(i) = New Label 产生一个标签控件数组元素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 & 学生成绩: 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 : txtScore(i, j).Visible = True Next j Next i 在此接着输入程序代码 End Sub 说明:(1)程序中的语句“Dim lxs(M - 1) As Label”、“Dim lblMax(M - 1) As Label”和“Dim lblMax_i(M - 1) As Label”定义了三个一维标签数组,分别用来显示“No.x 学生成绩”、“最高成绩”、“课程序号”等提示信息。(2)程序中动态创建控件的一般格式如下:格式:控件变量名=New 控件类型作用:创建一个由控件类型指定类型的控件并赋值给控件变量名,然后就可以使用控件变量名访问该控件。控件创建后可以在程序中使用控件变量名访问它的属性、调用它的方法等,若要把控件显示出来需要设置它的两个属性:Parent和Visible。Parent属性用来指定该控件的容器,即该控件显示在哪个控件中,Visible属性应设置为True,使该控件可以看到。u 6运行程序,程序的运行界面如图3-12所示。u 7在语句“在此接着输入程序代码”后面接着添加如下程序代码,程序代码的功能与上述代码基本相同,请读者看注释。 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 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 i For i = 0 To M - 1 显示课程序号提示标签 lblMax_i(i) = New Label 产生一个标签控件数组元素 blMax_i(i).Width = 70 : lblMax_i(i).Height = 30 设置标签控件数组元素的大小 设置标签控件数组元素的位置lblMax_i(i).Left = 410 : lblMax_i(i).Top = TopLen + i * 32 设置标签控件数组元素的容量并使之可见 lblMax_i(i).Parent = Me : lblMax_i(i).Visible = 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).Parent = Me : txtMax_i(i).Visible = True Next i 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之间的随机数,作为模拟成绩赋值给存放成绩的数组 For 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 10运行程序,单击“模拟产生学生成绩”按钮,程序的运行界面如图3-10所示。11编写“模拟产生学生成绩”按钮的Click事件过程代码,如下。 Private Sub Button2_Click(ByVal sender 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) Arr(j) Then min = Arr(j) : min_i = j End If Next j把显示最小值的控件数组元素和显示该轮第一个元素的控件数组元素的背景色设置为不同于其它控件的色彩以便产生一定的视觉效果 A(i, min_i).BackColor = System.Drawing.Color.Yellow A(i, i).BackColor = System.Drawing.Color.LightCyan Me.Refresh() 刷新界面 If min_i i Then 如果最小值下标与i的值不同,最小值元素与该Arr(i)元素交换 t = Arr(min_i) : Arr(min_i) = Arr(i) : Arr(i) = t End If For j = 0 To 5 把本轮比较的结果显示在二维控件数组元素的一行中 A(i + 1, j).Text = Arr(j) Next j Call delaytime() 延迟一定的时间 Me.Refresh() Next i End Sub 说明:(1)上述代码的作用是实现对一维数组Arr的选择法排序并把排序过程在二维文本框控件数组A中演示出来。(2)选择法排序是一种重要的排序方法,用选择法把具有N个数的一维数组从小到大进行排序,排序过程可分为N-1轮,如下所示。第一轮:从第1N个数中找出最小的数和第一个数交换,第一个数排好;第二轮:从第2N个数中找出最小的数和第二个数交换,第二个数排好;第i轮:从第iN个数中找出最小的数和第i个数交换,第i个数排好;第N-1轮

温馨提示

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

评论

0/150

提交评论