VB程序设计-多种方法求阶乘

合集下载

VB程序设计-多种方法求阶乘

VB程序设计-多种方法求阶乘

VB程序设计-多种方法求阶乘(作者:草原飞狼 2014年5月26日)声明:仅供学习与交流使用,高手请飘过,谢谢!所有代码都是个人亲自编写并调试成功。

布局运行界面(1)运行界面(2)源代码如下:Private Sub Command1_Click()Rem 求任意数阶乘,不大于171Dim mul As DoubleDim i As IntegerDim k As Integermul = 1 '赋初值k = Val(InputBox("请输入一个正整数,不大于171!", "输入提示", "5")) Rem 以下算法是求指定数的阶乘,典型的算法For i = 1 To kmul = mul * iNext iPrint k & "的阶乘结果是:"; mulEnd SubPrivate Sub Command2_Click()Rem 清空Form1.ClsEnd SubPrivate Sub Command3_Click()Rem 退出Unload MeEnd SubPrivate Sub Command4_Click()Rem 普通过程求阶乘Dim mul As DoubleDim i As IntegerDim k As Integermul = 1 '赋初值k = Val(InputBox("请输入一个正整数,不大于171!", "输入提示", "5"))Rem 以下算法是求指定数的阶乘Call fac(k) '函数调用,注意调用方法Print k & "的阶乘结果是:"; fac(k)End SubPrivate Function fac(ByVal k As Integer) As Double 'byval表示参数按值传递Rem 普通的函数过程Dim i As IntegerDim mul As Doublemul = 1For i = 1 To kmul = mul * iNext ifac = mul '结果返回给函数,典型的用法End FunctionPrivate Sub Command5_Click()Rem 递归过程求阶乘Dim i As IntegerDim k As IntegerDim mul As Doublemul = 1 '赋初值k = Val(InputBox("请输入一个正整数,不大于171!", "输入提示", "5"))Rem 以下递归函数的调用Call fac_digui(k)Print k & "的阶乘结果是:"; fac_digui(k)End SubPrivate Function fac_digui(ByVal k As Integer) As DoubleRem 递归过程求阶Rem 以下是递归算法求阶乘,注意写法,编写递归算法时,方法类似If k = 1 Thenfac_digui = 1Elsefac_digui = fac_digui(k - 1) * kEnd IfEnd Function。

VB递归算法

VB递归算法
End Function
调用
递归算法的基本思想是把规模较大问题 变成规模较小的、规模较小的问题又变 成规模更小的问题,当问题小到一定程 度时,可以直接得出它的解,从而得到 原来问题的解。即采用“大事化小、小 事化了”的基本思想。
调用
y = fact(3)
…… fact = 3 * fact (2)
…… fact = 2 * fact (1)
Function age(n As Integer) As Long If n = 1 Then
age = 10 Else
age = age(n - 1) + 2 End If End Function Private Sub Command1_Click()
print "第五个人的年龄为" + Str(age(5)) End Sub
Function fact(n As Integer) As Integer If n <= 1 Then fact = 1 Else fact = n * fact (n - 1) End If
End Function
递归函数调用: 求3的阶乘的值
Function fact(n As Integer) As Integer
fact = 1 ……
fact (3)=6 返回
fact (2)=2 返回
fact (1)=1 返回
递归算法的实现要点
➢ (1)有明确的结束递归的边界条件(又称终止条件)以及结束 时的边界值,可以通过条件语句(If语句)来实现
➢ (2)函数的描述中包含其本身,即能用递归形式表示,且递 归终止条件的发展。
的所有整数,解决这个问题,最适合的算法是( A )

阶乘的快速计算方法

阶乘的快速计算方法

阶乘的快速计算方法阶乘是数学中一个非常重要的概念,它在组合数学、概率论等领域有着广泛的应用。

然而,当阶乘的数值非常大时,传统的计算方法往往会因为计算量太大而变得非常耗时。

为了解决这个问题,人们提出了一系列快速计算阶乘的方法。

一、基于递归的快速计算方法递归是一种非常常见的计算方法,它可以将一个大问题分解成若干个小问题,然后通过解决小问题来解决大问题。

对于阶乘来说,我们可以使用递归的方法来计算。

具体而言,我们可以将阶乘分解为两个部分:首先计算阶乘数n的一半,然后将结果平方得到n的阶乘。

这样,我们就可以通过递归的方式来计算阶乘。

二、基于迭代的快速计算方法除了递归,迭代也是一种常见的计算方法。

与递归不同,迭代是通过循环来实现计算的过程。

对于阶乘来说,我们可以使用迭代的方法来计算。

具体而言,我们可以使用一个循环来计算阶乘。

首先,我们将阶乘的初始值设为1,然后通过循环不断将当前值乘以下一个数,直到计算到n为止。

这样,我们就可以通过迭代的方式来计算阶乘。

三、基于公式的快速计算方法除了递归和迭代,还有一种基于公式的快速计算阶乘的方法。

这种方法通过使用数学公式来计算阶乘,从而减少计算的复杂度。

具体而言,我们可以使用斯特林公式来计算阶乘的近似值。

斯特林公式是一个近似计算阶乘的公式,它可以通过对数函数的性质来简化阶乘的计算。

使用斯特林公式,我们可以将阶乘的计算复杂度从O(n)降低到O(log n)。

四、基于查表的快速计算方法除了以上三种方法,还有一种基于查表的快速计算阶乘的方法。

这种方法通过预先计算并保存阶乘的结果,然后在需要计算阶乘时直接查表获取结果,从而减少计算的时间。

具体而言,我们可以使用动态规划的方法来计算并保存阶乘的结果。

首先,我们将阶乘的初始值设为1,并将其保存在一个表中。

然后,通过循环计算并保存每个数的阶乘结果,直到计算到n为止。

这样,当需要计算阶乘时,我们只需要从表中查找结果,而不需要重新计算。

总结起来,阶乘的快速计算方法有基于递归、迭代、公式和查表等多种方式。

vb程序设计常用算法

vb程序设计常用算法
Print n "=" ? n1 "+" ? n2
Exit For '结束循环
End if
End if
a(imin) = temp
Next I
2.冒泡法排序(升序)
基本思想:(将相邻两个数比较,小的调到前头)
1)有n个数(存放在数组a(n)中),第一趟将每相邻两个数比较,小的调到前头,经n-1次
两两相邻比较后,最大的数已"沉底",放在最后一个位置,小数上升"浮起";
2)第二趟对余下的n-1个数(最大的数已"沉底")按上法比较,经n-2次两两相邻比较后得
,如果都除不尽,m就是素数,否则就不是。(可用以下程序段实现)
m =val( InputBox("请输入一个数"))
For i=2 To int(sqr(m))
If m Mod i = 0 Then Exit For
Next i
二、求两个整数的最大公约数、最小公倍数
分析:求最大公约数的算法思想:(最小公倍数=两个整数之积/最大公约数)
(1) 对于已知两数m,n,使得m>n;
(2) m除以n得余数r;
(3) 若r=0,则n为求得的最大公约数,算法结束;否则执行(4);
Next n1
五、排序问题
1.选择法排序(升序)
基本思想:
1)对有n个数的序列(存放在数组a(n)中),从中选出最小的数,与第1个数交换位置;
2)除第1 个数外,其余n-1个数中选最小的数,与第2个数交换位置;
3)依次类推,选择了n-1次后,这个数列已按升序排列。

VB程序设计的常用算法

VB程序设计的常用算法

Loop Print "e="; e End Sub Private Sub Command2_Click() Dim e#, t#, n% e = 1: t = 1: n = 1 Do Until (1 / t) < 0.00000001 t=t*n e=e+1/t n=n+1 Loop Print "e="; e End Sub Private Sub Command3_Click() Dim e#, t#, n% e = 1: t = 1: n = 1 While (1 / t) > 0.00000001 t=t*n e=e+1/t n=n+1 Wend Print "e="; e End Sub 3、
abc: Next i End Sub
补充实例:验证哥德巴赫猜想 (任意一个大于等于6的偶数都可以分解为两个素数之和)
基本思想:n为大于等于6的任一偶数,可分解为n1和n2两个数, 分别检查n1和n2是否为素数,如都是,则为一组解。如n1不是素数,就 不必再检查n2是否素数。先从n1=3开始,检验n1和n2(n2=N-n1)是否 素数。然后使n1+2 再检验n1、n2是否素数,… 直到n1=n/2为止。 利用上面的prime函数,验证哥德巴赫猜想的程序代码如下: Dim n%,n1%,n2% n=Val(InputBox("输入大于6的正整数")) For n1=3 to n\2 step 2 n2=n-n1 If prime(n1) Then If prime(n2) then Print n & "=" & n1 & "+" & n2 Exit For '结束循环 End if End if Next n1

VB程序

VB程序

模(一二)1.从键盘上输入3个数分别放入x y z中,编程使x中的数最大,z中的数最小。

Private Sub Form_Click()x = Val(InputBox("请输入x"))y = Val(InputBox("请输入y"))z = Val(InputBox("请输入z"))If x < y Then t = x: x = y: y = tIf y < z Then t = y: y = z: z = tIf x < y Then t = x: x = y: y = tPrint x; y; zEnd Sub2.用近似公式求自然对数e的值,精确到1/n!<F,F由用户输入。

e=1+1/1!+1/2!+……1/n! Private Sub Form_Click()Dim F#, e#, n%, t&e = 1: n = 1: t = 1F = Val(InputBox("输入F值"))Doe = e + 1 / tn = n + 1t = t * nLoop Until 1 / t <= FPrint eEnd Sub3.将d:\a.txt复制为d:\b.txt,要求不能直接使用Filecopy语句。

Private Sub Command1_Click()Dim sline As StringOpen "d:\a.txt" For Input As 1Open "d:\b.txt" For Output As 2While Not EOF(1)Line Input #1, slinePrint #2, slineWendClosePrint "Copy finished"End Sub4.统计200~300中素数的个数,显示在窗体上,素数的判断用自定义函数judge来实现。

vb第7章过程

vb第7章过程
– (1)把实参变量用括号扩起来(变为一个表达式) – 如:Hcf((m), (n)) – (2) 在形参前加关键字ByVal来实现。
2. 按值传递参数
(【例7-8在例7-7中使用传值调 用Function过程,求两个整数的 最大公约数和最小公倍数。)
Function Hcf(m As Long, n As Long) As Long Dim r As Long, c As Long If m < n Then c = m: m = n: n = c End If r = m Mod n Do While r <> 0 m = n n = r r = m Mod n Loop Hcf = n End Function
7.1 Sub 过程
Sub Procedure
模块化 子程序(Sub) 函数(Function) 事件过程
– 对事件作出响应的程序段 –事件过程由VB自行声明,用户不能增加或删除。
通用过程
– 多个事件过程可能需要使用的一个共用过程, –通用过程只能由别的过程调用。
7.1.1 事件过程与通用过程
实现方法 : 在形参前加关键字 ByRef 来实现。 如: Function Hcf(ByRef m As Long, ByRef n
As Long) As Long
p = Hcf(Hcf(l, m), n)
1. 按地址传递参数
(【例7-7利用例7-6中的Function 过程,求任意两数的最大公约数。)
常见错误
7.3 向过程传递参数
在调用一个过程时,把实际参数传送给过程中的形 式参数,实现形参与实参的结合。 7.3.1 形式参数与实际参数 1.形式参数 定义通用过程时出现的变量名,是接收数据的。 参数表中各项之间用逗号隔开,可以是: – 合法变量名;数组名(后面跟有左、右括号的)。 要使用变长字符串(x$或x As String)作为形参, 不能用形如X As String *8 定长字符串作为形参, 2.实际参数 调用过程时,一般是传送给过程的。 实际参数表中的各项用逗号隔开,可以是:常量、 表达式、变量。

VB常用算法总结大全

VB常用算法总结大全

22222 33333 44444
For I=2 to 3 S(2)=S(2)+X(I,1) S(3)=S(3)+X(I,5)
Next i for I=1 to 4
Next i Print t
Print Sum 思考:若把循环体前面置各变量初值的语句放 在循环体内,程序运行时会产生什么情况?
例求自然对数e的近似值,要求其误差小于0.00001,近似公式
为:
1 1 1
1
1
m1
e 1 ... ... 1
1! 2! 3! i!
i0 i!
i1 i!
常用算法总结—算法是对某个问题求解过程的描述
一、基本算法
1.累加、连乘
1~100的5或7的倍数的和
Sum = 0
3~10的乘积 t=1
For i = 1 To 100
For i =3 To 10
If i Mod 5 = 0 Or i Mod 7 = 0 Then
t=t*i
Sum = Sum + i End If Next i
Print i; "*"; j; "="; i * j;
Next j
Print
换作行用!?
Next i
End Sub
例:xh2.vbp
执行本程序,窗体上将显示九九乘法表。Ssfrm.frm
思考:打印上三角或下三角程序如何改动?要打印下 三角?
8. 打印图形
见下页
编写程序打印如外的循行右环数边用及图来每控行形制第:输一出个 Private Sub For字m符_C的l输ic出k(位) 置
******* ***** *** *
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

VB程序设计-多种方法求阶乘
(作者:草原飞狼 2014年5月26日)
声明:仅供学习与交流使用,高手请飘过,谢谢!所有代码都是个人亲自编写并调试成功。

布局
运行界面(1)
运行界面(2)
源代码如下:
Private Sub Command1_Click()
Rem 求任意数阶乘,不大于171
Dim mul As Double
Dim i As Integer
Dim k As Integer
mul = 1 '赋初值
k = Val(InputBox("请输入一个正整数,不大于171!", "输入提示", "5")) Rem 以下算法是求指定数的阶乘,典型的算法
For i = 1 To k
mul = mul * i
Next i
Print k & "的阶乘结果是:"; mul
End Sub
Private Sub Command2_Click()
Rem 清空
Form1.Cls
End Sub
Private Sub Command3_Click()
Rem 退出
Unload Me
End Sub
Private Sub Command4_Click()
Rem 普通过程求阶乘
Dim mul As Double
Dim i As Integer
Dim k As Integer
mul = 1 '赋初值
k = Val(InputBox("请输入一个正整数,不大于171!", "输入提示", "5"))
Rem 以下算法是求指定数的阶乘
Call fac(k) '函数调用,注意调用方法
Print k & "的阶乘结果是:"; fac(k)
End Sub
Private Function fac(ByVal k As Integer) As Double 'byval表示参数按值传递Rem 普通的函数过程
Dim i As Integer
Dim mul As Double
mul = 1
For i = 1 To k
mul = mul * i
Next i
fac = mul '结果返回给函数,典型的用法End Function
Private Sub Command5_Click()
Rem 递归过程求阶乘
Dim i As Integer
Dim k As Integer
Dim mul As Double
mul = 1 '赋初值
k = Val(InputBox("请输入一个正整数,不大于171!", "输入提示", "5"))
Rem 以下递归函数的调用
Call fac_digui(k)
Print k & "的阶乘结果是:"; fac_digui(k)
End Sub
Private Function fac_digui(ByVal k As Integer) As Double
Rem 递归过程求阶
Rem 以下是递归算法求阶乘,注意写法,编写递归算法时,方法类似
If k = 1 Then
fac_digui = 1
Else
fac_digui = fac_digui(k - 1) * k
End If
End Function。

相关文档
最新文档