定义函数、参数、返回值、递归算法
1.有如下Visual Basic自定义函数:
Function f(i As Single, j As Integer) As Boolean
If i <= j Then f = True Else f = False
End Function
则该函数的返回值类型是
(A)单精度实数型(B)整数型(C)逻辑型(D)字符串型
2.有如下Visual Basic自定义函数:
Function f(i As Single) As Boolean
If i <= 0 Then f = True Else f = False
End Function
执行语句s = f(-0.4)后,逻辑型变量s的值是
(A)0 (B)1 (C)True (D)False
3.下列VB程序模块
If n<=1 then
f=1
Else
f=n*f(n-1)
End if
End function
该模块采用的算法是
A.枚举 B. 查找 C. 排序 D.递归
4.任意输入n(n<=37000),计算1-4+7-…+(n*3-2)*(-1)(n+1)的数值Visual Basic程序代码如下:
Function jc(k as long) as long
If k mod 2=0 then jc=(k*3-2)*(-1) else jc=k*3-2
End function
Private sub Command1_click()
Dim s as long,I as long
N=val(text1.text)
s=0
For i=1 to n
s=s+ ____________
Next i
End sub
划线处的选项是()
A.J*3-2
B. (i*3-2)*(-1)^i
C. jc(i)
D. jc((i*3-2)*(-1)^(i+1))
5.【201608温模拟卷】某VB程序使用了递归函数,代码如下:
Private sub Command1_click( )
Text1.text=f(3)
End sub
Function f(x as integer) as string
If x=1 then f=1 else f=f(x-1)+2
End function
运行程序并点击按钮Command1后,文本框Text1中显示的内容是: A. 1 B. 3 C. 5 D. 7 6.【201608绍兴模拟卷】某VB 程序代码如下: Dim n as integer
Function f(k as integer) as long
If k<=2 then f=1 else f=f(k-1)+f(k-2) End Function
Private Sub Command1_Click( ) n=val(text1.text)
Label2.caption=str(f(n)) End Sub
该VB 程序采用的主要算法是:
A .枚举 B. 查找 C. 排序 D.递归 7.上题如果在text1中输入5,则label2中最后显示的是( ) A .str(f(n)) B. str(5) C. 5 D.10
8.【原创】某VB 程序代码如下,在text1中输入10,运行结果是( ) Function fact2(n As Integer) As String
If n = 1 Then fact2 = 1 Else fact2 = fact2(n \ 2) & n Mod 2 End Function
Private Sub Command1_Click() Dim x As Integer x = Val(Text1.Text) Text2.Text = fact2(x) End Sub
A .没有结果
B .text2中输出fact2(x)
C .text2中输出1010
D .程序出错
9.有如下VB 程序段:
Private Sub Command1_Click()
Dim nq As Long
nq = f(7)
Label1.Caption = Str(nq)
End Sub
Function f(n As Integer) As Long
If n = 1 Or n = 2 Then f = 1
If n > 2 Then f = 2 * f(n - 1) + f(n - 2)
End Function
A .17 B. 41 C. 99 D.239 第10题程序
10.(2013江苏12月学考)如下程序:(程序在上面右边)执行后,窗体上输出的是: A .s=s(5) B. s=1 C.s=120 D.s=s(n-1)*n
11.有一组数列1,4,7,10,13,……求前n 项的和,小明想用递归算法来完成,那么他设计的递推公式正确的是:( )
A. f(1)=1: f(n)=n*2-1
B. f(1)=1: (n)=n*2+1
C. f(1)=1: f(n)=n+3
D. f(1)=1: f(n)=f(n-1)+3
Private Sub Command1_Click() Print "s=" & Str(s(5)) End Sub Private Function s(n As Integer) As Integer If n = 1 Then s = 1 Else s = s(n - 1) * n End If End Function
12.(2013江苏12月学考)如下程序:
Private Sub Command1_Click()
Dim x As Integer
x = s(4)
Print x
End Sub
Private Function s(n As Integer) As Integer
If n = 1 Then
s = 1
Else
s = s(n - 1) + n
End If
End Function
程序运行时,单击按钮后,变量x
A .1 B. 4 C.10 D.36
13.有一段程序如第13A .1 B. 4 C.13 D.35
下列说法错误的是:
A . 函数调用gcd1(6,15)和gcd2(24,9)的结果是相等的
B . 函数调用gcd2(18,gcd2(24,9))的结果是3
C . 函数调用gcd2(18,gcd2(24,9))采用了递归算法
D . 函数gcd1采用了递归算法
阅读下列VB 程序中,完成15、16题 15.程序如下所示: Private Sub Command1_Click() Dim y As Long Text1.Text = "" y = f(3) Label1.Caption = Str(y) End Sub 程序运行时,单击命令按钮Command1后,文本框Text1中显示的内容是: A .3 B. 3 2 1 C. 1 2 3 D. 1
Function f(n As Integer) As Long Text1.Text = Text1.Text + Str(n) If n <= 1 Then f = 1 Else f = f(n - 1) + 2 End If End Function
16.程序运行时,单击命令按钮Command1后,文本框Label1中显示的内容是: A .f(3) B. f(1) C. 5 D. 1
17.有程序如下,下面说法正确的是:
Private Sub Command1_Click()
Dim sum As Integer, i As Integer
For i = 5 To 3 Step -1
sum = sum + fact(i)
Next i
Print "sum=" & sum
End Sub
A. 该程序采用了递归算法
B. 程序执行后,输出内容为:120
C. 程序执行后,输出内容为:sum=120
D. 程序执行后,输出内容为:sum=150
18. 有程序如下,下面说法正确的是: (注意17、18题逻辑上是一样的代码,结果却不同) Private Sub Command1_Click()
Dim sum As Integer, i As Integer
Dim k As Integer
For i = 5 To 3 Step -1
k = i
sum = sum + fact(k)
Next i
Print "sum=" & sum End Sub
A. 该程序采用了递归算法
B. 程序执行后,输出内容为:120
C. 程序执行后,输出内容为:sum=120
D. 程序执行后,输出内容为:sum=150 19.下面程序执行后,输出的i 的值是: Private Sub Command1_Click() Dim sum As Integer, i As Integer For i = 5 To 4 Step -1 sum = sum + fact(i) Print i Next i End Sub A .3 B. 2 C.1 D. 0
20. 下面程序执行后,输出的i 的值是: Private Sub Command1_Click() Dim sum As Integer, i As Integer For i = 5 To 4 Step -1 sum = sum + fact(i) Print i Next i End Sub A .3 B. 2 C.1 D. 0
请根据17到20题,是要告诉同学们,函数除了返回结果之外,同时还会将参数也传递回去的,所以,这点要务必注意。
Function fact(n As Integer) As Integer fact = 1 Do While n > 0 fact = fact * n n = n - 1 Loop End Function Function fact(n As Integer) As Integer
fact = 1
Do While n > 0
fact = fact * n
n = n - 1
Loop
End Function
Function fact(n As Integer) As Integer fact = 1 Do While n > 0 fact = fact * n n = n - 1 Loop End Function Function fact(n As Integer) As Integer fact = 1 Do While n >2 fact = fact * n n = n - 1 Loop End Function
函数类的题目需要继续补充:如递归的,函数参数传递的等等
计算整数a的近似算术平方根算法如下:,......
3,2,1
)
(1
1
=
+
=
+
i
x
x
i
a
i
i
先取x1=1,然后通过上述公式计算x2,再有x2计算x3,……,知道|x i-x i-1|<0.00001,则x i为解。
递归算法:
Function fun(x As Integer, x0 As Double) As Double
Dim x1 As Double
x1 = (x0 + x / x0) / 2
1.请在①划线处填写合适的代码
2.上述程序虚线框处采用的算法是:__________,②处的代码作用是:______________
②处语句改成b=int((b*100)+________)/100可以实现和②处语句相同的功能。
3.小王在测试程序是发现结果都只有2位小数,要想保留3位小数,哪条语句需要修改,
请写出修改后的代码。_____________________________________________________ Private Sub Command2_Click() '递归算法
Dim a As Integer, b As Double
a = Val(Text3.Text)
b = fun(a, 1)
b = Int((b + 0.005) * 100) / 100 '②
Text4.Text = Str(b)
End Sub
用递归将10进制转成2进制
Function fact2(n As Integer) As String
If n = 1 Then ‘三个转换这里判断为何不同fact2 = 1
Else
fact2 = fact2(n \ 2) & n Mod 2
End If
End Function
Private Sub Command1_Click()
Dim x As Integer
x = Val(Text1.Text)
Text2.Text = fact2(x)
End Sub
用递归将10进制转成8进制
Function fact8(n As Integer) As String
If n <= 7Then
fact8 = n
Else
fact8 = fact8(n \ 8) & n Mod 8
End If
End Function Private Sub Command2_Click()
Dim x As Integer
x = Val(Text1.Text)
Text2.Text = fact8(x)
End Sub
用递归将10进制转成16进制Function fact16(n As Integer) As String If n <= 15 Then
If n < 10 Then
fact16 = 1
Else
fact16 = Chr(55 + n)
End If
Else
fact16 = fact16(n \ 16) & n Mod 16 End If
End Function
Private Sub Command3_Click()
Dim x As Integer
x = Val(Text1.Text)
Text2.Text = fact16(x)
End Sub