数组的综合应用例子
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数组的综合应用例子
数组的综合应用
为了加深对数组的理解,下面结合一些常用算法的编程来更加深入地学习和使用数组。由于一维数组和二维数组是程序设计中最常用的数组形式,因此这里的举例均为一维和二维数组。
1.数组元素的输入和输出
[例5-12] 由用户输入5个数组元素的值并把它们输出在窗体上。
Option Explicit
Private Sub Command1_Click()
Dim a(1 To 5) As Integer, i As Integer
For i=1 To 5
a(i)=InputBox("请输入第" & Str(i) & "个元素")
Next
For i=1 To 5
Print "a (";i; ")="; a(i)
Next
End Sub
程序运行后,单击命令按钮,执行事件过程Command1_Click。若输入5个值10,20,30,40,50,则窗体上显示的输出结果是:
a(1)=10
a(2)=20
a(3)=30
a(4)=40
a(5)=50
程序中声明了一个具有5个元素的一维整型数组,分别用循环语句输入、输出数组元素的值。在循环体内,数组元素用循环控制变量i作下标,i值的不同就表示数组元素的不同。在程序中引用数组元素时,其下标可以使用表达式。只要表达式的结果不超出数组定义的上界和下界范围,下标表达式就是合法的。例如本例中,若i=2,则:
a(i+1)的值为30;
a(a(i+3)\10)的值为50。
下标表达式的值还可以是实数,此时VB将自动对其进行四舍五入取整。例如:
a(1+0.4)的值是10;
a(2+0.5)的值30。
2.数组元素插入删除
算法说明:数组中元素的插入和删除一般是在已固定序列的数组中插入或删除一个元素,使得插入或删除操作后的数组还是有序的。
基本思路:首先要找到插入位置或要删除的元素,然后以此位置为基准对后续元素进行移位。[例5-12]数组元素的插入。把14插入到有序数列1,4,7,10,13,16,19,22,25,28中,如图5-10所示。
图5-10数组元素的插入
代码如下:
Private Sub Command1_Click()
Dim a(10) As Integer
Dim i As Integer,k As Integer
For i = 0 To 9 '生成数组
a(i) = i * 3 + 1
Print a(i);
Next i
Print "插入14"
For k = 0 To 9 '查找插入14在数组中的位置
If 14 < a(k) Then Exit For
Next k
For i = 9 To k Step -1 '从最后元素开始逐个后移,腾出位置
a(i + 1) = a(i)
Next i
a(k) = 14 '插入数14
For i = 0 To 10
Print a(i);
Next i
End Sub
[例5-13]数组元素的删除。把有序数列1,4,7,10,13,16,19,22,25,28中元素13删除,如图5-11所示。
图5-11数组元素的删除
代码如下:
Dim a() as integer
For i = 1 To 10 '生成数组
ReDim a(1 to i)
a(i) = (i-1) * 3 + 1
Print a(i);
Next i
Print "删除13"
For k = 1 To 10 '查找13在数组中的位置
If a(k) = 13 Then Exit For
Next k
For i = k + 1 To 10 '从13所在位置的下一个元素开始逐个前移
a(i - 1) = a(i)
Next i
Redim preserve a(1 to 9)
For i = 1 To 9
Print a(i);
Next i
3.求素数
素数是除了1和它本身之外再不能被其他数整除的自然数。由于找不到一个通项公式来表示所有的素数,所以对于数学家来说,素数一直是一个未解之谜,几百年来不知吸引了世界上多少优秀的数学家。尽管他们苦心钻研,呕心沥血,但至今仍然未见分晓。
自从有了计算机之后,人们借助于计算机的威力,已经找到了
以内的所有素数。
求素数的方法有很多种,最简单的方法是根据素数的定义来求。对于一个自然数N,用大于1小于N的各个自然数都去除一下N,如果都除不尽,则N为素数,否则N为合数。但是,如果用素数定义的方法来编制计算机程序,它的效率一定是非常低的,其中有许多地方都值
得改进。
1)对于一个自然数N,只要能被一个非1非自身的数整除,它就肯定不是素数,所以不必再用其他的数去除。
2)对于N来说,只需用小于N的素数去除就可以了。例如,如果N能被15整除,实际上就能被3和5整除,如果N不能被3和5整除,那么N也决不会被15整除。
3)对于N来说,不必用从2到N-1的所有素数去除,只需用小于等于
的所有素数去除就可以了。这一点可以用反证法来证明:
如果N是合数,则一定存在大于1小于N的整数d1和d2,使得N=d1×d2。
如果d1和d2均大于
,则有:N=d1×d2>
×
=N。而这是不可能的,所以,d1和d2中必有一个小于或等于
。
第二种求素数的方法是用筛法求素数。此法称厄拉多塞筛法。厄拉多塞是一位古希腊数学家,他在寻找素数时,采用了一种与众不同的方法:
先将2~N的各数写在纸上,并在在2的上面画一个圆圈,然后划去2的其他倍数;第一个既未画圈又没有被划去的数是3,将它画圈,再划去3的其他倍数;现在既未画圈又没有被划去的第一个数是5,将它画圈,并划去5的其他倍数……,依次类推,直到所有小于或等于N的各数都画了圈或划去为止。这时,表中画了圈的以及未划去的那些数正好就是小于N的素数。
这种方法很像一面筛子,把满足条件的数留下来,把不满足条件的数筛掉。在计算机中,筛法可以用给数组单元置零的方法来实现。具体来说就是:
首先声明一个数组a(i),i=1,2,3,…,同时,令所有的数组元素都等于下标值,即a (i)=i,以生成1~N的自然数。并根据以上做法,令i不是素数的元素a(i)=0(即划去该数)。输出结果时,只要判断a(i)是否等于零即可。
筛法是计算机程序设计中常用的算法之一。
第三种方法是用6N±1法求素数。任何一个自然数,总可以表示成为如下的形式之一:
6N,6N+1,6N+2,6N+3,6N+4,6N+5 (N=0,1,2,…)
显然,当N≥1时,6N,6N+2,6N+3,6N+4都不是素数,只有形如6N+1和6N+5的自然