VB程序设计-多种方法求阶乘
- 格式:docx
- 大小:124.27 KB
- 文档页数:3
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。
阶乘的快速计算方法阶乘是数学中一个非常重要的概念,它在组合数学、概率论等领域有着广泛的应用。
然而,当阶乘的数值非常大时,传统的计算方法往往会因为计算量太大而变得非常耗时。
为了解决这个问题,人们提出了一系列快速计算阶乘的方法。
一、基于递归的快速计算方法递归是一种非常常见的计算方法,它可以将一个大问题分解成若干个小问题,然后通过解决小问题来解决大问题。
对于阶乘来说,我们可以使用递归的方法来计算。
具体而言,我们可以将阶乘分解为两个部分:首先计算阶乘数n的一半,然后将结果平方得到n的阶乘。
这样,我们就可以通过递归的方式来计算阶乘。
二、基于迭代的快速计算方法除了递归,迭代也是一种常见的计算方法。
与递归不同,迭代是通过循环来实现计算的过程。
对于阶乘来说,我们可以使用迭代的方法来计算。
具体而言,我们可以使用一个循环来计算阶乘。
首先,我们将阶乘的初始值设为1,然后通过循环不断将当前值乘以下一个数,直到计算到n为止。
这样,我们就可以通过迭代的方式来计算阶乘。
三、基于公式的快速计算方法除了递归和迭代,还有一种基于公式的快速计算阶乘的方法。
这种方法通过使用数学公式来计算阶乘,从而减少计算的复杂度。
具体而言,我们可以使用斯特林公式来计算阶乘的近似值。
斯特林公式是一个近似计算阶乘的公式,它可以通过对数函数的性质来简化阶乘的计算。
使用斯特林公式,我们可以将阶乘的计算复杂度从O(n)降低到O(log n)。
四、基于查表的快速计算方法除了以上三种方法,还有一种基于查表的快速计算阶乘的方法。
这种方法通过预先计算并保存阶乘的结果,然后在需要计算阶乘时直接查表获取结果,从而减少计算的时间。
具体而言,我们可以使用动态规划的方法来计算并保存阶乘的结果。
首先,我们将阶乘的初始值设为1,并将其保存在一个表中。
然后,通过循环计算并保存每个数的阶乘结果,直到计算到n为止。
这样,当需要计算阶乘时,我们只需要从表中查找结果,而不需要重新计算。
总结起来,阶乘的快速计算方法有基于递归、迭代、公式和查表等多种方式。
模(一二)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各种算法一、求累加和Dim sum&,i%,n%Sum=0n=inputbox(“请输入n的值:”, “输入n的值”)For i = 1 to nSum=sum+iNext iPrint “1+2+...”;n;” =”; sumEnd sub二、求阶乘Private Sub Form_Click()Dim i%, n%, p&p = 1n = Val(InputBox("请输入n:"))For i = 1 To np = p * iNext iMsgBox n & "!=" & p, , "求阶乘"End Sub三、求最值、平均值Private Sub Command1_Click()Dim n As Integer, i As Integer, min As Integer, max As Integer, aver As Single, s As Integer n = Val(InputBox("输入个数:"))s = Int(Rnd * 100) + 1max = smin = saver = sPrint "第1个数是:" & sFor i = 2 To ns = Int(Rnd * 100) + 1Print "第" & i & "个数是:" & sIf s > max Then max = sIf s < min Then min = saver = aver + sNext iaver = aver / nPrint "max="; max; "min="; min; "aver="; averEnd Sub五、输出各种金字塔图形Private Sub Form_Click()Dim i%, j%For i = 1 To 4Print spc(2 * i);For j = 1 To 9- 2 * iPrint "◆";Next jPrintNext iEnd Sub六、字符串重新排列输出Fibonacci 数列求Fibonacci 数列的前20项:⎪⎩⎪⎨⎧>+===--)2(_)2(1)1n 1n f f f 21n n n n (Private Sub Form_Click()Dim a%(1 To 20)Print "Fibonacci 数列的前20项为"Print 1; 1;For i = 3 To 10a(1) = 1a(2) = 1a(i) = a(i - 1) + a(i - 2)Print a(i);Next iPrintFor i = 11 To 20a(i) = a(i - 1) + a(i - 2)Print a(i);Next iEnd Sub六、判断素数Private Sub Form _Click()Dim m%, j%, k%m = Val(InputBox("m=?"))If m = 0 Or m = 1 ThenMsgBox m & "不是素数"Elsek = Int(Sqr(m))For j = 2 To kIf m Mod j = 0 Then Exit For Next jIf j > k ThenMsgBox m & "是素数"ElseMsgBox m & "不是素数"End IfEnd IfEnd Sub八、辗转相除求最大公约数、最小公倍数Private Sub Form_Click()Dim n%, m%, x%, r%, t%m = Val(InputBox("m="))n = Val(InputBox("n="))x = m * nIf m < n Then t = m: m = n: n = tDor = m Mod nm = nn = rLoop While r <> 0Print "最大公约数=", mPrint "最小公倍数=", x / mEnd Sub九、迭代法求平方根用迭代法求a 的平方根。
<大学程序设计基础-Visual Basic>教材课后习题答案第1章一、选择题1 2 3 4 5 6 7B D BC B B D第2章一、选择题1 2 3 4 5 6 7 8 9 10B C B C B C A A A A11 12 13 14A B A A二、填空题1.rem或’ _ :2.“” # #3.5x2-3x-2sinA/34.3214565.300三、操作题1、程序段:Private Sub Command1_Click()Dim x As Integer, y As IntegerDim s As Long, c As Longx = Text1.Texty = Text2.Texts = x * yc = (x + y) * 2Label3.Caption = "长方形的面积为" + Str(s)Label4.Caption = "长方形的周长为" + Str(c)End Sub3、程序段:Private Sub Command1_Click()Text1.Text = "第一"End SubPrivate Sub Command2_Click()Text1.Text = "第二"End Sub4、程序代码:Private Sub Text1_Change()Text1.MaxLength = 10End Sub5、程序代码:Private Sub Text1_Click()Text1.SelStart = 0Text1.SelLength = Len(Text1.Text)End Sub第3章一、选择题1 2 3 4 5 6 7D A D B A D B二、填空题1. False2.B^2-4*a*c else三、操作题1.从键盘输入三个值,判断它们能否构成三角形的三个边。
如果能构成一个三角形,则计算三角形的面积。
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。