改错题
计算1000以内,既能被6整除又能被8整除的数的个数。程序中有两行有错误。改正错误,使它能输出正确的结果。
Private Sub Command1_Click()
Dim n As Integer
Dim x As Integer
x = 1
n = 0
Do While x <= 1000
If x Mod 6 = 0 Or x Mod 8 = 0 Then
n = n + 1
End case
x = x + 1
Loop
Print n
End Sub
改错:(1)将If语句中的Or改为And;(2) 将End Case语句改为End If
正确结果:41
求[1,5000]内能被5整除的前若干个偶数之和,直到和大于50000为止。程序中有两行有错误。改正错误,使它能输出正确的结果。
Private Sub Command1_Click()
Dim x As Integer
Dim s As Long
x = 2
Do While x <= 5000
If x Mod 5 = 0 Then
s = s + x
If s > 50000 Then
Exit For
End If
End If
x = x + 1
Loop
Print s
End Sub
改错:(1)将Exit For语句改为Exit Do;(2) 将x = x + 1语句改为x = x + 2
正确结果:50500
求数列2,4,8,16,32,…前若干项之和。当和大于9000时,终止求和并输出结果。程序中有两行有错误。改正错误,使它能输出正确的结果。
Private Sub Command1_Click()
Dim s As Integer
Dim x As Integer
x = 1
Do
x = x + 2
s = s + x
Until s > 9000
Print s
End Sub
改错:(1)将x = x + 2语句改为x = x * 2;(2) 将Until s > 9000语句改为Loop Until s > 9000
正确结果:16382
求数列2/1,3/2,5/3,13/8,……的前10项之和。程序中有错误。改正错误,使它能输出正确的结果。
Private Sub Form_Click()
Dim i As Integer, t As Integer, n As Integer
Dim a As Integer, b As Integer
Dim s As Single
a = 2: b = 1: n = 10
For i = 1 To n
s = s + a / b
t = b
a = a + b
a = t
Next i
Print s
End Sub
改错:(1)将t = b语句改为t = a;(2) 将a = t语句改为b = t
正确结果:16.47991
求[200,300]之间的有奇数个不同因子的最大整数。程序中有两行有错误。改正错误,使它能输出正确的结果。
Private Sub Command1_Click()
For x = 300 To 200
n = 0
For i = 1 To x
If x Mod i = 0 Then
n = n + 1
End If
Next i
If n / 2 <> 0 Then
Print x
Exit For
End If
Next x
End Sub
改错:(1)在For x = 300 To 200语句后面增加Step -1;(2) 将If n \\ 2 <> 0 Then语句改为If n Mod 2 <> 0 Then
正确结果:2
求这样的一个三位数,其个位数不大于2。若将个位数移动到百位之前(如:321移成132),新三位数大于原三位数的两倍。程序中有两行错误,改正错误,使程序能输出正确的结果。
Private Sub Command1_Click()
For i = 0 To 9
For j = 0 To 9
For k = 0 To 9
n = 100 * i + 10 * j + k
m = 100 * k + 10 * i + j
If m > 2 * n Then Print n
Next k
Next j
Next i
End Sub
改错:(1)将For i = 0 To 9语句改为For i = 1 To 9;(2) 将For k = 0 To 9语句改为For k = 0 To 2
正确结果:102
求满足以下条件的(a,b,c)的组数: (1) 1/(a^2)+1/(b^2)=1/(c^2) ;(2)a>b>c ;(3)a+b+c<100。 程序有错误,改正错误,使程序能输出正确的结果。
Private Sub Command1_Click()
s = 0
For c = 1 To 100
For b = 1 To 100
For a = 1 To 100
If a + b + c < 100 Or 1 / (a ^ 2) + 1 / (b ^ 2) = 1 / (c ^ 2) Then s = s + 1
Next a
Next b
Next c
Print s
End Sub
改错:将If语句改为If a > b And b > c And a + b + c < 100 And 1 / (a ^ 2) + 1 / (b ^ 2) = 1 / (c ^ 2) Then s = s + 1
正确结果:2
求[444,666]之间最大的素数是多少?程序中有错误。改正错误,使它能输出正确的结果。
Private Sub Command1_Click()
Dim x As Integer
Dim i As Integer
For x = 666 To 444
k = Int(Sqr(x))
For i = 2 To k
If x Mod i = 0 Then
Exit Do
End If
Next i
If i > k Then
Print x
Exit For
End If
Next x
End Sub
改错:(1)在For x = 666 To 444语句后面增加Step -1;(2) 将Exit Do语句改为Exit For
正确结果:661
填空题(二级题,一级学生也可参考)
算年龄。用爷爷的年龄的5倍加6得的和,再乘以20,再加上奶奶的年龄,再减去365,得数为6924,又知爷爷比奶奶大2岁。求爷爷、奶奶的年龄的和。
Private Sub Form_Click()
For a = 1 To 200
For b = 1 To 200
If ________________________________ Then
Print a + b
End If
Next b
Next a
End Sub
填空:将下划线换成a = b + 2 And 20 * (5 * a + 6) + b - 365 = 6924
正确结果:140
求方程5X-4Y=2,在|X|<=100,|Y|<=50内的整数解中|X|+|Y|最大值?
Private Sub Form_click()
Max = 0
For x = -100 To 100
For y = -50 To 50
If 5 * x - 4 * y = 2 Then
s = Abs(x) + Abs(y)
________________________________
End If
Next y
Next x
Print Max
End Sub
填空:将下划线换成If Max < s Then Max = s
正确结果:86
一辆以固定速度行驶的汽车,司机看到里程表上从左到右的读数和从右到左的读数是相同的,这个数是12321(公里),2小时后,里程表上再次出现一个新的对称数。问车的速度是多少公里/小时?
Private Sub Form_Click()
Dim m As Long
Dim n As Long
Dim a(0 To 4) As Byte
m = 12321
n = m
Do
n = n + 1
For i = 0 To 4
a(i) = n \\ 10 ^ i Mod 10
Next i
_______________
Print (n - m) / 2
End Sub
填空:将下划线换成Loop Until a(0) = a(4) And a(1) = a(3)
正确结果:50
找出1-1000之间的全部同构数的个数。同构数是指一个数,它出现在它的平方数的右端。例如,5的平方是25,5是25中右端的数,5就是一个同构数。同理,25也是一个同构数。
Private Sub Form_click()
For i = 1 To 999
j = i * i
Select Case j
Case Is < 99
k = j Mod 10
Case Is < 999
k = j Mod 100
Case Else
k = j Mod 1000
End Select
If ________________Then s = s + 1
Next i
Print s
End Sub
填空:将下划线换成i = k
正确结果:6
求杨辉三角形中,第20行第10列的数为多少? 杨辉三角形:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
…………………………
Private Sub Form_click()
Dim a() As Long
n = 20
ReDim a(n, n)
For i = 1 To n
a(i, i) = 1
a(i, 1) = 1
Next i
For i = 3 To n
For j = 2 To i - 1
________________________________
Next j
Next i
Print a(20, 10);
End Sub
填空:将下划线换成a(i, j) = a(i - 1, j - 1) + a(i - 1, j)
正确结果:92378