《Visual Basic NET程序设计》课件第5章枚举、数组和结构.pptx

上传人(卖家):momomo 文档编号:7650673 上传时间:2024-05-23 格式:PPTX 页数:47 大小:240.15KB
下载 相关 举报
《Visual Basic NET程序设计》课件第5章枚举、数组和结构.pptx_第1页
第1页 / 共47页
《Visual Basic NET程序设计》课件第5章枚举、数组和结构.pptx_第2页
第2页 / 共47页
《Visual Basic NET程序设计》课件第5章枚举、数组和结构.pptx_第3页
第3页 / 共47页
《Visual Basic NET程序设计》课件第5章枚举、数组和结构.pptx_第4页
第4页 / 共47页
《Visual Basic NET程序设计》课件第5章枚举、数组和结构.pptx_第5页
第5页 / 共47页
点击查看更多>>
资源描述

1、第5章 枚举、数组和结构前面提到的数据类型,如整型、实型、日期型等属于存储单一信息的简单数据类型。而实际应用中,有些数据是由若干种相关数据构成的,这些数据可以通过枚举、数组和结构等复杂数据类型存储。5.1 枚举所谓“枚举”,是指将变量的值逐一列举出来,变量的值只限于列举出来的值的范围。例如,可以把一周七天相关联的一组整数常数声明为一个枚举类型,然后在代码中使用这七天的名称而不是它们的整数值。5.1.1枚举类型的定义枚举类型的定义枚举类型通过Enum语句来定义,语法如下:Public|Private Enum类型名称成员名=常数表达式成员名=常数表达式End Enum例如,在Enum语句定义中定

2、义了一个枚举类型CourseCodes,其中使用赋值语句为一组课程命名常数:Public Enum CourseCodes Computer=1 English=2Math=3End Enum在Enum语句定义中,常数表达式可以省略,在默认情况下,枚举中的第一个常数被初始化为0,其后的常数将按步长1递增。可以自定义每个枚举成员相关联的常量值,但是要求必须在该枚举的类型范围内。下面的示例将产生编译错误,原因是常量值-1、-2和-3不在Uinteger 的范围内。Enum Colors AS UintegerRed=-1Green=-2Blue=-3End Enum多个枚举成员可以共享一个关联值。

3、下面的示例中,两个枚举成员(Blue和Max)具有相同的关联值11。Enum Colors AS UintegerRed 成员常量值=0Green=10成员常量值=10Blue 成员常量值=11Max=Blue成员常量值=11End Enum5.1.2枚举的使用枚举的使用声明枚举类型后,就可以定义该枚举类型的变量。引用枚举类型变量的成员的语法如下:枚举类型变量名.成员名称例如,利用前面例子中定义的一个枚举类型CourseCodes,定义一个该枚举类型的变量,然后访问它的Math常量:Dim MyCourse As CourseCodes MyCourse=CourseCodes.Math My

4、Course值为3 例5.1 枚举类型应用示例。Public Class Form1 Public Enum Days Sunday Monday Tuesday Wednesday Thursday Friday Saturday End Enum Private Sub Button1_Click(ByVal sender As System.Object,ByVal e As System.EventArgs)Handles Button1.Click Dim MyDay As Days MyDay=Days.Monday If MyDay max Then max=Arr(i):ima

5、x=i End If Next i Label2.Text=最大值下标=&imax&最大值=&max&和=&sumEnd Sub3.在数组中查找元素查找是指在数组中,根据指定的值,找出与其值相同的元素。查找算法有很多,最简单的方法有顺序查找和二分法查找。顺序查找是将待查找值与数组中的元素逐一比较,若相同,则查找成功;若找不到,则查找失败。二分法查找的思想是:待查找值同数组的中间项元素比较,若相同则查找成功结束;否则,判别待查找值落在数组的哪半部分,然后在剩下的这半部分里重复上述查找,直到找到或数组中没有待查找值。例5.5 二分法查找。Private Sub Button1_Click(ByVa

6、l sender As System.Object,ByVal e As System.EventArgs)Handles Button1.Click Dim Arr()As Integer=1,2,4,6,8,9,11,18,29,30 数组下标从0开始 Dim key%,mid%,p%,q%key=Val(TextBox1.Text)p=0:q=9 Do mid=(p+q)/2 If key=Arr(mid)Then Exit Do Else If key Arr(mid)Then p=mid+1 Else q=mid-1 End If End If Loop While p q Then

7、 Label1.Text=未找到数&key Else Label1.Text=key&是数组中第&mid&个数 End IfEnd Sub4.交换数组中元素的位置例5.6 设有一个44的方阵,求其转置矩阵。程序运行结果如图5-3所示。Private Sub Button1_Click(ByVal sender As System.Object,ByVal e As System.EventArgs)Handles Button1.Click Dim Metrix(4,4)As Integer Dim i As Integer,t As Integer Label1.Text=For i=1 T

8、o 4 用二维数组存放矩阵 For j=1 To 4 Metrix(i,j)=j+4*(i-1)Label1.Text&=Str(Metrix(i,j).PadRight(4)Next j Label1.Text&=vbCrLf Next i Label1.Text&=vbCrLf For i=1 To 4 矩阵转置 For j=1 To i t=Metrix(i,j)Metrix(i,j)=Metrix(j,i)Metrix(j,i)=t Next j Next i For i=1 To 4 For j=1 To 4 Label1.Text&=Str(Metrix(i,j).PadRight

9、(4)Next j Label1.Text&=vbCrLf Next i Label1.Text&=vbCrLfEnd Sub5.数组元素排序排序是将一组数按递增或递减的次序排列。排序的算法有很多,下面采用冒泡法对10个数由小到大排序。算法思想是:设有10个待排序数 存放在数组A中,分别表示为A(1)A(10)。第1趟:先将A(1)与A(2)比较,若A(1)A(2),则将A(1)、A(2)中的值互换,使得A(1)存放较小者。再将A(2)与A(3)、A(3)与A(4)、A(9)与A(10)比较,并且依次作出同样的处理。最后,10个数中的最大者放入A(10)中。第2趟:将A(1)与A(2)、A(8

10、)与A(9)比较,并且依次作出同样的处理,使得10个数中的次大者放如A(9)中。如此进行第3趟、第4趟,直到第9趟。至此,将得到A(1)A(10)中存放的有序数,算法结束。例5.7 冒泡法排序。Private Sub Button1_Click(ByVal sender As System.Object,ByVal e As System.EventArgs)Handles Button1.Click Dim A(10)As Integer Dim i As Integer,j As Integer,t As Integer Label1.Text=For i=1 To 10 随机产生10个1

11、100的自然数 A(i)=Int(Rnd()*100)+1 Label1.Text&=A(i)&Next i Label1.Text&=vbCrLf&vbCrLf For i=1 To 9 起泡法排序 For j=1 To 10-i If A(j)A(j+1)Then t=A(j):A(j)=A(j+1):A(j+1)=t End If Next j Next i For i=1 To 10 Label1.Text&=A(i)&Next i Label1.Text&=vbCrLfEnd Sub5.3 结构结构结构是一种较为复杂但非常灵活的复合数据类型,一个结构类型可以由若干个称为成员的数据成分

12、组成,每个成员的数据类型可以互不相同,不同的结构可以包含不同的成员。例如,一个学生的基本信息包括学号、姓名、电话号码、出生日期、成绩等数据,这些数据类型、长度各不同,但它们都是学生的基本信息。对这种数据,就可以用结构类型。5.3.1定义结构定义结构结构类型的定义是用Structure语句开始,用End Structure语句结束,其定义的语法如下:Dim I Public I Friend I Private Structure结构名变量声明过程声明End Structure 例如,使用Structure语句定义学生的一系列信息:Public Structure struStudents Pu

13、blic strId As String Friend strName As String Private strBirthDay As Date Private intScore As Integer 下面定义一个过程成员,它可以访问结构的私有成员Friend Sub DoubleScore(Byval inScore As Integer)intScore=intScore*2 End Sub End Structure 在结构中可以包含其他结构,例如先定义telephone结构如下:Public Structure telephone Public strPhone As StringF

14、riend strMobilPhone As string End Structure然后,再定义newStudents结构,其中包含telephone结构:Public Structure newStudents Public strId As String Friend strName As String Private strBirthDay As DatePrivate intScore As IntegerDim phone As telephone定义结构类型的成员End Structure5.3.2定义结构类型的变量定义结构类型的变量结构类型的变量(简称结构变量)的定义与普通变量

15、的定义类似,格式如下:Dim|Public|Private 变量名1,变量名2,变量名n As 结构名例如,定义struStudents结构类型的两个变量Stu1和Stu2的语句如下:Dim Stu1,Stu2 As struStudents5.3.3初始化结构变量初始化结构变量结构变量的初始化不能直接对结构变量本身进行,只能用赋值语句对结构变量的各个成员分别赋值。例如,定义两个具有telephone结构类型的变量X1和X2,并初始化它们:Public Structure telephone Public strPhone As String Friend strMobilPhone As S

16、tring End Structure Dim X1,X2 As telephone X1.strPhone=6210087 X1.strMobilPhone=13055558888 X2.strPhone=6253023 X2.strMobilPhone=13955555555 5.3.4引用结构变量引用结构变量对结构变量的引用主要是对它的成员引用,即对成员进行赋值、运算、输入和输出等操作。在引用结构变量时,可以采用如下几种方式:1.成员引用结构变量名.成员名说明:例如,引用5.3.3节举例中的X1和X2变量如下:Dim X1,X2 As telephone 定义结构变量X1.strPhon

17、e=12345678对x1的成员strPhone赋值X1.strMobilPhone=13012341234对x1的成员strMobilPhone赋值X2.strPhone=X1.strPhone 将X1的成员strPhone赋值给x2的相应的成员2.成员变量的运算 结构中的成员变量具有各种类型,根据其类型可以像普通变量一样进行各种运算和输入输出,如算术运算、赋值运算、关系运算、逻辑运算等。例如,下面代码对5.3.3节举例中的X1变量的strPhone成员进行赋值运算和关系运算:Dim X1,X2 As telephone 定义结构变量X1.strPhone=12345678 对x1的成员st

18、rPhone进行赋值运算If X1.strMobilPhone X1.strPhone Then 对X1的成员进行关系运算X2.strPhone=X1.strPhone End If 3.嵌套引用如果一个结构中的成员本身又是一个结构类型,则在引用时需要使用多个成员运算符,按照从高到低的原则,一级一级地找到最低一级的成员,最后对最低级的成员进行访问。例如,下面代码定义了一个具有5.3.1节举例中的newStudents结构的变量X1,然后访问其嵌套的strPhone成员,对该成员进行赋值运算。Dim X1 As newStudents 定义结构变量X1.Phone.strPhone=123456

19、78 对X1的Phone成员的子成员strPhone进行赋值运算X1.strName=李明 对x1的成员strName进行赋值运算4.结构变量整体赋值VB.NET允许将一个结构变量作为一个整体赋值给另一个同类型的结构变量,即将一个结构变量的所有成员的值依次赋给另一个结构变量的相应的成员。例如,下面代码中X1和X2被声明为同类型结构变量,可以将X1结构变量整体赋值给X2结构变量。Dim X1,X2 As telephone 定义结构变量X1.strPhone=12345678 对x1的成员strPhone进行赋值运算X1.strMobilPhone=13312345678 对X1的成员strMo

20、bilPhone赋值运算X2=X1 5.3.5结构数组结构数组结构变量中可以存放一组数据,例如一个学生的学号、姓名、出生日期等,如果有多个学生的数据需要处理,显然应该使用数组,这种存储具有结构类型数据的数组称为结构数组。与普通数据类型数组不同,结构数组的每个数组元素都是一个结构类型的数据,它们都分别包含各个成员项。定义结构数组变量的语法格式如下:Dim数组变量名(下标上界)As结构名如:Dim MyArray(99)As newStudents定义结构数组变量 1.引用结构数组元素的成员结构数组名(下标).成员名例如,引用前面例中的MyArray结构数组变量的第10个元素的strName成员:

21、Dim x As String x=MyArray(9).strName 2.结构数组元素间的赋值运算例如,将前面例中的MyArray结构数组变量的第10个元素赋给第1个元素:MyArray(0)=MyArray(9)3.结构成员的输入输出例如对前面例中的MyArray结构数组变量的第10个元素的strName成员进行输出:Debug.WriteLine(MyArray(9).strName)在集成环境的“输出”窗口显示成员值 例5.8 编写程序实现学生基本信息的数据输入和输出操作。程序代码如下:Public Structure newStudents Public XH As String

22、学号Public XM As String 姓名Public ZYM As String 专业名Public XB As String 性别Public NL As Integer 年龄End Structure Private Sub Form1_Load(ByVal sender As System.Object,ByVal e As System.EventArgs)Handles MyBase.LoadConst MAX_STU=2 Dim arrayXS(MAX_STU)As newStudents Dim I As Integer 从键盘依次输入每个学生的基本信息For I=0 T

23、o MAX_STU arrayXS(I).XH=InputBox(请输入学号)arrayXS(I).XM=InputBox(请输入姓名.)arrayXS(I).ZYM=InputBox(请输入专业名称)arrayXS(I).XB=InputBox(请输入性别)arrayXS(I).NL=Val(InputBox(请输入年龄)Next I Debug.WriteLine()Debug.WriteLine(学号 姓名 专业 性另 年龄)For I=0 To MAX_STU Debug.Write(arrayXS(I).XH&Space(4)Debug.Write(arrayXS(I).XM&Spa

24、ce(4)Debug.Write(arrayXS(I).XH&Space(4)Debug.Write(arrayXS(I).ZYM&Space(4)Debug.Write(arrayXS(I).XB&Space(4)Debug.Write(arrayXS(I).NL)Next IEnd Sub5.4 综合综合应用应用1.选择排序当对数组元素进行排序时,“选择法”比“冒泡法”的效率高。选择排序的算法是:对一个有N个元素的数组进行递增排序,从第2到第 N个元素中选出最小值和第1个元素进行比较,如果第1个元素的值大于这个该最小值,则交换两个元素的值,否则什么都不做;再从第3到第 N个元素中选出最小值

25、和第2个元素进行比较,如果第2个元素的值大于该最小值,则交换两个元素的值,否则什么都不做这样,比较完第N-1个元素和第N个元素之后,排序完毕。选择排序程序代码如下:(升序)Private Sub Button1_Click(ByVal sender As System.Object,ByVal e As System.EventArgs)Handles Button1.Click Dim n As Integer,k%,temp%Dim Num(100)As Integer Dim i,j As Integer Randomize()n=100 For i=1 To n Num(i)=Int(

26、100*Rnd()+1)Next i For i=1 To n-1 k=i For j=i+1 To n If Num(j)Num(k)Then k=j Next j If k i Then Temp=Num(i)Num(i)=Num(k)Num(k)=Temp End If Next i For i=1 To n TextBox1.Text=TextBox1.Text&vbCrLf&Num(i)Next i End Sub2.比较排序比较排序法的原理是这样的,先拿数组的第一个元素I(1)与第二个元素I(2)进行比较,如果I(1)大于I(2)则交换二者的值,如果I(1)不大于I(2)就什么也不

27、做。接着再比较第一个元素I(1)和第三个元素I(3)的值,如果I(1)大于I(3)则交换二者的数据,否则就什么也不做。这样,用第一个元素I(1)和所有的元素进行比较之后,第一个元素I(1)的值就是所有元素中最小的一个。然后,拿第二个元素I(2)和它后面所有的元素进行与上面类似的比较,比较完毕之后,I(2)保存的就是所有元素中的次小值。这样一直循环执行,当比较完I(n-1)与I(n)的大小之后,整个数组中元素的值就已经按从小到大的顺序进行了排列。比较排序法程序代码如下:(降序)Private Sub Button1_Click(ByVal sender As System.Object,ByVa

28、l e As System.EventArgs)Handles Button1.Click Dim n As Integer,k%,temp%Dim Num(100)As Integer Dim i,j As Integer Randomize()n=100 For i=1 To n Num(i)=Int(100*Rnd()+1)Next i For i=1 To n对数组Num中的数进行排序 For j=i+1 To n If Num(i)Num(j)Then temp=Num(i)Num(i)=Num(j)Num(j)=temp End If Next j Next i For i=1 T

29、o n TextBox1.Text=TextBox1.Text&vbCrLf&Num(i)Next i End Sub3.学生成绩表表5-1是一张学生成绩表。设计程序,定义一个结构类型,存储表5-1的相关数据,即学号、姓名、性别、成绩l、成绩2、成绩3。学号学号姓名姓名性别性别成绩成绩1成绩成绩2成绩成绩3总分总分201312001万里女908788 201312002王彤女896987 201312003张大力男789085 201312004李丽女858780 201312005钱图男938992 本例的界面设计,需要在窗体中添加7个标签控件,1个文本框控件和1个按钮控件。文本框控件的Mu

30、ltiline属性设置为True,ReadOnly属性设置为True。“输入数据”按钮的Click事件处理程序如下。Public Class Form1 Public Structure xscj Public xh As String Public xm As String Public xb As String Public score()As Single End Structure Private Sub Button1_Click(ByVal sender As System.Object,ByVal e As System.EventArgs)Handles Button1.Cli

31、ck Dim student As xscj Dim n,sum As Integer n=2 ReDim student.score(n)student.xh=InputBox(请输入学号:)TextBox1.Text=TextBox1.Text+student.xh student.xm=InputBox(请输入姓名:)TextBox1.Text=TextBox1.Text+Space(4)+student.xm student.xb=InputBox(请输入性别:)TextBox1.Text=TextBox1.Text+Space(4)+student.xb For i=0 To n s

32、tudent.score(i)=InputBox(请输入成绩&i+1)sum=sum+student.score(i)TextBox1.Text=TextBox1.Text+Space(5)+Str(student.score(i)Next TextBox1.Text=TextBox1.Text+Space(5)+Str(sum)+vbNewLine End SubEnd Class习习题题55.1 VB.NET如何定义一维和多维数组?5.2 VB.NET如何确定数组的大小?A(m)数组和A(m,n)数组各有多少个元素?5.3 VB.NET中枚举常数的数据有哪些类型?5.4 编程实现将一个一维

33、数组中的10个数逆序存放。采用的方法是:将其前5个元素与后5个元素对换,即第1个元素与第10个元素互换,第2个元素与第9个元素互换第5个元素与第6个元素互换。分别输出数组原来各元素的值和对换后各元素的值。5.5 建立并输出一个1010的矩阵,该矩阵对角线元素为1,其余元素均为0。5.6 设有一个4 4的矩阵,各元素的值由键盘输入,编写程序,完成如下操作:(1)找出其中最大的元素所在的行和列,并输出其值及行号和列号;(2)分别计算矩阵两个对角线上的元素之和;(3)交换第二行和第四行的位置;(4)交换第一列和第三列的位置;5.7 编写程序,输出如下形式的“杨辉三角形”。11 11 2 11 3 3

34、 11 4 6 4 11 5 10 10 5 1分析上面的形式,可以找出规律:对角线和每行的第一列元素均为1,其余各项是它的上一行中同列元素与其前面一个元素的和。可以一般地表示为:a(i,j)=a(i-1,j-1)+a(i-1,j)编写程序,输出n=10的杨辉三角形(共11行)。5.8 找出二维数组mn中的“鞍点”。所谓鞍点,是指它在本行中值最大,在本列中值最小。输出鞍点的行、列号,有可能在一个数组中找不到鞍点,如无鞍点则输出“无”。5.9 把两个按升序(即从小到大)排列的数列A(1),A(2),A(m)和B(1),B(2),B(n),合并成一个仍为升序排列的新数列。5.10 设有如下人员名单:姓名性别年龄文化程度籍贯张志强男23大学本科河北李志男30高中毕业北京王珺女25研究生山东编写一个程序,对该名单进行检索。程序运行后,只要输入一个人的姓名,即可在屏幕上显示出这个人的情况。例如,输入“王珺”,则显示:王珺女25研究生山东要求:(1)使用动态结构数组,输入的人数可以根据实际情况改变。(2)当输入的姓名不存在时,显示该人不在名单中。(3)每次检索结束后,询问是否继续检索,“Y”继续,“N”结束程序。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 大学
版权提示 | 免责声明

1,本文(《Visual Basic NET程序设计》课件第5章枚举、数组和结构.pptx)为本站会员(momomo)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|