vb算法数组实例
VB数组快速排序算法(转)

VB数组快速排序算法(转)VB数组快速排序算法VB数组排序模块,使用的是快速排序法,支持 Variant、Double、Long、String……等多种数据类型数组排序。
Option ExplicitPrivate Sub QuicksortInt(list() As Integer, ByVal min As Integer, ByVal max As Integer)Dim med_value As IntegerDim hi As IntegerDim lo As IntegerDim i As Integer' If the list has no more than CutOff elements,' finish it off with SelectionSort.If max <= min Then Exit Sub' Pick the dividing value.i = Int((max - min + 1) * Rnd + min)med_value = list(i)' Swap it to the front.list(i) = list(min)lo = minhi = maxDo' Look down from hi for a value < med_value.Do While list(hi) >= med_valuehi = hi - 1If hi <= lo Then Exit DoLoopIf hi <= lo Thenlist(lo) = med_valueExit DoEnd If' Swap the lo and hi values.list(lo) = list(hi)' Look up from lo for a value >= med_value.lo = lo + 1Do While list(lo) < med_valuelo = lo + 1If lo >= hi Then Exit DoLoopIf lo >= hi Thenlo = hilist(hi) = med_valueExit DoEnd If' Swap the lo and hi values.list(hi) = list(lo)Loop' Sort the two sublists.QuicksortInt list(), min, lo - 1QuicksortInt list(), lo + 1, maxEnd SubPrivate Sub QuicksortSingle(list() As Single, ByVal min As Integer, ByVal max As Integer)Dim med_value As SingleDim hi As IntegerDim lo As IntegerDim i As Integer' If the list has no more than CutOff elements, ' finish it off with SelectionSort.If max <= min Then Exit Sub' Pick the dividing value.i = Int((max - min + 1) * Rnd + min)med_value = list(i)' Swap it to the front.list(i) = list(min)lo = minhi = maxDo' Look down from hi for a value < med_value. Do While list(hi) >= med_valuehi = hi - 1If hi <= lo Then Exit DoLoopIf hi <= lo Thenlist(lo) = med_valueExit DoEnd If' Swap the lo and hi values.list(lo) = list(hi)' Look up from lo for a value >= med_value. lo = lo + 1Do While list(lo) < med_valuelo = lo + 1If lo >= hi Then Exit DoLoopIf lo >= hi Thenlo = hilist(hi) = med_valueExit DoEnd If' Swap the lo and hi values.list(hi) = list(lo)Loop' Sort the two sublists.QuicksortSingle list(), min, lo - 1QuicksortSingle list(), lo + 1, maxEnd SubPrivate Sub QuicksortDouble(list() As Double, ByVal min As Integer, ByVal max As Integer)Dim med_value As DoubleDim hi As IntegerDim lo As IntegerDim i As Integer' If the list has no more than CutOff elements,' finish it off with SelectionSort.If max <= min Then Exit Sub' Pick the dividing value.i = Int((max - min + 1) * Rnd + min)med_value = list(i)' Swap it to the front.list(i) = list(min)lo = minhi = maxDo' Look down from hi for a value < med_value. Do While list(hi) >= med_valuehi = hi - 1If hi <= lo Then Exit DoLoopIf hi <= lo Thenlist(lo) = med_valueExit DoEnd If' Swap the lo and hi values.list(lo) = list(hi)' Look up from lo for a value >= med_value. lo = lo + 1Do While list(lo) < med_valuelo = lo + 1If lo >= hi Then Exit DoLoopIf lo >= hi Thenlo = hilist(hi) = med_valueExit DoEnd If' Swap the lo and hi values.list(hi) = list(lo)Loop' Sort the two sublists.QuicksortDouble list(), min, lo - 1QuicksortDouble list(), lo + 1, maxEnd SubPrivate Sub QuicksortString(list() As String, ByVal min As Integer, ByVal max As Integer)Dim med_value As StringDim hi As IntegerDim lo As IntegerDim i As Integer' If the list has no more than CutOff elements,' finish it off with SelectionSort.If max <= min Then Exit Sub' Pick the dividing value.i = Int((max - min + 1) * Rnd + min)med_value = list(i)' Swap it to the front.list(i) = list(min)lo = minhi = maxDo' Look down from hi for a value < med_value.Do While list(hi) >= med_valuehi = hi - 1If hi <= lo Then Exit DoLoopIf hi <= lo Thenlist(lo) = med_valueExit DoEnd If' Swap the lo and hi values.list(lo) = list(hi)' Look up from lo for a value >= med_value.lo = lo + 1Do While list(lo) < med_valuelo = lo + 1If lo >= hi Then Exit DoLoopIf lo >= hi Thenlo = hilist(hi) = med_valueExit DoEnd If' Swap the lo and hi values.list(hi) = list(lo)Loop' Sort the two sublists.QuicksortString list(), min, lo - 1QuicksortString list(), lo + 1, maxEnd SubPrivate Sub QuicksortVariant(list() As Variant, ByVal min As Integer, ByVal max As Integer)Dim med_value As VariantDim hi As IntegerDim lo As IntegerDim i As Integer' If the list has no more than CutOff elements, ' finish it off with SelectionSort.If max <= min Then Exit Sub' Pick the dividing value.i = Int((max - min + 1) * Rnd + min)med_value = list(i)' Swap it to the front.list(i) = list(min)lo = minhi = maxDo' Look down from hi for a value < med_value. Do While list(hi) >= med_valuehi = hi - 1If hi <= lo Then Exit DoLoopIf hi <= lo Thenlist(lo) = med_valueExit DoEnd If' Swap the lo and hi values.list(lo) = list(hi)' Look up from lo for a value >= med_value. lo = lo + 1Do While list(lo) < med_valuelo = lo + 1If lo >= hi Then Exit DoLoopIf lo >= hi Thenlo = hilist(hi) = med_valueExit DoEnd If' Swap the lo and hi values.list(hi) = list(lo)Loop' Sort the two sublists.QuicksortVariant list(), min, lo - 1QuicksortVariant list(), lo + 1, maxEnd SubPrivate Sub QuicksortLong(list() As Long, ByVal min As Integer, ByVal max As Integer)Dim med_value As LongDim hi As IntegerDim lo As IntegerDim i As Integer' If the list has no more than CutOff elements,' finish it off with SelectionSort.If max <= min Then Exit Sub' Pick the dividing value.i = Int((max - min + 1) * Rnd + min)med_value = list(i)' Swap it to the front.list(i) = list(min)lo = minhi = maxDo' Look down from hi for a value < med_value. Do While list(hi) >= med_valuehi = hi - 1If hi <= lo Then Exit DoLoopIf hi <= lo Thenlist(lo) = med_valueExit DoEnd If' Swap the lo and hi values.list(lo) = list(hi)' Look up from lo for a value >= med_value. lo = lo + 1Do While list(lo) < med_valuelo = lo + 1If lo >= hi Then Exit DoLoopIf lo >= hi Thenlo = hilist(hi) = med_valueExit DoEnd If' Swap the lo and hi values.list(hi) = list(lo)Loop' Sort the two sublists.QuicksortLong list(), min, lo - 1QuicksortLong list(), lo + 1, maxEnd Sub' Sort an array of integers.Public Sub SortIntArray(list() As Integer) QuicksortInt list, LBound(list), UBound(list) End Sub' Sort an array of longs.Public Sub SortLongArray(list() As Long) QuicksortLong list, LBound(list), UBound(list) End Sub' Sort an array of singles.Public Sub SortSingleArray(list() As Single) QuicksortSingle list, LBound(list), UBound(list) End Sub' Sort an array of doubles.Public Sub SortDoubleArray(list() As Double) QuicksortDouble list, LBound(list), UBound(list) End Sub' Sort an array of strings.Public Sub SortStringArray(list() As String) QuicksortString list, LBound(list), UBound(list) End Sub' Sort an array of variants.Public Sub SortVariantArray(list() As Variant) QuicksortVariant list, LBound(list), UBound(list) End Sub。
VB_数组

功能:声明一个二维数组或多维数组并分配相应的存储单元。
说明:参数与一维数组完全相同。下标的个数决定了数组的 维数,多维数组最大维数为60。每一维的大小为:上界-下 界+ 1 ;数组的大小(数组元素的总个数)为每一维大小的 乘积。 例如:Dim a(2,3) As Single
二维数组在内存的存放顺序是“先行后列”。例如数组a 的各元素在内存中的存放顺序是:
数组声明语句完成四个任务:
① 建立数组名。 ② 建立数组的数据类型。 ③ 指定数组中元素的数目。 ④ 初始化数组中每个元素的值(数值数组元素为 0,字符串数组元素为空字符串,Variant数组元 素的值为特别值Empty)。
4.1.2 静态数组和动态数组
1. 静态数组声明 在声明时确定了大小的数组称为静态数组 (1) 一维数组的声明 (无隐式声明) Dim 数组名([下界 To] 上界) [As 数据类型] 或: Dim 数组名[数据类型符] ([下界 To] 上界) 例:Dim a(1 To 10) As Integer 1是下标的下界 ' 声明了a数组有10个元素 数组元数的数据类型
2. 数组元素初始化 系统默认的数组初值:0,空字符串,Empty。 若需给数组的各元素赋具体值,常用循环语句实现。 例如: Dim A(10) As Integer
Dim i As Integer
For i=0 To 10 A(i)= i * i Next i
4.2.2 数组的输入、输出和复制
数组分类: VB中的数组,按不同的方式可分为以下几类: 按数组的大小(元素个数)是否可以改变来分为:静 态(定长)数组、动态(可变长)数组。 按元素的数据类型可分为:数值型数组、字符串数组、 日期型数组、变体数组等。 按数组的维数可分为:一维数组、二维数组、多维数 组。 对象数组:菜单对象数组、控件数组。
vb数组

VB实验四 数组一、实验目的和要求数组的基本概念数组的声明数组的基本操作重定义数组大小与数组相关的函数/常用算法二、实验内容1、求10位同学的最高分、平均分以及输出高于平均分的同学的分数。
参照以下代码,修改它,并完成10位同学的最高分,平均分和输出高于平均分的同学的分数的功能。
(项目保存为sy4-1 成绩处理)2、上三角和下三角的输出。
参照如下界面和部分代码,分别在三个label上显示,5行5列的二维数组,上三角数组元素,下三角数组元素。
界面可自行设计,参考以下图(项目保存为sy4-2 上下三角)输出方阵sc中的下三角元素,参考代码如下:For i=0 to 4For j=0 to iSc(i,j)=i*5+jLabel1.text &=sc(i,j)&space(3-len(sc(i,j))Next jLabel1.text &=vbcrlfNext i3、在学生成绩的统计管理中,需要输入学生的成绩,并根据不同的要求对学生的成绩进行求总分、平均分和最高分等处理,然后输出原始数据和统计结果。
如图所示。
(项目保存为sy4-3 成绩管理)提示:通用声明段的代码(即放在publci class form1 语句的下面)Const N As Integer = 10Dim Score( N) As Integer4、编写程序输出一个9行的“杨辉三角形”,如图所示。
(项目保存为sy4-4 杨辉三角形)图 杨辉三角形提示:① 杨辉三角形的形式:对角线和每行的第一列均为1,其余各项是它的上一行中同一列元素和其前面一个元素之和,即a(i,j)=a(i-1,j)+a(i-1,j-1)。
如下数据是一个5行的杨辉三角。
11 11 2 11 3 3 11 4 6 4 1② 用Space函数确定数据之间的空格:Label1.Text = Label1.Text & a(i, j) & IIf(a(i, j) < 10, Space(3), Space(2))拓展:能否使用一维数组编程,显示杨辉三角形。
VB数组(经典程序讲解)

For i = 1 To 9 前>后 后 直接排序法 Pointer = i For j = i + 1 To 10 if Sort(Pointer) > Sort(j) Then Pointer:记录本轮最小元素的位置 记录本轮最小元素的 Pointer:记录本轮最小元素的位置 Pointer = j End if Next j 当前元素sort(i 元素sort( 若当前元素sort(i)不是本轮最 if i <> Pointer Then 元素sort(pointer) sort(pointer 小元素sort(pointer) Temp = Sort(i) Sort(i) = Sort(Pointer) 一轮只交换0次或1次 一轮只交换0次或1 Sort(Pointer) = Temp End if Text2 Text2 Text2 = Text2 & Str(Sort(i)) Next i
输出结果
回目录
P114
删除数列中重复的元素 数列中重复 例6-12 删除数列中重复的元素
1.在 数组中生成 1.在A数组中生成 N个数据 N:从 元素到数组尾UB UB- 变长的)作以下处理: 2.N: 2.N:从第1个元素到数组尾UB-1(变长的)作以下处理: 定位变量 ①A(N)在数组中有重复的数据吗?---定位变量:I A(N)在数组中有重复的数据吗?---定位变量: 在数组中有重复的数据吗 ②有:数组从I到(UB-1):左移一个元素(删除) 一个元素( 数组从 到 UB-1):左移一个元素 删除) 做Ub-1修改,重新定义 Redim Preserve A(Ub) Ub- 修改, N+1修改后, 修改后 ③无:做N+1修改后,对下一个元素开始处理 3.程序结构:多层循环+判断;结构清晰、 3.程序结构:多层循环+判断;结构清晰、语句简练 程序结构
VB程序设计第五章 数组

5. 求数组中最大元素和所在下标及各元素之和
方法:先假设第一个元素及下标为所求结 果,然后依次比较。 利用循环结构进行
Dim Max As Integer, iMax As Integer, sum As Integer Max=iA(1):iMax=1: sum=iA(1) For i = 2 To 10 sum = sum + iA(i) If iA(i) > Max Then Max = iA(i) iMax = i End If 求最小值同样方法进行 Next i
(a) 利用Array()函数,可以直接给数组赋值; (b) 数组的声明必须是动态数组或者省略圆 括号,且其类型必须为 Variant (c) 数组的下界默认为0,也可以通过 Option Base 语句确定 (d) 上界由 Array() 函数括号内参数个数确定, 或者由 UBound() 函数确定。
赋值时注意: (1) 赋值号两边的上界类型必须一致 (2) 如果赋值号左边是一个动态数组,则赋值后数组 大小与右边一致。 (3) 如果左边是静态数组,则数组赋值出错!
4. 数组的输出
数组的输出,采用循环输出即可 例:输出方阵sC中的下三角元素
For i = 0 To 4
For j = 0 To i sc(i, j) = i * 5 + j Print sc(i, j); " "; Next j Print ' 换行 Next I (参见P93的代码。)
下标可以是整型的常数、变量、表达式, 也可以是又一个数组元素。 数组元素的使用规则和同类型的简单变量 相同。 一般情况下,数组元素类型必须相同。 但当数组类型定义为 “variant” 时,可以包 含不同类型的元素。
VB实验案例(数组)

实验五数组一、控件属性的设置 (滚动条)1、在名称为Forml的窗体上添加一个名称为H1水平滚动条,请在属性窗口中设置它的属性值,满足下列要求:它的最小刻度值为1,最大刻度值为100,在程序运行时鼠标单击滚动条上滚动框以外的区域(不包括两边按钮),滚动框移动10个刻度。
再在滚动条下面画两个名称分别为L1、L2的标签,并分别显示1、100,运行时的窗体如图5-1所示。
工程文件名保存为sy5-1.vbp,窗体文件名为sy5-1.frm。
2、在名称为Form1的窗体上添加一个名称为HS1的水平滚动条,其刻度值范围为1 -100;添加一个命令按钮,名称为C1,标题为"移动滚动框"。
请编写适当的事件过程,使得在程序运行时,每单击命令按钮一次(假定单击次数不多于10次),滚动框向右移动10个刻度。
程序运行时的窗体如图5-2所示。
要求程序中不得使用变量,事件过程中只能写一条语句。
工程文件名保存为sy5-2.vbp,窗体文件名保存为sy5-2.frm。
3、在名称为Form1的窗体上画一个图片框,其名称为Picture1、一个水平滚动条,名称为HScroll1,和一个命令按钮,名称为Command1,标题为"设置属性",通过属性窗口在图片框中装入一个图形(文件名为pic1.jpg,位于考生目录下),图片框的高度与图形的高度相同,图片框的宽度任意(如图1所示)。
编写适当的事件过程,程序运行后,如果单击命令按钮,则设置水平滚动条的如下属性:Min 100Max 1500LargeChange 100SmallChange 10之后就可以通过移动滚动条上的滚动块来放大或缩小图片框。
程序运行后的窗体如图5-3所示。
要求程序中不得使用任何变量。
工程文件名为sy5-3.vbp,窗体文件名为sy5-3.frm。
4、在控件属性1文件夹下有一个工程文件sy5-4.vbp,窗体上有一个圆和一个矩形,还有水平和垂直滚动条各一个。
VBA 中的数组操作技巧与案例分析

VBA 中的数组操作技巧与案例分析在VBA编程语言中,数组操作是一项非常重要的技巧。
通过灵活的数组操作,我们可以简化代码、加快执行速度,并且能够处理更复杂的数据结构。
本文将介绍VBA中一些常用的数组操作技巧,并通过案例分析来说明它们的应用。
首先,让我们来了解一下什么是数组。
数组是一组按序排列的元素的集合,在VBA中可以用来存储和处理大量数据。
数组中的每个元素可以是任何数据类型,例如数字、字符串或对象。
一、数组的基本操作1. 声明数组在VBA中,我们可以使用Dim语句来声明一个数组。
例如,声明一个名为arrNumbers的整数数组可以使用以下代码:Dim arrNumbers() As Integer2. 初始化数组在声明数组后,我们需要初始化它们,即为数组分配内存空间并赋初值。
以下是几种初始化数组的方法:a) 使用Array函数可以使用Array函数来初始化一个一维数组。
例如,以下代码将初始化一个名为arrMonths的一维字符串数组,并给其中的元素赋值:arrMonths = Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December")b) 直接赋值我们也可以直接为数组元素赋值。
例如,以下代码将初始化一个名为arrNumbers的一维整数数组,并给其中的元素赋值:arrNumbers = [1, 2, 3, 4, 5]3. 访问数组元素可以使用索引来访问数组元素。
在VBA中,数组的索引是从0开始的。
VB常用十大算法

1. 累加与连乘1、算法说明[分析]累加形式:V=V+e 连乘形式:V=V*e其中:V 是变量,e 是递增表达式。
累加和连乘一般通过循环结构来实现。
注意:需在执行循环体前对变量 V 赋初值。
一般累加时置初值0;连乘时置初值为1 [举例]求N!的结果。
Private Sub Comma nd1_Click()Dim n%, i%, s&n = Val(InputBox("输入 n"))s = 1For i = 1 To ns = s * iNext iPr int sEnd Sub[应用举例]根据下列公式,求自然对数 e 的的近似值Private Sub Comma nd1_Click()Dim i%, n&, t!, e!e = 2i = 1t = 1Do While t > 0.00001i = i + 1t = t / i e = e + tLoopPrint"计算了 "; i;"项目和是:";ePrint Exp(1)与上句输出值进行对比以证明算法的正确性End Sub2. 最值问题1、算法说明=1 + 一_ + — +一 + 1! 2! 3! + 1 = 1 + -1要求:误差小于0.00001在若干数中求最大值,一般先取第一个数为最大值的初值(即假设第一个数为最大值),然后,在循环体内将每一个数与最大值比较,若该数大于最大值,将该数替换为最大值,直到循环结束。
求最小值的方法类同。
求若干数平均值,实质上就是先求和,再除以这些数的个数。
应用举例:随机产生n个1-100 (包括1和100)的数,求它们的最大值、最小值和平均值。
Private Sub Comma nd1_Click()Dim n%, i%, min%, max%, aver!, s%n 二 Val(lnputBox("输入个数:"))s = Int (Rnd * 100) + 1max = s : min = s : aver = sPrint"第1个数是:” & sFor i = 2 To ns = In t(R nd * 100) + 1Print"第” & i & ” 个数是:” & sIf s > max The n max = sIf s < min The n min = saver = aver + sNext iaver = aver/nPrin t "max="; max; " min二";min; "aver二";averEnd Sub解题技巧:最大值、最小值、平均值类型题目往往和数组放在一起考!有的不仅求这些值,还要对具有最大值或者最小值的行或列或者某个元素进行处理,这时就要在记录最大、最小值时,同时记录该值所在的行号和列号。
vb程序设计第05章数组

Private Sub Form_Click() 2.数组的赋值 Dim a(4) As Integer, b() As Integer, 在VB6.0中,提供了数组直接对数组的赋值。例如: i% a(0) = 3: a(1) = 6: a(2) = 13 Dim a(4) As Integer, b() As Integer,i% = 34 a(3) = 23: a(4) b=a a(0)=3: a(1)=6: a(2)=13 For i = 1 To 4 ReDim b(UBound(a)) a(3)=23: a(4)=34 Print b(i);
例将数组中各元素交换 1 2 9 10 3 4 5 6 7 8 9 10 11 12 1 2 3 4 5
11 12 6 7 8
第一步:将前面的5个数倒置; 5 4 3 2 1 6 7 8 9 10 11 12
第二步:将中间的3个数倒置;
5 4 3 2 1 8 7 6 9 10 11 12 12 11 10 9 第三步:将后面的4个数倒置; 5 4 3 2 1 8 7 6 第四步:将所有的12个数倒置;
?在编程时通过load方法添加其余的若干个元素也可以通过unload方法删除某个添加的元素?每个新添加的控件数组通过left和top属性确定其在窗体的位置并将visible属性设置为true
第五章 数组(4+2学时)
5.1 5.2 5.3 5.4 5.5 5.6 5.7 5.8 数组的概念 静态数组及声明 动态数组及声明 数组的基本操作 控件数组 自定义数据类型 常用算法(二) 常见错误
vb常用算法

VB常用算法算法1 交换2个变量的值算法思想:若交换两个变量的值,必须引入第三个新的变量进行传递。
交换a,b的值: t=a:a=b:b=t或者t=b:b=a:a=t算法2 产生随机数算法思想:生成一个[a,b]区间的整数公式为Int(Rnd*(b-a+1))+a1.自动生成[0,100]之间的随机数: Int(Rnd*101)2.自动生成2位随机整数: Int(Rnd*90+10)例:自动产生10个100~999之间的随机整数,并放到数组a中Dim a(10 ) as integerFor i=1 to 10a(i) =Int(Rnd*900)+100Next i算法3判断一个数是否能被另一个数整除算法思想:可以用整除的定义(余数为0)或X除以Y等于X整除Y等表达式进行判断。
条件表达式可以为:X mod Y=0或X\Y=X/Y或Int(X/Y)=X/Y如果以上条件表达式为True,则表示X能被Y整除。
例题:统计0—100之间能被3整除的数的个数、累加和及其平均值。
s=0n=0For i=0 To 100If i mod 3=0 Thens=s+in=n+1End IfNext iPrint n,s,s/n算法4 求阶乘和累加和算法思想:使用循环语句,并用一个变量存放累加的中间及最终结果。
注:(1)累加求和时变量初值为0。
(2)计算阶乘时变量初值为1。
(3)统计计个数(计数)时可用一个变量作为统计个数的累加变量,每次加1即可。
(4)求平均值算法思想是先求和,再除以个数。
(5)条件求和(或计数):在循环语句中加入If-End If判断语句。
1.求1 ~n个自然数的阶乘s=1For i=1 to ns=s*iNext i2.求1 ~n个自然数的累加和s=0For i=1 to ns=s+iNext i例题:计算1到10之间所有整数的累加和以及10!。
n=10sum= 0prod= 1For i=1 To 10sum=sum+ iprod=prod* iNext iPrint sum,prod例题:统计1—100之间能被3和7整除的数的个数、并求它们的累加和。
18个VB经典例题

18个VB经典例题18个VB经典例题1、随机产生三个100-300之间的整数,判断这三个整数是否能构成三角形,如果可以,求三角形的面积。
Dim x As Integer, y As Integer, z As IntegerDim c As Single, s As Singlex = Int(Rnd * 201 + 100)y = Int(Rnd * 201 + 100)z = Int(Rnd * 201 + 100)If x + y > z And x + z > y And y + z > x Thenc = (x + y + z) / 2s = Sqr(c * (c - x) * (c - y) * (c - z))Print "三角形面积是:" & sElsePrint "构不成三角形"End If2、随机产生0-100之间的60名学生的数学分数,分别统计分数在[)10,0、[)20,10、[)30,20、[)40,30、[)50,40、[)60,50、[)70,60、[)80,70、[)90,80、[]90、之间的学生人100,数。
Dim a%, b%, c%, d%, e%, f%, g%, h%, i%, j%Dim x As SingleFor m = 1 To 60 '产生60名学生的分数x = Rnd * 101 '产生0-100的分数Print x;If x >= 90 Thena = a + 1ElseIf x >= 80 Thenb = b + 1ElseIf x >= 70 Thenc = c + 1ElseIf x >= 60 Thend = d + 1ElseIf x >= 50 Thene = e + 1ElseIf x >= 40 Thenf = f + 1ElseIf x >= 30 Theng = g + 1ElseIf x >= 20 Thenh = h + 1ElseIf x >= 10 Theni = i + 1Elsej = j + 1End IfNext mPrint a, b, c, d, e, f, g, h, i, j3、我国有13亿人口,按照人口年增长0.8%计算,多少年以后我国人口超过26亿。
VB数组——精选推荐

‘ 将数组声明中缺省<下界>下标
4.<下界>和<上界>不能使用变量,必须是常量,常 量可以是直接常量、符号常量,一般是整型常量。
Const Num As Integer =10 Dim N As Integer N=Val(InputBox(“Enter N=?”))
Dim A9(N) As Integer
‘ 一维数组 ‘ 二维数组 ‘ 三维数组
数组中的每一个数据称为数组元素,用 数组名和该数据在数组中的序号来标识。序 号又称为下标,数组元素又称为下标变量。 例如,S(2)是一个数组元素,其中的S称为 数组名,2是下标。在使用数组元素时,必 须把下标放在一对紧跟在数组名之后的括号 中。S(3)是一个数组元素,而S3是一个简单 变量。
一维数组形式:
Dim 数组名([<下界>To]<上界>)[As <数据类型>] 或: Dim 数组名[<数据类型符>]([<下界>To]<上界>) 例:Dim a(1 to 10) As Integer
1是下标的下界
10是下标的上界
与上面声明等价形式:
数组元数的数 据类型
Dim a% (1 to 10)
Dim X(Num) As Long
5.如果省略As子句,则数组的类型为变体类型。
Dim B(10)
6.数组中各元素在内存占一片连续的存储空间。
A(0) A(1) A(2) ….
A(n)
一维数组在内存中存放的顺序
5.2.2.一维数组的引用
使用形式: 数组名(下标)
其中:下标可以是整型变量、常量或表达式。
冒泡算法示意
VB常用算法及实例

5.2字符信息处理的常用算法及实例
对信息的处理,除必不可少的数值运算 外,还有很大部分的工作是对字符进行 处理。如字符串的倒置、程序口令的设 置和破解、日期或时间的汉化处理和金 额的大小写转换等。
5.2.1 字符信息处理—字符比较
当两个操作数都为字符型时,按字符的 ASCII从左到右逐一比较,即首先比较两 字符串中的第一个字符,ASCII大的字符 串大,若第一个字符相同,则比较第二 个字符,依此类推,直到出现不同的字 符为止。需要注意的是字符比较时中区 分大小写。
5.1.1 数值运算基本算法 –正整数
采用INT函数和MOD运算符描述一个变量 是否整数,并且这个数是否大于0。判断 变量x是否为正整数的语句有:
(1)int(x)=x and x>0 (2)int(x)=x and abs(x)=x
5.1.1 数值运算基本算法 –奇偶数
主要采用INT函数和MOD运算符描述一个 变量x是否2整除,若能被2整除,则是偶 数,否则是奇数.主要语句有:
(1)int(x/y)=x/y (2)x-int(x/y)*y=0 (3) x mod y=0
5.1.1 数值运算的基本算法 –求余
采用INT函数和MOD运算符描述一个变量 是被另一个变量相除后的余数。计算变 量除以变量y后的余数的语句有:
(1)p=x-int(x/y)*y (2)p=x mod y
5.1.5平均值和最大最小值
计算平均值的算法是指首先计算n个数的和, 计算将得到的和除以n;因此它实际上是一个 累加运算。其数学表达式为:
x x1 x2 xn n
求最大值和最小值的算法是:一般先取第1个数为最大 值和最小值的初始值,然后从第2个数直到最后一个数 取一个数I,逐个与前面I-1数的最大值和最小值进行比 较,如果比最大值还要大,则将该值赋值于前I个的最 大值;如果比最小值还要小,则将该值赋值于前I个的 最小值,直到循环结束。
VB数组与记录1

80
83 70
68
90
86
(2)用循环语句
例: Dim i As Integer , Score(6) As Integer
For i = 1 To 6 score(i) = InputBox("请输入第" & i & "个数组元素")
一维数组使用实例
1 找出某门课中最高分数 算法: 设第一个人成绩最高,然后所有成绩依次 与之比较,比他大时用新的最高分代替原来 的最高分
Next i
For i = 1 To n
Print a(i);
Next i
二维数组(有两个下标的数组)
二维数组用于处理象表格这样的数据。 例如:全班各门课成绩表:
姓名 数学 物理 计算机 英语 李翰 87.5 89.0 91.5 88.5 韩旭 83.5 76.0 65.5 90.0 白洁 56.0 64.0 87.5 78.0 汪洋 84.0 55.0 88.0 65.5
由上例可以看出,二维数组intN的元素个数为:3×4=12,和一维 数组一样,也可用Option Base 1 语句,让下标从1开始,则上例数 组元素个数即为:2×3=6。
二维数组也可任意指定上下界,格式与一维数组类似。
例:Dim intN(-2 To 1 , 3 To 6) As Integer 定义了一个有(1-(-2)+1) ×(6-3+1)=16个元素的二维数组。
Const n = 15
Dim a(1 To n) As Integer, work As Boolean
Dim i As Integer, j As Integer, x As Integer
VB程序的设计数组

5.1 数组的概念 5.2 数组的基本操作 5.3 动态数组 5.4 控件数组 5.5 程序示例
盐城工学院 Visual Basic 程序设计
数组概念的引出
在科学计算和数据处理中,要用到成批数据,这些数据类型相 同,且彼此间存在一定的顺序关系。为处理方便,可考虑用数组 进行存储。
数组并不是一种新的数据类型,而是一组相同类型的有序变量 的集合。在程序中使用数组的最大好处是用一个数组名代表逻辑 上相关的一批数据,用下标区分该数组中的各个元素,和循环语 句结合使用,编写出的程序简洁精悍。
96
92
75
83
第四学期 80
78
81
86
81
二维数组 A(1,1) A(1,2) A(1,3) A(1,4) A(1,5) A(2,1) A(2,2) A(2,3) A(2,4) A(2,5) A(3,1) A(3,2) A(3,3) A(3,4) A(3,5) A(4,1) A(4,2) A(4,3) A(4,4) A(4,5)
⑥ Dim语句中的维界定义可以是常数、也可以为空。 下标为常数时为固定大小的数组,下标为空时则为动态 数组。
盐城工学院 Visual Basic 程序设计
⑦ 可以使用以下方法声明数组: • 建立公用数组,在模块的声明段用 Public 语句声明数组。 • 建立模块级数组,在模块的声明段用 Private 或Dim语句声
A、从0开始,等价于0 to 上界
B、从2开始
C、从1开始,等价于1 to 上界
D、等价于 n to 上界
2、使用下列语句定义数组,定义正确的是————。
Dim n as Integer Const m as Integer=5 Dim A(m) as Integer Dim B(1 to 6.3) as Integer Dim C(1 to 2+3) as Long Dim D(0 to n ) as single
VB常用算法典型例题及知识点

VB算法例题与解析常用类型符号:长整型Long &整型Integer %单精度型Single !双精度型Double #字符型String $逻辑型Doolean (又称布尔型)VB常用算法:Int(rnd *(终值-初值+1)+初值)例:输出10个随机数区间为[80 , 200]For i = 1 to 10C=int(rnd*121+80)Print cNext i最大最小值需要两者比拟,所以在做的时候要把随便一个值先定义为最大值与最小值然后用for循环来逐个比拟。
Max=a(1) 这里是第一步!将max与min 赋值好用来做下面的判断Min=a(1) For i = 1 to 10If a(i)>max then max=a(i)If a(i) < min then min = a(i)Next iPrint maxPrint min冒泡法是先拿出一个数字,然后一个一个判断过去.如果比他大,就放后面,比他小就放上面。
冒泡法万能代码:For i = n to 2 step -1For j = 1 to j-1If a(j)>a(j+1) then ----> 从大到小是“< “从小到大是“ > 〞T=a(j)a(j)=a(j+1)a(j+1)=TEnd ifNext jNext i素数的定义:除了1与该数本身之外,不能被其他任何整数整除的数。
思路:1.先定义一个变量F=02.做一个循环,判断能不能被除了1与该数本身之外能不能被整除如果可以F就变成13.如果最后F=0那么就是素数就输出它素数代码模板:N=val(text1)F=0For i = 2 to sqr(n) ----> sqr(n)也可以换成n-1 ,因为不能被1整除所以要从2开场循环Ifn mod i =0 then f=1Next iIf f=0 then print “是素数〞定义:其各个位数的立方等于改数本身思路:先要知道个位,十位,百位,怎么别离,别离出来之后判断个位:K \ 100十位:(K \ 10) Mod 10百位:K Mod 10输出100-999的水仙花数代码For i = 100 to 999A= i \ 100B= (i \ 10) Mod 10立方如果等于I 那么就是水仙花C= i Mod 10If a^3+b^3+c^3 =i then print iNext i统计字符个数:总复习P292逆向文字:总复习P307模拟投掷骰子:总复习P289工资扣税问题:总复习P 2872021 高职考网页试题:参照如第92题图中的网页显示效果与具体要求,请在划线处用HTML语句将网页文件补充完整。
最新VB常用算法7 数组元素增删

V B常用算法7数组元素增删VB常用算法----数组元素插入与删除数组中元素的插入和删除一般是在已固定序列的数组中插入或删除一个元素,使得插入或删除操作后的数组还是有序的。
基本思路:首先要找到插入位置或要删除的元素。
1.插入代码如下:Private Sub Command1_Click()Dim a(10) As IntegerDim i As Integer, k As IntegerFor i = 0 To 9 '生成数组a(i) = i * 3 + 1Print a(i);Next iPrintPrint "插入14"For k = 0 To 9 '查找插入14在数组中的位置If 14 < a(k) Then Exit ForNext kFor i = 9 To k Step -1 '从最后元素开始逐个后移,腾出位置a(i + 1) = a(i)Next ia(k) = 14 '插入数14For i = 0 To 10Print a(i);Next iPrintEnd Sub2.删除1 4 7 10 13 16 19 22 25 28K代码如下:Dim a() as integer….ReDim a(1 to n)…For i=k+1 to na(i-1)=a(i)Next IRedim preserve a(1 to n-1)3. 实战练习1)完善程序填空(2001秋二(8))C盘根目录下文件Data4.txt的内容是:2,4,6,8,10,1,3,5,7,9。
下面程序的功能是将文件后半部分的奇数分别按序插入到前半部分的适当位置,得到的新数列是:1 2 3 4 5 6 7 8 9 10。
(实现方法:第一次调整后的数列是:1 2 4 6 8 10 3 5 7 9第二次调整后的数列是:1 2 3 4 6 8 10 5 7 9)。
Option ExplicitPrivate Sub command1_Click()Dim A(10) As Integer, i As Integer, J As IntegerOpen App.Path & "\Data4.txt" For Input As #12Do (1)J = J + 1Input #12, A(J)LoopCall Insert(A)For i = 1 To 10Print A(i);Next iPrintClose #12End SubPrivate Sub Insert(A() As Integer)Dim i As Integer, Putp As Integer, J As IntegerDim Getp As Integer, N As Integer, Tem As IntegerN = UBound(A) / 2Putp = 1Getp = N + 1For i = 1 To NTem = A(Getp)For J = Getp To Putp + 1 Step -1(2)Next JA(Putp) = TemGetp = Getp + 1(3)Next iEnd Sub2)完善程序填空(2001春二(8))下面程序得功能是将无序数组中相同的数只保留一个,其余的删除,并输出经过删除后的数组元素,删除相同数是通过将该数组元素后面的元素在数组内依次前移替换前一个元素的值实现的。
VB实验6 动态数组

实验6 动态数组
实验6-1 找因子
1. 功能
找出10~100之间含因子数最多的数,并显示所有的因子(包含1和本身)。
如图6-1所示。
图6-1
2. 要求
(1)在“查找”按钮中设计程序,查找10~100之间含因子数最多的数,并按图6-1所示格式在文本框中显示所有因子。
(2)单击“退出”按钮,将结束应用程序的运行。
3. 保存工程和窗体,并生成EXE文件
将工程保存为P6-1.vbp,窗体保存为F6-1.frm。
将以上工程生成EXE文件,文件名为E6-1.exe。
实验6-2 删除重复数
1. 功能
删除一个数组中的重复数。
如图6-2所示。
图6-2
2. 要求
(1)在“生成”按钮中设计程序,随机生成10个一位正整数,显示在文本框中。
(2)在“删除”按钮中设计程序,删除其中所有的重复数后,将数组元素重新显示在另一个文本框中。
(3)单击“清除”按钮,将清除两个文本框对象。
(4)单击“退出”按钮,将结束应用程序的运行。
3. 保存工程和窗体,并生成EXE文件
将工程保存为P6-2.vbp,窗体保存为F6-2.frm。
将以上工程生成EXE文件,文件名为E6-2.exe。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.互不相等的随机数的生成算法P rivate Sub CmdStart_Click()'生成10个[1,100]范围内互不相等的随机整数Dim R(1 To 10) As Integer '保存生成的10个数Dim i As Integer, j As Integeri = 1Do While i <= 10'生成一个随机数,并保存在r(i)中R(i) = Int(Rnd * 100) + 1'将r(i)与已经生成的r(1)~r(i-1)进行比较For j = 1 To i - 1If R(i) = R(j) Then Exit ForNext jIf j >= i Then 'j>=i说明r(i)没有与r(1)~r(i-1)的任何一个数相等i = i + 1 'i加1,下一次生成新的,否则,i保持原值,下一次重新生成r(i)End IfLoopFor i = 1 To 10Print R(i);Next iPrintEnd Sub2.选择排序Private Sub CmdOrder1_Click()Form1.ClsConst N = 10Dim A(1 To N) As IntegerDim i As Integer, j As Integer, k As Integer'生成并输出10个[1,100]范围内互不相等的随机整数Print " 系统生成数据:";i = 1Do While i <= NA(i) = Int(Rnd * 100) + 1For j = 1 To i - 1If A(i) = A(j) Then Exit ForNext jIf j >= i ThenPrint A(i);i = i + 1End IfLoopPrint'开始排序For i = 1 To N - 1'将a(i)与a(i+1)~a(N)每一个数进行比较For j = i + 1 To NIf A(i) < A(j) Then '如果a(i)<a(j),交换a(i),a(j)temp = A(i)A(i) = A(j)A(j) = tempEnd IfNext j'输出第i轮排序的结果——找到a(i)~a(N)中的最大数,并放在a(i)中 Print "第" & i & "轮排序结果:";For k = 1 To NPrint A(k);Next kPrintNext iEnd Sub3.选择排序优化:Private Sub CmdOrder2_Click()Form1.ClsConst N = 10Dim A(1 To N) As IntegerDim i As Integer, j As Integer, k As Integer, Pos As Integer'生成并输出10个[1,100]范围内互不相等的随机整数Print " 系统生成数据:";i = 1Do While i <= NA(i) = Int(Rnd * 100) + 1For j = 1 To i - 1If A(i) = A(j) Then Exit ForNext jIf j >= i ThenPrint A(i);i = i + 1End IfLoopPrint'开始排序For i = 1 To N - 1'寻找a(i)~a(N)中的最大数的下标,并保存在变量Pos中Pos = iFor j = i + 1 To NIf A(Pos) < A(j) Then Pos = jNext j'如果Pos<>i,交换a(i),a(pos)If Pos <> i Thentemp = A(i)A(i) = A(Pos)A(Pos) = tempEnd If'输出第i轮排序的结果Print "第" & i & "轮排序结果:";For k = 1 To NPrint A(k);Next kPrintNext iEnd Sub4.冒泡排序及其优化Private Sub CmdOrder3_Click()Form1.ClsConst N = 10Dim A(1 To N) As IntegerDim i As Integer, j As Integer, k As Integer, Pos As Integer'生成并输出10个[1,100]范围内互不相等的随机整数Print " 系统生成数据:";i = 1Do While i <= NA(i) = Int(Rnd * 100) + 1For j = 1 To i - 1If A(i) = A(j) Then Exit ForNext jIf j >= i ThenPrint A(i);i = i + 1End IfLoopPrint'开始排序For i = 1 To N - 1'依次比较a(1)和a(2),a(2)和a(3),.....,a(N-i)和a(N-i+1),如果前数<后数,交换If A(j) < A(j + 1) Thentemp = A(j)A(j) = A(j + 1)A(j + 1) = tempEnd IfNext j'输出第i轮排序的结果——找到了a(1)~a(N-i+1)中的最小数,并放置在a(N-i+1) Print "第" & i & "轮排序结果:";For k = 1 To NPrint A(k);Next kPrintNext i'冒泡排序的冒泡方向可以从前往后,也可以从后往前,思路相似,代码略有差异End Sub5.冒泡排序优化:P rivate Sub CmdOrder4_Click()Form1.ClsConst N = 10Dim A(1 To N) As IntegerDim i As Integer, j As Integer, k As Integer, Pos As IntegerDim IsChanged As Boolean'生成并输出10个[1,100]范围内互不相等的随机整数Print " 系统生成数据:";i = 1Do While i <= NA(i) = Int(Rnd * 100) + 1For j = 1 To i - 1If A(i) = A(j) Then Exit ForNext jIf j >= i ThenPrint A(i);i = i + 1End IfLoopPrint'开始排序For i = 1 To N - 1'利用变量ischanged来监视是否发生数据交换,如果没有交换,表示数据排序已经完成,可以提前推出IsChanged = FalseIf A(j) < A(j + 1) Thentemp = A(j)A(j) = A(j + 1)A(j + 1) = tempIsChanged = TrueEnd IfNext j'输出第i轮排序的结果——找到了a(1)~a(N-i+1)中的最小数,并放置在a(N-i+1) Print "第" & i & "轮排序结果:";For k = 1 To NPrint A(k);Next kPrintIf Not IsChanged Then Exit ForNext iEnd Sub6.数组中元素的插入Private Sub CmdStart_Click()Dim a() As IntegerReDim a(1 To 10)'生成原始数据a(1)~a(10)Print "原始数据:";For i = 1 To 10a(i) = Int(Rnd * 100) + 1Print a(i);Next iposition = Val(InputBox("请选择插入数据的位置(1~11)"))x = Val(InputBox("请输入数据"))'为数组扩容ReDim Preserve a(1 To 11)'移动插入位置后面的数据,注意移动的顺序和所移动的数据,不要多移、少移For i = 10 To position Step -1a(i + 1) = a(i)Next i'插入数据a(position) = x'输出新的数据PrintPrint "新的数据:";For i = 1 To 11Print a(i);Next iPrintEnd Sub7-1开始插入Option Base 1Option ExplicitDim a() As IntegerPrivate Sub CmdStart_Click()'函数说明:'lbound(数组名):返回数组的下标下限'ubound(数组名):返回数组的下标上限Dim x As Integer, Pos As Integer, i As Integerx = Val(InputBox("请输入准备插入数组的数据"))'为数组扩容ReDim Preserve a(UBound(a) + 1)'寻找数据x的插入位置pos——数组中第一个大于x的数据的位置 Pos = LBound(a)Do While (a(Pos) <= x And Pos <= UBound(a) - 1)Pos = Pos + 1Loop'移动插入位置后面的数据For i = UBound(a) To Pos + 1 Step -1a(i) = a(i - 1)Next i'插入数据a(Pos) = x'输出新的数据PrintPrint "新的数据:";For i = LBound(a) To UBound(a)Print a(i);Next iPrintEnd Sub7-2生成数据并排序Private Sub Command1_Click()ReDim a(10)Dim i As Integer, j As Integer, Pos As IntegerDim Temp As Integer'生成原始数据a(1)~a(10)For i = 1 To 10a(i) = Int(Rnd * 100) + 1Next i'排序For i = 1 To 9Pos = iFor j = i + 1 To 10If a(Pos) > a(j) Then Pos = jNext jIf Pos <> i ThenTemp = a(Pos): a(Pos) = a(i): a(i) = TempEnd IfNext iPrint "原始有序数据:";For i = 1 To 10Print a(i);Next iPrintEnd Sub8.数组中元素的删除先随机生成数据:Private Sub Command1_Click()ReDim a(10)Dim i As Integer, j As Integer, pos As IntegerDim Temp As Integer'生成原始数据a(1)~a(10)Print "原始数据:";For i = 1 To 10a(i) = Int(Rnd * 100) + 1Print a(i);Next iPrintEnd SubOption Base 1Option ExplicitDim a() As IntegerPrivate Sub CmdStart_Click()'函数说明:'lbound(数组名):返回数组的下标下限'ubound(数组名):返回数组的下标上限Dim x As Integer, pos As Integer, i As Integerx = Val(InputBox("请输入准备删除的数据"))'查找需要删除的数据是否存在For pos = LBound(a) To UBound(a)If a(pos) = x Then Exit ForNext posIf pos > UBound(a) Then '需要删除的数据不存在MsgBox "需要删除的数据不存在,删除动作立即停止!", vbOKOnly + vbCriticalElse'通过移动数据达到删除数据的目的For i = pos To UBound(a) - 1a(i) = a(i + 1)Next i'数组缩容ReDim Preserve a(UBound(a) - 1)'输出新的数据PrintPrint "新的数据:";For i = LBound(a) To UBound(a)Print a(i);Next iPrintEnd IfEnd Sub9.顺序查找法Private Sub CmdStart_Click()'函数说明:'lbound(数组名):返回数组的下标下限'ubound(数组名):返回数组的下标上限Dim x As Integer, pos As Integer, i As Integerx = Val(InputBox("请输入查找的数据"))pos = LBound(a)Do While pos <= UBound(a)If a(pos) <> x Thenpos = pos + 1ElseExit DoEnd IfLoopIf pos > UBound(a) Then '数据不存在MsgBox "数据不存在!", vbOKOnly + vbInformationElseMsgBox "数据在数组中的下标是" & pos, vbOKOnly + vbInformation End IfEnd Sub10.折半查找Private Sub Command2_Click()Dim x As Integer, l As Integer, r As Integer, m As Integerx = Val(InputBox("请输入查找的数据"))l = 1r = 10Dom = (l + r) / 2If a(m) > x Thenl = m + 1ElseIf a(m) < x Thenr = m - 1End IfLoop While (l <= r And a(m) <> x)If a(m) = x ThenMsgBox "数据在数组中的下标是" & m, vbOKOnly + vbInformationElseMsgBox "数据不存在!", vbOKOnly + vbInformationEnd If'注:折半查找的查找效率高于顺序查找,但是需要以数据的有序性作为前提'实际应用中,排序并不需要每次都进行,排序值需要完成一次即可'而且利用插入排序可以使得数据在输入完成的时候即可完成排序End Sub11.回文判断法1:Private Sub Command1_Click()Dim s As Strings = Text1.Textl = Len(s)For i = 1 To l / 2c1 = Mid(s, i, 1)c2 = Mid(s, l - i + 1, 1)If c1 <> c2 ThenExit ForEnd IfNext iIf i <= l / 2 ThenLabel2.Caption = "不是回文!"ElseLabel2.Caption = "是回文!"End IfEnd Sub法2Private Sub Command2_Click()Dim s() As StringSt = Text1.Textl = Len(St)ReDim s(1 To l)For i = 1 To ls(i) = Mid(St, i, 1)Next iFor i = 1 To l / 2If s(i) <> s(l - i + 1) ThenExit ForEnd IfNext iIf i <= l / 2 ThenLabel2.Caption = "不是回文!"ElseLabel2.Caption = "是回文!"End IfEnd Sub12.矩阵的转置:Option Base 1Option ExplicitPrivate Sub Command1_Click()Const N = 5Dim a(N, N) As Integer, temp As Integer Dim i As Integer, j As Integer'生成并输出数据Print "转置前"For i = 1 To 5For j = 1 To 5a(i, j) = Int(Rnd * 100)Print a(i, j);Next jPrintNext i'矩阵转置For i = 1 To 5For j = 1 To i - 1temp = a(i, j)a(i, j) = a(j, i)a(j, i) = tempNext jNext i'输出转置后的矩阵Print "转置后"For i = 1 To 5For j = 1 To 5Print a(i, j);Next jPrintNext iend Sub13.矩阵的乘法运算(P72例3-24):Option Base 1Option ExplicitDim a(5, 3) As Integer, b(3, 4) As Integer, c(5, 4) As Integer 1.生成矩阵A:Private Sub Command1_Click()Dim i As Integer, j As Integer'生成并输出矩阵APrint "矩阵A:"For i = 1 To 5For j = 1 To 3a(i, j) = Int(Rnd * 10)Print a(i, j);Next jPrintNext iEnd Sub2.生成矩阵BPrivate Sub Command2_Click()Dim i As Integer, j As Integer'生成并输出矩阵APrint "矩阵B:"For i = 1 To 3For j = 1 To 4b(i, j) = Int(Rnd * 10)Print b(i, j);Next jPrintNext iEnd Sub3.矩阵相乘:Private Sub Command3_Click()Dim i As Integer, j As Integer, k As IntegerPrint "A*B"For i = 1 To 5For j = 1 To 4'计算c(i,j)=a(i,1)*b(1,j)+a(i,2)*b(2,j)+a(i,3)*b(3,j)c(i, j) = 0For k = 1 To 3c(i, j) = c(i, j) + a(i, k) * b(k, j)Next kPrint c(i, j); Spc(7 - Len(Str(c(i, j))));Next jPrintNext iEnd Sub14.矩阵鞍点的查找(所在行最小,同时是所在列最大的元素)附:某些特殊矩阵元素的特征描述(上三角、下三角、对角线元素等)Option Base 1Option ExplicitPrivate Sub Command3_Click()Dim a(4, 5) As IntegerDim i As Integer, j As Integer, k As IntegerForm1.ClsPrint "原始矩阵"For i = 1 To 4For j = 1 To 5a(i, j) = Int(Rnd * 90) + 10Print a(i, j);Next jPrintNext i'开始寻找鞍点,'方法:针对第i行'找出第i行中最小的元素的列号k'查找k列的所有元素,是否存在大于a(i,k)的元素,如果不存在,可以确定为鞍点For i = 1 To 4'找出第i行中最小的元素的列号kk = 1For j = 2 To 5If a(i, j) < a(i, k) Then k = jNext j'遍历第k列元素,确定是否存在大于a(i,k)的元素For j = 1 To 4If a(j, k) > a(i, k) Then Exit ForNext jIf j > 4 Then Print i, k, a(i, k)Next iEnd Sub15.杨辉三角:法1:Private Sub Command1_Click()'利用二维数组,是比较简单直观的做法Dim a(20, 20) As Long '最大不超过20层Dim N As Integer '用户输入的层数N = Val(InputBox("请输入杨辉三角的层数"))For i = 1 To N + 1a(i, 1) = 1a(i, i) = 1Next i'以下利用杨辉三角的特征计算出杨辉三角的数字,结果存放在二维数组中,结果如下'1'1 2 1'1 3 3 1'1 4 6 4 1'......For i = 3 To N + 1For j = 2 To Na(i, j) = a(i - 1, j - 1) + a(i - 1, j)Next jNext i'将二维数组的左下三角元素以杨辉三角的格式输出,每个数据占6位Form1.ClsFor i = 1 To N + 1Print Tab(30 - 3 * i);For j = 1 To ic = Trim(Str(a(i, j)))Print c; Spc(6 - Len(c)); '由于不同的数据位数不同,所以要根据位数在后面补足空格,确保总共占6位Next jPrintNext iEnd Sub法2:Private Sub Command2_Click()'用一位数组事先数据的输出'初始化数组a元素为1,1,1,1,1,1,1,1,1,1,……'第0轮'输出a(1)'第1轮'输出a(1)~a(2)'第2轮:'从a(2)~a(2),令a(i)=a(i)+a(i-1),数组元素变为1,2,1,1,1,1,1,1,1,1,……'输出a(1)~a(3)'第3轮'从a(3)~a(2),令a(i)=a(i)+a(i-1),数组元素变为1,3,3,1,1,1,1,1,1,1,……'输出a(1)~a(4)'第4轮'从a(4)~a(2),令a(i)=a(i)+a(i-1),数组元素变为1,4,6,4,1,1,1,1,1,1,……'输出a(1)~a(5)'......'第i轮'从a(i)~a(2),令a(i)=a(i)+a(i-1)'输出a(1)~a(i+1)'......Dim a(20) As LongFor i = 1 To 20a(i) = 1Next iN = Val(InputBox("请输入杨辉三角的层数"))Form1.ClsFor i = 0 To N'计算a(i)~a(2)For j = i To 2 Step -1a(j) = a(j) + a(j - 1)'由于step=-1 ,所以当i=0,1的时候,循环没有进行,因此第0,1轮没有赋值,只有后面的输出Next j'输出a(1)~a(i+1)Print Tab(30 - 3 * i);For j = 1 To i + 1c = Trim(Str(a(j)))Print c; Spc(6 - Len(c));Next jPrintNext iEnd Sub16.海盗船上的生存问题Private Sub Command1_Click()Dim a() As IntegerDim N As Integer '总人数Dim D As Integer '死亡数字Dim Curp As Integer '当前轮到数数字的人Dim Pnum As Integer '当前船上剩余的人数Dim i As Integer 'Form1.ClsN = Val(Text1.Text)D = Val(Text2.Text)ReDim a(N)For i = 1 To Na(i) = 1Next iPrint "下海顺序:"i = 0Curp = 0Pnum = NDoCurp = Curp + 1 '轮到下一个人数数If (Curp > N) Then Curp = 1 '如果一轮数完,让第一个人数If (a(Curp) = 1) Then i = i + 1 '下标为Curp的人如果还在船上,由他数下一个数If (i = D) Then '如果数到死亡数字a(Curp) = 0 '把当前数数人扔下海Print Curp '输出当前扔下海的人Pnum = Pnum - 1 '剩余人数减1i = 0 '从头重新数End IfLoop While (Pnum > 1)'寻找安全位置For i = 1 To NIf a(i) = 1 ThenPrint "安全位置=" & iExit ForEnd IfNext iEnd Sub。