一道VB编程题
先写一个自定义函数计算n!private function high(n as integer) as integerdim a%,c%c=1for a = 1 to nc=c*anexthigh=cend function再来计算你上面的那个表达式:(假设n为10)dim m as integerdim sum as doublesum=0for m = 1 to 10sum = sum + 1/high(m)next最后返回的sum的值就是那个表达式的值.注:n值不可以太大(建议的范围是1-20)!因为阶乘的值递增非常快,它很快会超出常规数据类型的值的存储范围,造成程序出错.楼上同志们的回答仍然存在这一问题.
Private Function jiecheng(n As Integer) As Integer If n = 1 Then jiecheng = 1 Else jiecheng = n * jiecheng(n - 1) End If End Function
Public Function fc(a As Integer) As Integer '求阶乘函数If a = 1 Or a = 0 Thenfc = 1Elsefc = fc(a - 1) * aEnd IfEnd FunctionPrivate Sub Command1_Click()Dim sumDim i As IntegerFor i = 1 To Text1.Text '计算1/1!+1/2!+…+1/n!sum = sum + 1 / fc(i)Next iPrint sumEnd Sub
你的意思是先定义一个函数如n_x(x as inter)来计算n!然后用1/n_x(1)+1/n_x(2)+1/n_x(3)+。。。。。1/n_x(n)这样吧?如果必须用n_x(x as inter)这个函数我建议采用1楼的算法,二楼的也可以但是他用了递归调用的方法,调用函数是一个比较费时间的动作,因此二楼的方法作出的软件性能会降低很多,自己编个程序对比一下吧,我的测试结果是如果n比较小的时候二楼的比一楼的用时间少(出乎我的意料),如果n比较大时二楼的用时比较多,Private Sub Command1_Click()Dim n As Doublen = Me。
Text5j = Me。Text6Me。Text1 = TimeFor i = 1 To jjiecheng nNextMe。Text2 = TimeMe。Label1。Caption = Val(Me。Text2) - Val(Me。Text1)DoEventsMe。
Text3 = TimeFor i = 1 To jcal nNextMe。Text4 = TimeMe。Label2。Caption = Val(Me。Text4) - Val(Me。Text3)'Me。Label3。Caption = (Val(Me。
Text2) - Val(Me。Text1)) / (Val(Me。Text4) - Val(Me。
Text3))End SubPrivate Function jiecheng(n As Double) As DoubleIf n = 1 Thenjiecheng = 1Elsejiecheng = n * jiecheng(n - 1)End IfEnd FunctionPrivate Function cal(x As Double)result = 1For i = 1 To xresult = result * nNextcal = resultEnd Function另外建议你不要用先求出n的阶乘的方法,因为如果这样计算完这个算式要求出1到n所有数的阶乘,用这样的方法dim result as doubledim n_1 as doubleresult=0n_0=1for i=1 to nn_1=n_1/iresult=result+n_1next。
答:'窗体一个按钮(command1),五个文本框,三个表示边长,一个表示三角形形状,一个表示面积; private sub command1_click() di...详情>>
答:它在电缆电视的基础上,将分配网络的主干部分改为光缆,在各个服务节点处完成光电转换,再由同轴电缆将传输信号送到用户家里,可有效地实现Internet访问、电视点播...详情>>
答:七十年代的计算机网络 X.25 分组交换网:各国的电信部门建设运行 各种专用的网络体系结构:SNA,DNA Internet 的前身ARPANET进行实验运行 ...详情>>