某人为计算n!(0<n<=12)编写了下面的函数过程: Private Function fun(n As Integer)As Long Dim p As Longp=1For k=n-1 To 2 Step-1 p=p*kNext kfun=p End Function 在调试时发现该函数过程产生的结果是错误的,程序需要修改。下面的修改方案中有3种是正确的,错误的方案是______。
A.把p=1改为p=n
B.把For k=n-1 To 2 Step-1改为For k=1 To n-1
C.把For k=n-1 To 2 Step-1改为For k=1 To n
D.把For k=n-1 To 2 Step-1改为For k=2 To n
参考答案:B
解析:[知识点] For循环中循环控制变量[评析] 根据题意要求编写计算n!的函数过程,n!=1*2*3*…*n。题目中变量p的初值为1,由题意可知,变量p的功能是累计数的乘积,当执行第一次循环时p=1*(n-1),执行第二次循环时p=1*(n-1)+(n-2)…,当k变量变为2时循环终止。此时p=1*(n-1)*(n-2)*(n-3)*…3*2,即p=1*2*3*…(n-1),明显少乘了一个变量n,可以通过改变变量p的初值或者循环变量i来修改程序,使结果中多乘一个变量n。选项A把p=1改为p=n,当p=n时,执行第一次循环时p=n*(n-1),就乘了变量n,执行第二次循环时p=n+(n-1)*(n-2)…,所以选项A是正确的。选项B将For k=n-1 To 2 Step-1改为For k=1 To n-1,程序的执行结果为:1*2*3*…(n-1),少一项n,跟原程序的执行结果一样,所以选项B不正确。选项C“For k=1 To n”与选项D“For k=2 To n”执行的结果是一样的,都为:1*2*3*…(n),所以选项C、D均正确。