VB.NET 北京印刷学院_第1页
VB.NET 北京印刷学院_第2页
VB.NET 北京印刷学院_第3页
VB.NET 北京印刷学院_第4页
VB.NET 北京印刷学院_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

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

文档简介

VisualBasic程序设计简明教程第三版北京印刷学院计算机系范士喜fanshixi@1第5章数组和自定义类型

5.1数组的概念5.2数组的基本操作和排序5.3列表框和组合框控件5.4自定义类型及其数组5.5综合应用本章目录25.1数组的概念1.引例例5.1

求100个学生的平均成绩,并统计高于平均分的人数。用简单变量和循环,求平均成绩程序段如下:

aver=0Fori=1To100mark=InputBox("输入学生成绩")aver=aver+markNextiaver=aver/100问题(1)mark只能放一个学生的成绩,无法统计高于平均分的人数。(2)若用简单变量保存100个学生的成绩,则需定义100个变量和使用100句输入语句。由此引入了数组。本章目录mark3用数组解决问题的程序如下:

Dimmark(99)AsInteger'声明数组markDimaver!,overn%,i%aver=0Fori=0To99'输入成绩,求分数和

mark(i)=InputBox("输入学生的成绩")aver=aver+mark(i)Nextiaver=aver/100'求100人的平均分

overn=0Fori=0To99'统计高于平均分的人数

Ifmark(i)>averThenovern=overn+1Nexti

MsgBox("平均分:"&aver&"高于平均分人数:"&overn)

本章目录mark(99)mark(98)…mark(2)mark(1)mark(0)4数组:

不是一种数据类型,而是一组相同类型的变量的集合。作用:用一个数组名代表逻辑上相关的一批数据,用下标表示该数组中的各个元素,和循环语句结合使用,使得程序书写简洁。使用:必须先声明后使用本章目录55.1.2数组声明一维数组

Dim数组名([下标下界To]

上界)

[As类型]说明:下标下界缺省为0,下标上界为常数。数组大小为:下标上界-下标下界+1。作用:声明了数组名、类型、维数、数组大小在内存分配一块连续的区域。本章目录6例:Dimmark(99)AsInteger

声明了一维定长整型数组mark

,共有100个元素,下标范围为0To99;mark数组的各元素是mark(0),mark(1),…,mark(99);mark(i)表示由下标i的值决定是哪一个元素。mark数组内存分配如下:mark(99)mark(98)…mark(2)mark(1)mark(0)每个数组元素有一个唯一的顺序号,下标不能超出数组声明时的上、下界范围,否则会产生“下标越界”错误

。数组元素的使用规则与同类型的简单变量相同本章目录7多维数组声明

Dim数组名(([下标1下界To]

上界1,([下标下界2To]

上界2…)

[As类型]下标数决定了数组的维数,数组的大小为每一维大小的乘积。例Dimx(2,4)AsLong声明了一个长整型的二维数组

x;共占据3×5个长整型变量的空间

x(1,4)x(1,3)x(1,2)x(1,1)x(1,0)x(2,4)x(2,3)x(2,2)x(2,1)x(2,0)x(0,4)x(0,3)x(0,2)x(0,1)x(0,0)本章目录85.1.3动态数组及声明

建立动态数组要分两步:用Dim语句声明数组,但不能指定数组大小Dim

数组名()As数据类型用ReDim语句动态地分配元素个数ReDim

数组名

(下标[,下标2…])例:Dims()AsSingleSubForm_Load()

ReDims(4,8)

EndSub

本章目录9定义动态数组大小注意:

Dim

是说明语句,可出现在程序的任何地方,而ReDim

是执行语句,只能在过程中在过程中可多次使用ReDim语句来改变数组的大小,但不能改变维数和类型可在ReDim

后加Preserve参数用来保留数组中的数据,若使用Preserve参数后,只能改变最后一维的大小。例5.2编一个程序,显示有n个数的非波那契数序列本章目录10PrivateSubCommand1_Click()Dimx()AsIntegerDimn%,i%n=Val(InputBox("输入序列数"))

ReDim

x(n-1)x(0)=1x(1)=1Fori=2Ton-1

x(i)=x(i-1)+x(i-2)NextiFori=0Ton-1Printx(i),If(i+1)Mod5=0ThenPrintNextEndSub115.2数组的基本操作1、数组的输入

通过TextBox控件或InputBox函数输入Dims(3,4)ASIntegerFori=0To3Forj=0To4

s(I,j)=

InputBox("输入"&i&“,"&j&"元素")NextjNexti本章目录122、数组的输出例5.3

形成5×5的方阵,分别输出方阵中各元素、上三角和下三角元素

本章目录方阵规律:第一行的元素为0~4,以后每一行是前一行对应元素增加5上三角规律:

每一行的起始列与行号相同,只要控制内循环的初值

用Tab函数或Space定位控制输出的空格,13PrivateSubForm_Click()

Dimsc%(4,4)

Picture1.Print"产生方阵数据"

Fori=0To4

Forj=0To4

sc(i,j)=i*5+j

Picture1.PrintTab(j*5);sc(i,j);

Nextj

Picture1.Print'换行

Nexti

Picture2.Print"显示上三角数组元素"

Fori=0To4

Forj=iTo4

Picture2.PrintTab(j*5);sc(i,j);

Nextj

Picture2.Print'换行

Nexti

Picture3.Print"显示下三角数组元素"

Fori=0To4

Forj=0Toi

Picture3.PrintTab(j*5);sc(i,j);

Nextj

Picture3.Print

Nexti

EndSub143、求数组和、最值、位置例5.4

求一维数组中各元素之和、最小数组元素,并将最小值数组元素与数组中第一个元素交换求元素和通过循环将每个元素进行累加求数组中最小元素假设第一个元素为最小,然后将该数与其他元素逐一比较,若发现小于最小值,就用新值替换最小值,同时记录下标值。求最大值的方法与求最小值相似本章目录15PrivateSubCommand1_Click()

Dima,i%,min%,imin%,sum%,t%a=Array(26,43,61,87,33,19,37,59,76,69)min=a(0):imin=0:sum=a(0)'假定a(0)元素为最小值

Fori=1ToUBound(a)sum=sum+a(i)Ifa(i)<minThenmin=a(i)

imin=iEndIfNextit=a(0):a(0)=a(imin):a(imin)=tPrint"数组元素和=";sum,"最小元素值为:";a(0)EndSub164、交换元素下标0123456789初值26436187331937597669下标0123456789交换19436187332637597669本章目录175、数组排序排序是将一组数按递增或递减的次序排列,例如按学生的成绩、球赛积分等排序。排序的算法有许多,常用的有选择法、冒泡法、插入法、合并排序等。(1)选择法排序基本思想:每次在若干个无序数中找最小(大)数,并放在相应的位置。本章目录18例对于有n个数的数组,按递增次序排序的步骤:1)从n个数中找出最小数的下标,出了内循环,最小数与第1个数交换位置;通过这一轮排序,第1个数已确定好。2)除已排序的数外,其余数再按步骤1)的方法选出最小的数,与未排序数中的第1个数交换位置。3)重复步骤2),最后构成递增序列。选择法演示本章目录19例5.5

对已知存放在数组中的6个数,用选择法按递增顺序排序。

原始数据869327a(1)a(2)a(3)a(4)a(5)a(6)第1轮比较269387

a(2)a(3)a(4)a(5)a(6)第2轮比较239687

a(3)a(4)a(5)a(6)第3轮比较236

987

a(4)a(5)a(6)第4轮比较236789

a(5)a(6)第5轮比较236789选择法排序过程示意

本章目录20PrivateSubCommand1_Click()Dima(),iMin%,n%,i%,j%,t%a=Array(8,6,9,3,2,7)n=UBound(a)'获得数组的下标上界

Fori=0Ton-1'进行n-1轮比较

iMin=i'对第i轮比较时,初始假定第i个元素最小

Forj=i+1Ton'在数组i+1~n个元素中选最小元素的下标

Ifa(j)<a(iMin)TheniMin=jNextjt=a(i)'i+1~n个元素中选出的最小元素与第i个元素交换

a(i)=a(iMin)

a(iMin)=tNextiFori=LBound(a)ToUBound(a)Printa(i);Next

EndSub21(2)冒泡法排序基本思想是:

1)从第一个元素开始,对数组中两两相邻的元素比较,将值较小的元素放在前面,值较大的元素放在后面,一轮比较比较完毕,一个最大的数沉底成为数组中的最后一个元素,一些较小的数如同气泡一样上浮一个位置。2)n个数,经过n-1轮比较后完成排序。冒泡法演示本章目录22冒泡法排序

原始数据869327a(1)a(2)a(3)a(4)a(5)a(6)第1轮比较683279a(1)a(2)a(3)a(4)a(5)

第2轮比较632789a(1)a(2)a(3)a(4)

第3轮比较326789a(1)a(2)a(3)

第4轮比较236789a(1)a(2)

第5轮比较236789例5.6用冒泡排序法实现例5.5的问题。本章目录23PrivateSubCommand1_Click()Dima(),iMin%,n%,i%,j%,t%a=Array(8,6,9,3,2,7)n=UBound(a)'获得数组的下标上界

Fori=0Ton-1'有n+1个数,进行n趟比较

Forj=0Ton-1-i'在每一趟比较对n-1-i个元素中两两相邻比较,大数沉底

Ifa(j)>a(j+1)Thent=a(j):a(j)=a(j+1):a(j+1)=t'次序不对交换

EndIfNextjNextiFori=0Ton:Printa(i);:NextiEndSub24(3)插入数据

插入数据基本思想是:1)首先查找待插入数据在数组中的位置k;2)然后从最后一个元素开始往前直到下标为k的元素依次往后移动一个位置;3)第k个元素的位置腾出,将数据插入。例5.7在有序数组a中插入数值x。

本章目录数据插入演示25PrivateSubForm_Click()Dima(),i%,k%,x%,n%a=Array(1,4,7,9,12,23,56)n=UBound(a)'获得数组的上界

x=14Fork=0Ton'查找欲插入数x在数组中的位置

Ifx<a(k)ThenExitForNextk

ReDimPreservea(n+1)'数组增加一个元素

Fori=nTokStep-1'数组元素后移一位,腾出位置

a(i+1)=a(i)Nexti

a(k)=x'数x插入在对应的位置,使数组保持有序

Fori=0Ton+1'显示插入后的各数组元素

Printa(i);NextiEndSub26(4)删除数据删除操作首先也是要找到欲删除的元素的位置k;然后从k+1到n个位置开始向前移动;最后将数组元素减1。

例5.8要将值为13的元素删除。

本章目录数据删除演示27PrivateSubForm_Click()Dima(),i%,k%,x%,n%a=Array(1,4,7,9,12,14,23,56)n=UBound(a)'获得数组的上界

x=14Fork=0Ton'查找欲删除的数组元素位置

Ifx=a(k)ThenExitForNextkIfk>nThenMsgBox("找不到此数据"):ExitSubFori=k+1Ton'将x后的元素左移

a(i-1)=a(i)Nextin=n-1

ReDimPreservea(n)'数组元素减少一个

Fori=0Ton'显示删除后的各数组元素

Printa(i);NextiEndSub285.3列表框和组合框列表框和组合框实质是一维字符串数组的使用列表框可显示多个选项供用户选择,不能直接修改其中的内容。组合框组合了文本框和列表框的特性而形成的一种控件。组合框有3种式样。本章目录291、列表框和组合框重要属性(1)

ListList是一个集合(2)ListIndex

选项的序号(从0开始)(3)ListCount项目数量

(4)Sorted排序(5)Text被选定的文本内容

本章目录30List1.ListIndex=2List1.ListCount=6List1.Sorted=FalseList1.Text为

"C/C++程序设计"

List1.List(List1.ListIndex)等于List1.Text本章目录312、常用方法

AddItem方法把一个项目加入列表

对象.AddItem

项目字符串[,索引值]索引值:决定新增项在列表中的位置,如果省略,则新增项目添加在最后。

RemoveItem方法删除列表中指定项目对象.RemoveItem

索引值

Clear

清除列表中所有项目例如:List1.Clear 全部清除本章目录323、重要事件列表框:Click、DblClick组合框:Click例5.9编写一个能对列表框进行项目添加、修改和删除的应用程序。关键:1)获得选中的下标ListIndex2)不能直接修改列表框,先将选项显示在文本框中,更改文本框中内容后,再更新列表框

本章目录334、应用例5.10编写一个使用屏幕字体、字号的程序

例5.11使用列表框实现排序、查找、删除例5.12使用组合框对省和直辖市名称管理本章目录345.4自定义类型及数组1、概念和定义数组存放性质相同的数据集合。若不同类型信息作为一个整体来描述,例如姓名、性别、出生年月等,通过Type语句来实现。

Type自定义类型名

元素名1As数据类型名

元素名nAs数据类型名

EndType本章目录35例如,定义一个有关学生信息的类型:TypeStudType

'StudType为自定义类型名

NameAs

String*5

'姓名

SexAs

String*1

'性别

TelephoneAs

Long

'电话

SchoolAs

String*10

'学校EndType自定义类型不能在过程内定义,一般放在标准模块文件,默认为Public;若在窗体模块的通用声明段定义,必须加Private。

本章目录362、自定义类型变量的使用

定义了自定义类型,就可在变量的声明时使用。

Dim变量名As

自定义类型名例如,如下语句:

DimS1AsStudType,S2AsStudType

声明S1、S2为两个同种类型的变量本章目录37注意:不要混淆StudType

和S1,前者如同Integer等的类型名,后者根据该类型分配所需的内存空间,存储各成员数据。(2)类型变量和数组相同之处它们都是由若干个成员组成;不同之处,前者的成员代表不同性质、不同类型的数据,以各个不同的成员名表示;而数组一般存放的是同种性质、同种类型的数据,以下标表示不同的元素。本章目录383、自定义类型变量成员的引用

引用自定义类型变量中的某个成员,形式如下:

自定义类型变量名.成员名例如,S1.NameS1变量中的姓名

S1.S

温馨提示

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

评论

0/150

提交评论