版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第四章 数组,网络与计算中心教研室,本章主要内容,4.2 数组的声明和使用,4.1 数组的概念,4.3 数组的方法和属性,4.5 数组的动态可调性,4.4 数组的基本操作,第 2 页,4.6 综合应用,引例1 :随机产生200个ASCII字符,统计大写字母的出现频率。,引例2 :随机产生200个ASCII字符,分别统计大小写字母的出现频率。,引例3 :随机产生200个ASCII字符,分别统计大小写字母和数字的出现频率。,数组的引入,数组并不是一种数据类型,而是一组相同类型数据的集合。用一个统一的名字(数组名)代表相关的一组数据,每个数据(也称元素)用下标来区分。,下标,元素,A,A(0) A(
2、2) A(4),4.1 数组的概念,0,2,3,4,5,1,0,0,0,0,0,0,数组和循环语句结合使用,使得程序书写简洁,并且数组中的数据可反复使用。,1,2,3,4,5,数组的分类,对象,Dim 数组名数据类型说明符 (界限1, 界限2) As 数据类型 Dim a(0 to 9) as single Dim b%(6) Dim c!(3, 0 to 4) Dim arr3(2) 说明:数组元素的数据类型为对象型,界限的格式: 下界 To |上界,数据类型说明符:%、&、!、#、$,数组名:不可与同一作用域内的其它变量同名,界限:其个数决定数组的维度。,4.2 数组的声明和使用,Dim
3、a(0 to 9) as single : dim b%(6) : dim c!(3, 0 to 4),界限的格式: 下界 To |上界,界限:其个数决定数组的维度。,下界:必须是常数0,一般默认。 上界:可以是常量、表达式或变量,但它们的值必须为大于等于0的整数。 Dim num%=2 Dim d%(0 to num*2+3) Dim a%: a=val(inputbox(“input a number”) Dim arr1%(a),4.2 数组的声明和使用,1数组名的命名规则与变量的命名相同。 2数组的大小(元素个数): 每维大小(上界 下界 +1 或者 上界 +1)的乘积 3数据类型说明
4、符 与“As 数据类型” 只能选择其一,如果省略“As 数据类型” 或 数据类型说明符,则数组元素的类型为对象型。 4. 使用:必须先声明后使用,数组语法的说明补充,Dim x(99) As Long,一维数组内存分配:,一维数组声明:,定长数组的声明举例,声明了一个长整型的一维数组 x;共占据99+1个长整型变量的内存空间,二维数组内存分配:,二维数组声明:,Dim mark(4, 5) As Integer,定长数组的声明举例,声明了一个整型的二维数组 mark;共占据56个整型变量的内存空间 。二维数组内存分配以行为单位连续分配,Dim A(9) AS Integer Dim B(0 t
5、o 9) as single Dim c% (0 to 3) Dim d(100), f% (0, 30) dim g (0 to 4, 0 to 5), h(11) as double,定长数组的声明举例,数值型:0 字符型:空串(”) 日期型:01/01/0001 00:00:00 对象型:Nothing,1、隐式初始化:,数组的初始化,错误的初始化?,方法一: Dim arry1%(3) arry1 = 2, 4, 6, 8 方法二: Dim arry2%() = 5, 6, 7, 8 括号中不可以显示声明上界 方法三: Dim k() As Integer = New Integer(
6、) 3, 6, 9, 12 Dim k2() As Integer = New Integer(3) 3, 6, 9, 12,数组赋值的三种方法,Dim arrD%( , ) = New integer ( , ) 1, 2, 3, 4, 5, 6, 7, 8, 9 ,Dim arrD%( , ) = 1, 2, 3, 4, 5, 6, 7, 8, 9 ,Dim arrD%( , ) = New integer ( 2, 2) 1, 2, 3, 4, 5, 6, 7, 8, 9 ,二维数组赋值,2、显式初始化:,一维数组声明并初始化语法格式: Dim 数组名 数据类型说明符 ( ) As 数据
7、类型1 = New 数据类型2 (下标1 ) 表达式1, 表达式2, ,语法说明: 1、不可在显式赋初值时,定义数组每个维度的大小 2、数据类型说明符 与“As 数据类型1”只能选择其一 3、数据类型1 与 数据类型2 必须兼容 4、New子句可以创建一个对象实例 5、表达式: 可以是常量、变量 6、数组的大小由初值的个数决定,二维数组声明并初始化语法格式: Dim 数组名 数据类型说明符 ( , ) As 数据类型1 = New 数据类型2 (下标1, 下标2 ) 表达式01, 表达式02, , 表达式0m, , 表达式n1, 表达式n2, , 表达式nm,数组的初始化,数组的初始化举例,书
8、 71面 指出哪些有错 1:Dim arrA( ) As Integer = 1, 2, 3, 4, 5, 6, 7, 8, 9 2:Dim arrB(8) As Integer = 1, 2, 3, 4, 5, 6, 7, 8, 9 3:Dim arrC%( ) = 1, 2, 3, 4, 5, 6, 7, 8, 9 4:Dim arrD%( ) = New Integer( ) 1, 2, 3, 4, 5, 6, 7, 8, 9 5:Dim arrE%( ) = New Integer(9) 1, 2, 3, 4, 5, 6, 7, 8, 9 6:Dim arrF%( ) = New In
9、teger(4) 1, 2, 3, 4, 5, 6, 7, 8, 9 7:Dim arrG%( ) = New Integer(7) 1, 2, 3, 4,使用形式: Array_name(Subscript) 其中:下标Subscript可以是整型变量、常量或表达式。 例如: 设有下面的数组均有合法定义, 则下面的语句都是正确的。 A(1)=A(2)+B(1)+5 取数组元素运算 A(i)=B(i) 下标使用变量 B(i+1)=A(i+2) 下标使用表达式 A(i)=A(i)+1 数组元素作为计数器 B(i)=B(i)+x 数组元素作为累加器,数组元素的引用,4.3 数组的方法与属性,常用的
10、数组方法:,数组名.GetLength(n) :获取数组指定维度的大小 数组名.GetLowerBound(n) :获取数组指定维度的下界 数组名.GetUpperBound (n):获取数组指定维度的上界 Array.Sort(数组名):对指定的一维数组 按升序排序 Array.reverse(数组名):将指定的一维数组的元素倒序排列,Length :数组总大小,常用的数组属性:,Rank :数组的维度(秩),数组的方法与属性举例,Dim arrB$(4, 5) Console.WriteLine(arrB.GetLength(0) 输出arrB第一维的大小,结果为5 Console.Wri
11、teLine(arrB.GetLength(1) 输出arrB第二维的大小,结果为6 Console.WriteLine(arrB.GetLowerBound(0) 输出第一维的下界为0 Console.WriteLine(arrB.GetUpperBound(0) 输出第一维的上界为4 Console.WriteLine(arrB.GetLowerBound(1) 输出第二维的下界为0 Console.WriteLine(arrB.GetUpperBound(1) 输出第二维的上界为5,通过赋值语句给数组整体赋值。 例 一维数组的初始化 Dim arrA%(8), arrB%(8) arrA
12、 = 1, 2, 3, 4, 5, 6, 7, 8, 9 arrB = arrA 例 二维数组的初始化 Dim arrA(2, 2) As Integer arrA = 1, 2, 3, 4, 5, 6, 7, 8, 9 ,3、数组的整体赋值:,4.4 数组的基本操作赋值操作,1、循环语句赋值:,4.4 数组的基本操作赋值操作,通过单循环给一维数组赋值 例: 通过输入对话框给数组A赋值, A含有3个元素,元素类型为单精度型 Dim a!(2) For i = 0 To 2 a(i) = Val(InputBox(input a number) Next,For i = 1 To 3 对否,一维
13、数组的赋值操作,一维数组,Dim a%(11) For i = 0 To 11 a(i)=i+1 Next,数组名称为a 一维数组,元素个数:12个,下标从0开始。 a(0)=1 a(1)=2 a(2)=3 a(11)=12,输出成一列,一维数组的输出操作,2.输出成一行,For i = 0 To 11 console.writeline( a(i) Next,For i = 0 To 11 console.write( a(i) Next Console.writeline(),3.输出成4行3列,For i = 0 To 11 console.write(a(i) if (i+1) mod
14、 3=0 then console.writeline() Next,定义:Dim a%(11) 且有赋值语句,1、循环语句赋值:,4.4 数组的基本操作赋值操作,通过单循环给一维数组赋值 例4.7: 随机产生12个大写字母 书72面 Dim arrA(11) As CHAR 书 72面,标准ASCII码字符集表,0 1 2 3 4 5 6 7,0 1 2 3 4 5 6 789ABCDEF,A = (1000001)ASCII = ( )10,65,a = (1100001)ASCII = ( )10,97,表1-4,1、循环语句赋值:,4.4 数组的基本操作赋值操作,通过单循环给一维数组赋
15、值 例4.7: 随机产生12个大写字母 Dim arrA(11) As char For i = 0To 11 arrA(i) = Chr( Int( Rnd( ) *26)+ 65) ) Next,1、循环语句赋值:,4.4 数组的基本操作赋值操作,通过双重循环给二维数组赋值 a(0,0)=1 a(0,1)=2 a(0,2)=3 a(1,0)=4 a(1,1)= 5 a(1,2)= 6 例: 以行为单位赋值 Dim A(1, 2) As Integer For i = 0 To 1 For j = 0 To 2 A(i, j) = i* 3 + j+1 Next Next,例: 以列为单位赋
16、值 For j= 0 To 2 For i = 0 To 1 A(i, j) = I*3+j+1 Next Next,二维数组的赋值操作,Dim s(0 to 3,0 to 4) as integer For i = 0 To 3 For j = 0 To 4 s(i, j) = i * 5 + j+1 Next Next,演示,数组名称为s 二维数组,元素个数:4*5个。 s(0,0)=1 s(0,1)=2 s(0,2)=3 s(0,3)=4 s(0,4)=5 s(1,0)=6 s(1,1)=7 s(1,2)=8 s(1,3)=9 s(1,4)=10 s(2,0)=11 s(2,1)=12
17、s(2,2)=13 s(2,3)=14 s(2,4)=15 s(3,0)=16 s(3,1)=17 s(3,2)=18 s(3,3)=19 s(3,4)=20,2.二维数组 72例子4.8,二维数组的输出操作,For i = 0 To arrA.GetUpperBound(0) For j = 0 To arrA.GetUpperBound(1) str1 = Str(arrA(i, j) Console.Write(Space(5 - Len(str1) & str1) Next Console.WriteLine() Next,数组的加法操作,C = A+ B,思考:如何实现?,Dim a
18、%(1 , 2), b%(1 , 2) Dim c%(1 , 2), i%,j% 数组a,数组b的赋值语句省略 For i=0 to 1 for j=0 to 2 c(i,j)=a(i,j)+b(i,j) next next,a00 a01 a02 a10 a11 a12 b00 b01 b02 b00 b11 b12 a00+ b00 a01+b01 a02+b02 a10+b10 a11+b11 a12+b12,二维数组的转置-行列互换,Dim A%(1, 2), B%(2, 1) For i = 0 To 1 For j = 0 To 2 B(j,i) = A(i,j) Next Nex
19、t,二维数组的行列互换在数学上也称为矩阵的转置,转置,A10 A11 A12,A00 A01 A02,a00 a01 a02 a10 a11 a12,b00= b01= b10= b11= b20= b21=,求最大值、最小值及位置,例:求6个数中的最大值及位置?,A,Max,I,87,45,76,32,74,87,90,dim a%(5) ,i%,num%,pos% 赋值语句省略 num=a(0): pos=0 for i=1 to 5 if num a(i) then num=a(i): pos=i next,求最小值及位置?,数组元素的倒置,A,I,9 2-1,I,9 I-1,数组排序,
20、排序就是将一堆无序的数据变成有序。,算法思想: 1)对有n个数的序列,从中选出最小(升序)或最大(降序)的数,与第1个数交换位置; 2)除第1 个数外,其余n-1个数中选最小或最大的数,与第2个数交换位置; 3)依次类推,选择了n-1次后,这个数列已按升序排列。,选择法排序,I,I,0,I,1,I,2,I,3,以升序排序为例 Dim a(0 to 5) as integer,4,i 外循环变量 j 内循环变量 iMin 每轮最小元素的下标 t 交换时的中间变量,i = 0 设置imin=0 j: 1-5 如果a(j)a(imin) 则将当前下标j赋值给 imin 找到该轮最小元素下标4后,im
21、in=4 要将a(imin)与a(0)互换 i = 1 设置imin=1 j: 2-5 找到该轮最小元素下标3后,置imin=3,并将a(imin)与a(1)互换 i = 2 设置imin=2 j: 3-5 i = 3 设置imin=3 j: 4-5 i = 4 设置imin=4 j : 5-5 故j: 从i+1 至 5,I,I,0,I,1,I,2,I,3,以升序排序为例 Dim a%(5),4,i 外循环变量 j 内循环变量比较的元素 下标 iMin 每轮最小元素的下标 t 交换时的中间变量,for i=0 to 4 imin=i for j=i+1 to 5 if a(j)a(min) t
22、hen imin=j next t=a(i) a(i)=a(imin) a(imin)=t Next i,选择法排序的程序框架,i 外循环变量 j 内循环变量 iMin 每轮最小元素的下标 t 交换时的中间变量 For i = 0 To 4 iMin=i For j = i+1 To 5 If a(j) a(iMin) Then iMin = j End If Next t = a(i) a(i) = a(iMin) a(iMin) = t Next,I,I,0,I,1,I,2,I,3,4,降序排列?,算法思想重点理解:(注意:数组下标的下界为0) (1)比较过程中,从数组的第0个位置起,依次
23、选出每趟选择的最小/大的数进行放置。 (2)第i趟选择完毕,将已经排序好的元素后的第一个未排序元素的位置(即下标为I )作为该趟比较的结果(即该趟最小/大的数)存放的位置 (3)第i趟选择,从下标为i的元素至最后一个元素 中,选择当前的最小/大值,选择法排序注意,算法思想:(将相邻两个数比较,小的调到前头) 1)有n个数,第一趟将每相邻两个数比较,小的调到前头,经n-1次两两相邻比较后,最大数已“沉底”,放在最末位置,小数“上浮”; 2)第二趟对余下的n-1个数(不包括最大数)按上法比较,经n-2次两两相邻比较后得次大的数; 3)依次类推,n个数共进行n-1趟比较,在第j趟中要进行n-j次两两
24、比较。,冒泡法排序,冒泡法排序,8,6,9,3,2,7,6,3,2,7,8,9,3,2,6,7,8,9,2,3,6,7,8,9,6,8,3,2,7,9,6个数 总共经过几趟比较? 变量i 每趟比较时,a(j) 与 a(j+1)比较,变量j的范围?,i = 0 1 2 3 4 j= 0 to 4 0 to 3 0 to 2 0 to 1 0 to 0 j为: 0 to 4-i,冒泡法程序?,for i= 0 to 4 for j=0 to 4-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,算法思想重点
25、理解:注意:数组下标的下界为0 (1)第i趟冒泡完毕后大数的位置放在数组的后面 (3)第i趟冒泡比较时,两两比较的范围: 下标为0 至 数组名.length-2 (n表示为n个数) a(j) a(j+1) j的取值范围? j: 0 to 数组名.length-2-I,冒泡法排序注意,5.2 动态数组,所谓动态数组是指在程序的运行过程中,可更改数组的大小(数组元素的多少),从而适应数据的多少无法确定的情况。,4.5 动态数组,1、在Dim语句中,使用变量来定义数组维度的大小,Dim n% n = textbox3.text Dim array1%(n-1) 后续如果还需要改数组的元素个数,如何改
26、?,动态数组的创建,2、ReDim语句:,ReDim语句可更改具有明确界限和无明确界限数组维度的大小。 语法格式: ReDim Preserve 数组名 (下标1, 下标2) Dim n% n = textbox3.text Dim array1%(n-1) 给数组元素赋值 ReDim preserve array1%(n),动态数组的创建,2、ReDim语句:,例子一: Dim n% n = textbox3.text Dim array1%(n-1) 给数组元素赋值 redim preserve array1%(n) 例子二: dim array1%() Dim n%: n = textb
27、ox3.text redim array1%(n) 给数组元素赋值 Redim array1%(100),动态数组的创建,2、ReDim语句:,ReDim语句可更改具有明确界限和无明确界限数组维度的大小。 语法格式: ReDim Preserve 数组名 (下标1, 下标2) 使用ReDim更改数组大小的使用方法: 第一步:先Dim声明一个数组(有明确界限或者无明确界限均可) 第二步:再用ReDim重新声明其大小,动态数组的创建,1. ReDim是一条可执行语句,只能出现在过程中,并可反复出现。 2. ReDim中的下标可以是常量,也可以是有了确定值的变量 3. 每次使用ReDim语句都会使原
28、来数组中值丢失,可以在ReDim后加Preserve 参数来保留数组中的数据。但此时,只能改变最后一维的大小。 4.不能更改数组的维数和类型,Redim语句的语法说明,北宋 150年 贾宪,南宋 1261年 杨辉,4.6 综合应用,杨辉三角型,4.6 综合应用,1,1,1,1,1,1,1,1,7,6,5,4,3,2,1,1,3,6,10,15,21,35,20,10,4,1,1,5,15,35,21,6,1,1,7,1,杨辉三角形的变形,Dim a%(9, 9) Dim i, j% For i = 0 To 9 a(i, 0) = 1 a(i, i) = 1 Next For i = 0 To
29、 9 For j = 1 To i - 1 a(i, j) = a(i - 1, j - 1) + a(i - 1, j) Next Next,杨辉三角形各元素赋值(10行),运行结果,数组的声明:,本章小结,Dim 数组名数据类型说明符 (界限1, 界限2) As 数据类型,数组的操作:,数组输入 数组输出 数组转置 数组倒置 最大值、最小值及位置 排序,数组的动态可调:,1、在Dim语句中使用变量来定义数组维度的大小 2、ReDim Preserve 数组名 (下标1, 下标2),Dim MyGraphics As Graphics 声明图形变量 MyGraphics = Me.Creat
30、eGraphics() 将当前窗体设置为图形对象 Dim MyFont As New Font(隶书, 14, FontStyle.Regular, GraphicsUnit.Point) 声明字体对象 Dim MyBrush As New SolidBrush(Color.Black) 声明黑色的刷子对象 Dim MyPos As New PointF(0, 0) 声明一个点对象,杨辉三角形输出设置(10行),Dim strChars$, intLen% For i = 1 To arrYangHui.GetUpperBound(0) MyPos.X = 0 For j = 1 To i s
31、trChars = Trim(Str(arrYangHui(i, j) intLen = Len(strChars) strChars = Space(8 - intLen) & strChars MyGraphics.DrawString(strChars, MyFont, MyBrush, MyPos) MyPos.X += 8 * MyFont.Size * 2 / 3 字体的全身大小的2/3 Next MyPos.Y += MyFont.GetHeight() 字体的行距 Next,杨辉三角形的一般输出(10行),攀登,勇敢者的游戏,数组的声明:,本章小结,Dim 数组名数据类型说明符
32、 (界限1, 界限2) As 数据类型,数组的操作:,数组输入 数组输出 数组转置 数组倒置 最大值、最小值及位置 排序,数组的动态可调:,1、在Dim语句中使用变量来定义数组维度的大小 2、ReDim Preserve 数组名 (下标1, 下标2),Thank You !,在控制台窗口输出一行,Sub Main() Dim arrA( ) As Integer = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 For i = 0 To 12 Console.Write( arrA(i) & ) Console.Write( arrA(i) & vbTab)
33、 Console.Write( arrA(i) & ControlChars.Tab) Next Console.Readline() End Sub,4.4 数组的基本操作输出操作,2.在即时窗口输出一列,Private Sub Form1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Click Dim arrA( ) As Integer = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 For i = 1 To arrA.GetUpperBound(0) D
34、ebug.WriteLine( arrA(i) Next End Sub,4.4 数组的基本操作输出操作,例:输入n个学生的成绩,要求: 求这n个成绩的平均值 统计有多少人高于平均成绩。,动态数组举例,运行结果,Private Sub txtNum_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtNum.KeyPress If e.KeyChar = vbCr Then Dim Temp% Temp = Val(txtNum.Text) ReDim Pr
35、eserve intScore(Temp - 1) txtScore.Focus() End If End Sub,Private Sub txtScore_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtScore.KeyPress If e.KeyChar = vbCr Then If intNum intScore.Length Then intScore(intNum) = Val(txtScore.Text) intNum += 1 txtSc
36、ore.Text = Else MsgBox(“成绩已输入完毕,该输入值将被丢弃。) txtScore.Text = txtScore.ReadOnly = True End If End If End Sub,Dim intNum, intScore() As Integer,动态数组举例,Private Sub btnStats_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStats.Click Dim i%, intSum%, sngAvg!, intCount% intSum
37、= 0 For i = 0 To intNum - 1 intSum += intScore(i) Next sngAvg = intSum / intNum intCount = 0 For i = 0 To intNum - 1 If intScore(i) sngAvg Then intCount += 1 Next txtAverage.Text = sngAvg txtSuperNum.Text = intCount End Sub,Private Sub btnExit_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnExit.Click Me.Close() End Sub,Dim intNum, intScore() As Integer,动态数组举例,马鞍点?,4.6 综合应用,例:求一个5行6列的矩阵所有的马鞍点?,方法一: 1、求出每一行的最小值、行号、列号 2、求出每一列的最大值、行号、列
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小学阅读技巧复习
- 2026明矾石在陶瓷工业中的创新应用研究报告
- 《节约用水小课题》课件
- 2026报废汽车拆解回收产业链深度分析及投资价值评估报告
- 微分方程欧拉方程
- 2026重庆市九龙坡区石桥铺街道招聘1人考试备考试题及答案解析
- 小古文《荷》课件
- 2025-2026学年美猴王金箍棒教学设计
- 2027中国远洋海运集团秋季校园招聘1791人(广州27人)笔试备考题库及答案解析
- 2025-2026学年美式牛肉饼教学设计
- 红色科技风学校月考表彰大会
- 煤田水文地质工程地质勘查规范
- APISTD667-2022板式和框架式热交换器
- 清华大学-林来梵-本科《宪法》教学案例-2026修订版
- AI技术开启儿童文学创作新时代
- GB/T 1232.2-2025未硫化橡胶用圆盘剪切黏度计进行测定第2部分:初期硫化特性的测定
- 职业技术学院新能源汽车技术专业人才培养调研报告
- 蔚来汽车买车合同协议
- 污水处理站员工培训实施方案
- YDT 4864-2024通信用光纤预制棒的测量方法
- 环保从我做起
评论
0/150
提交评论