资源描述
湖南省计算机等级考试辅导——VB程序设计题解 刘永逸编写 2007年上期
湖南省计算机等级考试辅导——VB程序设计题解
第 42 / 42 页
序号#问题#参考答案#题型
1#输出1~100中所有整数的平方和。 #328350#基本(正确答案:338350)
Private Sub Form_Click()
s = 0
For x = 1 To 100
s = s + x * x
Next
Print s
End Sub
2#求1~210之间所有整数的立方和并输出结果。 #490844025#基本
Private Sub Form_Click()
s = 0
For m = 1 To 210
s = s + m ^ 3
Next
Print s
End Sub
3#求1~55的平方根的和。(保留小数点两位) #275.43#基本
Private Sub Form_Click()
s = 0
For x = 1 To 55
s = s + Sqr(x)
Next
Print Round(s, 2)
End Sub
4#求S=1+1/2+1/3+……+1/100。 #5.187388#基本
Private Sub Form_Click()
s = 0
For x = 1 To 100
s = s + 1 / x
Next
Print Round(s, 6)
End Sub
5#计算y=1+2/3+3/5+4/7+…+n/(2*n-1)的值, n=50, 要求:按四舍五入的方式精确到小数点后第二位。 #26.47#基本
Private Sub Form_Click()
y = 0
For n = 1 To 50
y = y + n / (2 * n - 1)
Next
Print Round(y, 2)
End Sub
6#当m的值为50时,计算下列公式之值: t=1+1/2^2+1/3^2+…+1/m^2 (按四舍五入的方式精确到小数点后第四位)。 #1.6251#基本
Private Sub Form_Click()
t = 0
For m = 1 To 50
t = t + 1 / m ^ 2
Next
Print Round(t, 4)
End Sub
7#当m的值为50时,计算下列公式之值:t=1-1/(2*2)-1/(3*3)-…-1/(m*m) 要求:按四舍五入的方式精确到小数点后第四位。 #0.3749#基本
Private Sub Form_Click()
t = 1
For m = 2 To 50
t = t - 1 / (m * m)
Next
Print Round(t, 4)
End Sub
8#当n=50时,求下列级数和:S=1/(1*2)+1/(2*3)+…+1/(n*(n+1)) 要求:按四舍五入的方式精确到小数点后第四位。 #0.9804#基本
Private Sub Form_Click()
s = 0
For n = 1 To 50
s = s + 1 / (n * (n + 1))
Next
Print Round(s, 4)
End Sub
9#求Y=1-1/2+1/3-1/4+1/5... 前30项之和。要求:按四舍五入的方式精确到小数点后第二位。 #0.68#基本
Private Sub Form_Click()
s = 0
For n = 1 To 30 Step 2
s = s + 1 / n - 1 / (n + 1)
Next
Print Round(s, 2)
End Sub
10#求数学式1-1/2+1/3-1/4+1/5-1/6+…+1/99-1/100的值。 (按四舍五入方式精确到小数点后4位) #0.6882#基本
Private Sub Form_Click()
s = 0
For n = 1 To 100 Step 2
s = s + 1 / n - 1 / (n + 1)
Next
Print Round(s, 4)
End Sub
11#根据以下公式pi/2=1+1/3+1/3*2/5+1/3*2/5*3/7+1/3*2/5*3/7*4/9+…求pi(pi为圆周率)的值(保留6位小数)。当最后一项的值小于0.0005时停止计算。#3.140578#基本(按题意,答案应为:3.141106。但按数学原理,应该是当最后一个乘积项的最后一个分数小于0.0005时,计算结果为pi的近似值,即程序中t<0.0005改为(n - 1) / (2 * n - 1)<0.0005,这时结果为3.14159265358979)
Private Sub Form_Click()
s = 1
t = 1
For n = 2 To 1000
t = t * (n - 1) / (2 * n - 1)
s = s + t
If t < 0.0005 Then
Exit For
End If
Next
Print 2 * s
End Sub
12#求10的阶乘。 #3628800#基本
13#当n的值为25时,计算下列公式的值: s=1+1/1!+1/2!+1/3!+…+1/n! 要求:按四舍五入的方式精确到小数点后第四位。 #2.7183#基本
Private Sub Form_Click()
s = 1
t = 1
For n = 1 To 25
t = t * n
s = s + 1 / t
Next
Print Round(s, 4)
End Sub
或
Private Sub Form_Click()
s = 1
t = 1
For n = 1 To 25
t = t / n
s = s + t
Next
Print Round(s, 4)
End Sub
14#计算s=2!+4!+6!+8!。#41066#基本
Private Sub Form_Click()
s = 0
t = 1
For n = 1 To 8
t = t * n
If n Mod 2 = 0 Then s = s + t
Next
Print s
End Sub
或
Private Sub Form_Click()
s = 0
t = 1
For n = 2 To 8 Step 2
t = t * (n - 1) * n
s = s + t
Next
Print s
End Sub
15#求1~200之间能被7整除的数的平方和。 #377986#基本
Private Sub Form_Click()
s = 0
For x = 1 To 200
If x Mod 7 = 0 Then s = s + x * x
Next
Print s
End Sub
或
Private Sub Form_Click()
s = 0
For x = 7 To 200 Step 7
s = s + x * x
Next
Print s
End Sub
16#计算1000以内,既能被6整除又能被8整除的数的个数。#41#基本
Private Sub Form_Click()
Print 1000 \ 24 '24是6和8的最小公倍数
End Sub
或
Private Sub Form_Click()
n = 0
For x = 1 To 1000
If x Mod 6 = 0 And x Mod 8 = 0 Then
n = n + 1
End If
Next
Print n
End Sub
17#求1到400间,同时能被3和7整除的数的个数。#19#基本
同16题
18#求[351,432]之间既不能被3整除,又不能被8整除的数的个数。#47#基本
Private Sub Form_Click()
n = 0
For x = 351 To 432
If x Mod 3 <> 0 And x Mod 8 <> 0 Then
n = n + 1
End If
Next
Print n
End Sub
19#求[10,1000]之间满足除以7余5、除以5余3、除以3余1的所有整数的个数。 #9#基本
Private Sub Form_Click()
n = 0
For x = 10 To 1000
If x Mod 7 = 5 And x Mod 5 = 3 And x Mod 3 = 1 Then
n = n + 1
End If
Next
Print n
End Sub
或if中的条件改为(x+2) Mod 105=0
20#求200到500间,能被13整除但不能被17整除的数的个数。 #21#基本
Private Sub Form_Click()
n = 0
For x = 200 To 500
If x Mod 13 = 0 And x Mod 17 <> 0 Then
n = n + 1
End If
Next
Print n
End Sub
21#求3000以内能被17或23整除的正整数的个数。 #299#基本
Private Sub Form_Click()
n = 0
For x = 1 To 3000
If x Mod 17 = 0 Or x Mod 23 = 0 Then
n = n + 1
End If
Next
Print n
End Sub
22#求500以内(含500)能被5或9整除的所有自然数的倒数之和。按四舍五入的方式精确到小数点后第二位。 #1.48#基本
Private Sub Form_Click()
s = 0
For x = 1 To 500
If x Mod 5 = 0 Or x Mod 9 = 0 Then
s = s + 1 / x
End If
Next
Print Round(s, 2)
End Sub
23#求s=1+3+5+7+...直到s>3000为止。 #3025#基本
Private Sub Form_Click()
s = 0
For x = 1 To 10000 Step 2
s = s + x
If s > 3000 Then Exit For
Next
Print s
End Sub
24#求1到5000之间的能被5整除的前若干个偶数之和,直到和大于500为止。 #550#基本
Private Sub Form_Click()
s = 0
For x = 1 To 5000
If x Mod 5 = 0 And x Mod 2 = 0 Then
s = s + x
If s > 500 Then Exit For
End If
Next
Print s
End Sub
或
Private Sub Form_Click()
s = 0
For x = 10 To 5000 Step 10
s = s + x
If s > 500 Then Exit For
Next
Print s
End Sub
25#求[1,5000]内能被5整除的前若干个偶数之和,直到和大于50000为止。 #50500#基本
类24题
26#求出1到7000之间的能被5整除的前若干个偶数之和,当和值大于500时退出并输出和值。 #550#基本
类24题
27#求数列2,4,8,16,32,…前若干项之和。当和大于9000时,终止求和并输出结果。 #16382#基本
Private Sub Form_Click()
s = 0
For n = 1 To 100
s = s + 2 ^ n
If s > 9000 Then Exit For
Next
Print s
End Sub
28#求在 1,2,3,...,100中, 任选两个不同的数,要求它们的和能被3和7整除的数的对数(注意:3+5和5+3认为是同一对数)。 #236#基本
Private Sub Form_Click()
n = 0
For x = 1 To 100
For y = x + 1 To 100
If (x + y) Mod 21 = 0 Then
n = n + 1
End If
Next
Next
Print n
End Sub
29#算年龄。用爷爷的年龄的5倍加6得的和,再乘以20,再加上奶奶的年龄,再减去365,得数为6924,又知爷爷比奶奶大2岁。求爷爷、奶奶的年龄的和。 #140#基本
Private Sub Form_Click()
x = 0
For x = 1 To 1000
If (5 * x + 6) * 20 + (x - 2) - 365 = 6924 Then
Exit For
End If
Next
Print x + (x - 2)
End Sub
30#宴会上一共有1225次握手,设每一位参加宴会的人对其他与会人士都有一样的礼节,那么与会人士有多少? #50#基本
Private Sub Form_Click()
For n = 2 To 100
If n * (n - 1) = 2 * 1225 Then Exit For
Next
Print n
End Sub
31#已知 S=1+1/(1+2)+1/(1+2+3)+…+1/(1+2+3+…+N) ,当N的值为50时,求S的值。 要求:按四舍五入的方式精确到小数点后第四位。 #1.9608#基本
Private Sub Form_Click()
s = 0
t = 0
For n = 1 To 50
t = t + n
s = s + 1 / t
Next
Print Round(s, 4)
End Sub
32#已知S1=1, S2=1+2, S3=1+2+3,..., SN=1+2+3+...+N, 求S1,S2,S3,...,S100 中, 有多少个能被3和7整除? #18#基本
Private Sub Form_Click()
k = 0
s = 0
For n = 1 To 100
s = s + n
If s Mod 21 = 0 Then k = k + 1
Next
Print k
End Sub
33#已知S1=1, S2=1+2, S3=1+2+3,...,SN=1+2+3+...+N, 求在S1,S2,S3,...,S100 中,所有能被3和7整除的数之和. #31500#基本
Private Sub Form_Click()
k = 0
s = 0
For n = 1 To 100
s = s + n
If s Mod 21 = 0 Then k = k + s
Next
Print k
End Sub
34#已知Sn=A1+A2+A3+...+An, 其中,当n为奇数时An=n-1,当n为偶数时,An=n+1.例如:S6=0+3+2+5+4+7, 求:S60=A1+A2+A3+...+A60. #1830#基本
Private Sub Form_Click()
s = 0
For n = 1 To 60
If n Mod 2 = 0 Then a = n - 1 Else a = n + 1
s = s + a
Next
Print s
End Sub
35#sum=d+dd+ddd+……+ddd..d(d为1-9的数字)。例如:3+33+333+3333(此时d=3,n=4)。从键盘上输入d 的值为8,n的值为9,求sum的值。 #864197523#基本(正确答案:987654312)
Private Sub Form_Click()
d = InputBox("d=")
n = InputBox("n=")
x = 0
s = 0
For k = 1 To n
x = x * 10 + d
s = s + x
Print x, s
Next
Print s
End Sub
36#求字符串"87IM&2345kjwdssdcf"中数,字母字符的ASCII码之和。 #1113#基本
Private Sub Form_Click()
t = "87IM&2345kjwdssdcf"
s = 0
For n = 1 To Len(t)
c = Mid(t, n, 1)
If c>="A" and c<="Z" or c>="a" and c<="z" Then
s = s + Asc(c)
End If
Print c, Asc(c), s
Next
Print s
End Sub
37#求字符串“This is my Basic”所有字符的ASCII码之和。 #1436#基本
Private Sub Form_Click()
t = "This is my Basic"
s = 0
For n = 1 To Len(t)
c = Mid(t, n, 1)
s = s + Asc(c)
Print c, Asc(c), s
Next
Print s
End Sub
38#求一正整数等差数列的前六项的和,该数列前四项之和是26,四项之积是880。 #57#等差数列
(本题可手工求解:880=2*2*2*2*5*11=2*5*8*11,知等差数列为:2、5、8、11、...)
Private Sub Form_Click()
For a1 = 1 To 6
For d = 1 To 12
a2 = a1 + d
a3 = a1 + 2 * d
a4 = a1 + 3 * d
If a1 + a2 + a3 + a4 = 26 And a1 * a2 * a3 * a4 = 880 Then
a5 = a1 + 4 * d
a6 = a1 + 5 * d
Debug.Print a1; a2; a3; a4; a5; a6
Debug.Print a1 + a2 + a3 + a4 + a5 + a6
End
End If
Next
Next
Print s
End Sub
注:结果输出在立即窗口中。
39#求一正整数等差数列的前六项的平方和,该数列的前四项之和是26、之积是880。 #699#等差数列
Private Sub Form_Click()
For a1 = 1 To 6
For d = 1 To 12
a2 = a1 + d
a3 = a1 + 2 * d
a4 = a1 + 3 * d
If a1 + a2 + a3 + a4 = 26 And a1 * a2 * a3 * a4 = 880 Then
a5 = a1 + 4 * d
a6 = a1 + 5 * d
Print a1; a2; a3; a4; a5; a6
Print a1 * a1; a2 * a2; a3 * a3; a4 * a4; a5 * a5; a6 * a6
Print a1 * a1 + a2 * a2 + a3 * a3 + a4 * a4 + a5 * a5 + a6 * a6
d = 12: a = 6
End If
Next
Next
Print s
End Sub
40#我国今年的国民生产总值为45600亿元,若今后每年以9%的增长率增长,计算多少年后能实现国民生产总值翻一番? #9#递推
Private Sub Form_Click()
x=1 '或 45600
n=0
While x<2 '或 2*45600
n=n+1
x=1.09*x
Print n,s
Wend
Print n
End Sub
41#猴吃桃:有一天小猴子摘下了若干个桃子,当即吃掉一半,还觉得不过瘾,又多吃了一个。第二天接着吃了剩下的桃子中的一半,仍不过瘾,又多吃了一个。以后每天都是吃尚存桃子的一半零一个。到第10天早上小猴子再去吃桃子时,看到只剩下一个桃子了。问小猴子第一天共摘下了多少个桃子。 #1534#递推
Private Sub Form_Click()
x = 1
For n = 2 To 10
x = 2 * (x + 1)
Print 11 - n, x
Next
Print x
End Sub
42#猴子第1天摘下若干桃子,当即吃掉一半,又多吃一个,第二天将剩余的部分吃掉一半还多一个;以此类推,到第10天只剩余1个。问第1天共摘了多少桃子。 #3070#递推
(本题出题人认为第10天吃完后还剩下1个桃子,即第11天还有最后1个桃子可吃)
43#计算Y=X/1!-X^3/3!+X^5/5!-X^7/7!+……前20项的值(已知:X=2)。要求:按四舍五入的方式精确到小数点后第二位。 #0.91#递推
Private Sub Form_Click()
x = 2
t = x
y = x
For n = 3 To 40 Step 2
t = -t * x * x / (n - 1) / n
y = y + t
Next
Print Round(y, 2)
End Sub
44#求表达式e^x≈1+x+x^2/2!+x^3/3!+x^4/4!……+x^n/n!的近似值,设x=9,n=25; #8103.059#递推(答案在点小差别:8103.060)
Private Sub Form_Click()
x = 9
t = 1
s = 1
For n = 1 To 25
t = t * x / n
s = s + t
Next
Print Format(s, "#.000")
End Sub
45#求表达式e^x≈1+x+x^2/2!+x^3/3!+x^4/4!……+x^n/n!的近似值,直到最后一项小于0.01为止;设x=9 #8103.081#递推
Private Sub Form_Click()
x = 9
t = 1
s = 1
For n = 1 To 100
t = t * x / n
s = s + t
If t < 0.01 Then Exit For
Next
Print Format(s, "#.000")
End Sub
46#用cos(x)≈1-x^2/2!+x^4/4!-……+(-1)^(n)*(x^(2n))/(2n)!的公式求近似值,设x=9,n=15 #-0.911208#递推(正确答案:-0.91114264)
Private Sub Form_Click()
x = 9
t = 1
s = 1
For n = 1 To 15
t = t * (2 * n - 1) * (2 * n)
s = s + (-1) ^ n * x ^ (2 * n) / t
Next
Print s
End Sub
或
Private Sub Form_Click()
x = 9
t = 1
s = 1
For n = 1 To 15
t = -t * x * x / (2 * n - 1) / (2 * n)
s = s + t
'If 1 Then Exit For
Next
Print s
End Sub
47#用cos(x)≈1-x^2/2!+x^4/4!-……+(-1)^(n)*(x^(2n))/(2n)!的公式求近似值,直到最后一项绝对值小于0.00001为止。设x=7。 #0.753895#递推(正确答案:0.75390235)
Private Sub Form_Click()
x = 7
t = 1
s = 1
For n = 1 To 100
t = -t * x * x / (2 * n - 1) / (2 * n)
s = s + t
If Abs(t) < 0.00001 Then Exit For
Next
Print s
End Sub
48#用sin(x)≈x-x^3/3!+x^5/5!-……+(-1)^(n-1)*(x^(2n-1))/(2n-1)!的公式求近似值。 设x=7,n=15。 #0.6569831#递推(正确答案:0.656986617)
Private Sub Form_Click()
x = 7
t = 1
s = 7
For n = 2 To 15
t = t * (2 * n - 2) * (2 * n - 1)
s = s + (-1) ^ (n - 1) * x ^ (2 * n - 1) / t
Next
Print s
End Sub
补充题:已知数列:,1,1,2,3,5,8,13,21,...(其第一项和第二项都是1,从第三项开始,每一项都是其前二项之和),试求此数列的第50项。#12586269025
Private Sub Form_Click()
Dim f(100) As Variant
f(1) = 1
f(2) = 1
For n = 3 To 50
f(n) = f(n - 2) + f(n - 1)
Debug.Print f(n)
Next
Print f(50)
End Sub
49#求S=1/2+2/3+3/5+5/8+……的前30项的和(注:该级数从第二项开始,其分子是前一项的分母,其分母是前一项的分子与分母的和)。要求:按四舍五入的方式精确到小数点后第二位。 #18.46#递推
Private Sub Form_Click()
Dim f(100) As Variant
f(1) = 1
f(2) = 2
s = 1 / 2
For n = 3 To 31
f(n) = f(n - 2) + f(n - 1)
s = s + f(n - 1) / f(n)
Next
Print Round(s, 2)
End Sub
50#求数列:2/1,3/2,5/3,8/5,13/8,21/13,…… 前50项之和(注:此数列从第二项开始,其分子是前一项的分子与分母之和,其分母是前一项的分子)。(按四舍五入的方式精确到小数点后第二位) #83.24#递推(正确答案:81.20)
Private Sub Form_Click()
Dim f(100) As Variant
f(1) = 1
f(2) = 2
s = 2
For n = 3 To 51
f(n) = f(n - 2) + f(n - 1)
s = s + f(n) / f(n - 1)
Next
Print Round(s, 2)
End Sub
51#求数列2/1,3/2,5/3,13/8,……的前10项之和。#16.47991#递推
Private Sub Form_Click()
Dim f(100) As Variant
f(1) = 1
f(2) = 2
s = 2
For n = 3 To 11
f(n) = f(n - 2) + f(n - 1)
s = s + f(n) / f(n - 1)
Next
Print s
End Sub
52#已知:f(0)=f(1)=1 f(2)=0 f(n)=f(n-1)-2*f(n-2)+f(n-3) ( n>2 ) 求f(0)到f(50)的所有51个值中的最大值 。#598325#递推
Private Sub Form_Click()
Dim f(100) As Variant
f(0) = 1
f(1) = 1
f(2) = 0
Max = 1
For n = 3 To 50
f(n) = f(n - 1) - 2 * f(n - 2) + f(n - 3)
If f(n) > Max Then Max = f(n)
Next
Print Max
End Sub
53#已知:f(0)=f(1)=1 f(2)=0 f(n)=f(n-1)-2*f(n-2)+f(n-3) (n>2) 求f(0)到f(50)中的最小值。 #-288959#递推
Private Sub Form_Click()
Dim f(100) As Variant
f(0) = 1
f(1) = 1
f(2) = 0
Min = 0
For n = 3 To 50
f(n) = f(n - 1) - 2 * f(n - 2) + f(n - 3)
If f(n) < Min Then Min = f(n)
Next
Print Min
End Sub
54#已知一个数列的前3个数为1,2,3,以后每个数为前3个数的和,编程序求此数列的第35项。 #950439251#递推
Private Sub Form_Click()
Dim f(100) As Variant
f(1) = 1
f(2) = 2
f(3) = 3
For n = 3 To 35
f(n) = f(n - 3) + f(n - 2) + f(n - 1)
Next
Print f(35)
End Sub
55#金星和地球在某一时刻相对于太阳处于某一确定位置,已知金星绕太阳一周为225日,地球绕太阳一周为365日,问两个行星至少经过多少日仍同时回到原来的位置上? #16425#公倍数
Private Sub Form_Click()
n = 0
Do
n = n + 1
Loop Until n Mod 225 = 0 And n Mod 365 = 0
Print n
End Sub
56#士兵在演练过程中,队伍变换成10、21、35、60行时,队形都能成为矩形。问参加演练的士兵最少有多少人? #420#公倍数
Private Sub Form_Click()
n = 0
Do
n = n + 210
Loop Until n Mod 35 = 0 And n Mod 60 = 0
Print n
End Sub
57#求27090,21672,11352,8127的最大公约数。 #129#公约数
Private Sub Form_Click()
a = 27090
b = 21672
c = 11352
d = 8127
For e = d To 1 Step -1
If a Mod e = 0 And b Mod e = 0 And c Mod e = 0 And d Mod e = 0 Then
Exit For
End If
Next
Print e
End Sub
58#从键盘输入两个数51211314和84131421,利用辗转相除法求它们的最大公约数。求需要经过多少次辗转。 #18#公约数(正确答案:10)
Private Sub Form_Click()
'a = 84131421
'b = 51211314
a = InputBox("Enter a number:")
b = InputBox("Enter a number:")
If a <= b Then c = a: a = b: b = c
n = 0
While b > 0
r = a Mod b: a = b: b = r
n = n + 1
Print n; a; b; r
Wend
Print n
End Sub
59#已知数组S(x)中数组元素的值与Cos(x)一一对应,100=<X=<200,用比较法对数组进行从小到大的排序,并求出排完序之后S(150)的值。 #-0.049#排序(正确答案:0.058)
Private Sub Form_Click()
Dim s(100 To 200)
For x = 100 To 200
展开阅读全文