
1、阅读下列程序,写出正确运行结果
Dim n As Long
Dim s As Long
Dim x As Long
n = Val(InputBox("n="))
s = 0
Do While n > 0
x = n Mod 10
s = s + x
n = n \\ 10
Loop
Print s
程序运行时,输入518,运行输出结果是:____14____(6分)
提示: \\ 整除运算 如:237\\10=23
Mod 取余运算 如:237 mod 10=7
分析:
| 初始值 | 第一步 | 第而步 | 第三步 | ||
| X | X=n mod 10 | 0 | 8 | 1 | 5 |
| S | S=s+s | 0 | 0+8 | 0+8+1 | 0+8+1+5 |
| N | N=n \\ 10 | 518 | 51 | 5 | 0 |
Dim sum As Long
Dim i As Long
sum = 0
i = 0
Do While sum < 10
i = i + 1
sum = sum + i * i
Loop
Print sum
运行结果是: 14
分析:
| 初始值 | 第一步 | 第而步 | 第三步 | ||
| i | i =i+1 | 0 | 0+1 | 0+1+1 | 0+1+1+1 |
| Sum | sum=sum+i * i | 0 | 0+1^2 | 0+1^2+2^2 | 0+1^2+2^2+3^2 |
| 循环条件 | Sum<10 | 满足条件 | 1 满足条件 | 5 满足条件 | 14 不满足条件,循环终止 |
Dim sum As Integer
Dim k As Integer
sum = 0
For k = 1 To 10
If k Mod 2 = 0 Then sum = sum + k
Next k
Print sum
程序运行后输出结果: 30
分析:2 4 6 8 10 的和
If k Mod 2 = 0 Then sum = sum + k
可写为
If k Mod 2 = 0 Then
sum = sum + k
End If
4、分析完善程序
考拉兹猜想:
考拉兹猜想又称为3n+1猜想,指的是对于给定的每一个正整数,经过下列有限次变换后,最终都能变为1:
如果它是偶数,则对它除以2;
如果它是奇数,则对它乘3再加1;
…………
如此循环,直到得到1为止。
例如 n=6 ,根据上述规则需要8次变换后得到1,变换过程:6—3—10—5—16—8—4—2—1.
以下是验证考拉兹猜想的主要VB程序片段,请你补全代码:(8分)
Dim n As Long
Dim cnt As Long '变换次数cnt
n = Val(InputBox("n=")) '输入正整数n
cnt = 0
Do While n > 1
cnt = cnt + 1 '变换次数cnt累加
If n Mod 2 = 0 Then
n =_______n/2__________
Else
n = ____n*3+1__________
End If
Loop
分析验证:
Private Sub Command1_Click()
Dim n As Long
Dim cnt As Long '变换次数cnt
n = Val(InputBox("n=")) '输入正整数n
cnt = 0
Do While n > 1
cnt = cnt + 1 '变换次数cnt累加
If n Mod 2 = 0 Then
n = n / 2
Else
n = n * 3 + 1
End If
Print n
Loop
End Sub
5、选择算法,解决问题
在使用计算机解决问题时,选择合适的算法,是有效解决问题的关键。
分析下面的问题,请选择最合适的算法:_________(填:解析法/穷举法/递归法/排序法,6分)
搬砖问题:
100块砖,100人搬,一个男人搬4块,一个女人搬3块,两个小孩抬1块,要求一次全搬完,问需男、女、小儿各多少人?
6、选择算法,解决问题
在使用计算机解决问题时,选择合适的算法,是有效解决问题的关键。
分析下面的问题,请选择最合适的算法:_________(填:解析法/穷举法/递归法/排序法,6分)
猴子吃桃问题:
小猴有一天摘了若干个桃子,它非常贪吃,当天就吃掉了一半还多一个,第二天接着吃剩下的桃子一半多一个,以后每天都 是如此,至了第七天要吃桃子时,却发现只剩下一个。
问小猴那天一共摘了多少个桃子?
7、阅读下列程序,写出运行结果
Dim x As Integer
Dim y As Integer
y = 0
For i = 1 To 5
x = Val(InputBox("请输入:"))
y = y + x
Next i
print y
程序运行后,依次输入:10 20 30 40 50
运行输出结果是: 150
分析:
| 初始 | 第1次 | 第2次 | 第3次 | 第4次 | 第5次 | 第6次 | |
| i | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
| x | 0 | 10 | 20 | 30 | 40 | 50 | 不满足条件,循环终止 |
| y | 0 | 0+10 | 0+10+20 | 0+10+20+30 | 0+10+20+30+40 | 0+10+20+30+40+50 |
For i = 1 To 10 'i控制*的行数
For j = 1 To i 'j控制每行*的个数
Print "*" ; '输出 *
Next j
Print '输出换行
Next i
运行结果是:___D___(填:A/B/C/D,6分)
9、分析完善程序
“完数”是指一个自然数恰好等于它的因子(不包含本身)之和。
如6的因子为1、2、3,而6=1+2+3,因而6就是完数。
再如28的因子为1、2、4、7、14,而28=1+2+4+7+14,因而28也是完数。
问题:输入一个正整数n,判断该正整数是否为完数。
要判断一个整数n是否为完数,最简单的方法是:
求出1到n-1之间的所有因子和为sum,如果sum的值和n的值相同,则n就是完数。
以下代码是判断n是否为完数的程序片段,请你补全代码:(8分)
Dim n As Long
Dim sum As Long 'sum用来记录n的因子和
n = InputBox("n=")
For i = 1 To n - 1 '求n的因子和sum
If n Mod i = 0 Then sum = sum+i
Next i
If sum=n Then
Print n & "是完数"
Else
Print n & "不是完数"
End If
10、分析解决问题
VB语言中绘制圆的方法是:Circle(x,y),r
格式说明:其中(x,y)为圆心坐标,r为圆的半径。
下表中算法1是在窗体中绘制以(2000,2000)为圆心,半径依次为100、200……800的8个同心圆。
请补充完成算法2,使其实现与算法1相同的功能。(6分)
| 算法1 | 算法2 |
| Circle(2000,2000),100 Circle(2000,2000),200 Circle(2000,2000),300 Circle(2000,2000),400 Circle(2000,2000),500 Circle(2000,2000),600 Circle(2000,2000),700 Circle(2000,2000),800 | Dim k As Integer For k = 1 To 8 Circle (2000, 2000), k * 100 Next k |
以下是求解一元二次方程ax2+bx+c=0(a≠0)的主要VB程序片段。
请你补全代码:(8分)
a = Val(InputBox("a="))
b = Val(InputBox("b="))
c = Val(InputBox("c="))
d = b ^ 2 - 4 * a * c '求判别式d
If d > 0 Then
X1 = (-b + Sqr(d)) / (2 * a)
X2 = (-b - Sqr(d)) / (2 * a)
Print "x1="; X1
Print "x2="; X2
End If
If d=0 Then
Print "x="; -b / (2 * a)
End If
If d < 0 Then
Print "无实数解"
End If
12、分析完善程序
问题:输入一个正整数n,判断该正整数是否为素数(质数)。
要判断一个数n是否为素数,最简单的方法是:
统计2到n-1之间的所有能整除n的整数个数s,若s大于0,则n不是素数,否则就是素数。
根据以上方法,完善以下程序代码:(8分)
n = Val(InputBox("n="))
s = 0
For i = 2 To n - 1
If n Mod i = 0 Then
s = s + 1 '统计因数个数
End If
Next i
If s <= 0 Then '-----------此处若写s=0也是正确的
Print n & "是素数"
Else
Print n & "不是素数"
End If
13、分析完善程序
2005年10月9日,国家测绘局正式宣布珠穆朗玛峰的高度是8844.43米,并停用之前的数据。
现有一张白纸的厚度大约是0.08毫米,对折一次,厚度变为0.16毫米,再对折一次,厚度变为0.32毫米,……,每对折一次,其百度均变为对折前的两倍。
假设这张纸有足够大,可对折任意次,那么这张纸至少对折多少次后,其厚度将超过珠穆朗玛峰的高度。
以下是求解该问题的程序片段,请你补全代码:(8分)
Dim height As Double
Dim h As Double
Dim cnt As Long
height = 8844430
h = 0.08
cnt = 0
Do While h < height
cnt = cnt + 1
h = h + h
Loop
Print cnt
14、分析解决问题
在VB语言中常用的字符串截取函数有:(6分)
| 函数名 | 功能 | 示例 | 结果 |
| Mid(s,m,n) | 从字符串s的第m位开始截取长度为n的子串 | Mid("ABCDEFG", 5, 2) | "EF" |
| Left(s,n) | 截取字符串s左边n个字符 | Left("ABCDEFG", 3) | "ABC" |
| Right(s,n) | 截取字符串s右边n个字符 | Right("ABCDEFG", 2) | "FG" |
下列四个表达式中不能实现的一个 D (填A/B/C/D)。
A. Mid(s, 7, 8)
B. Right(Left(s, 14), 8)
C. Mid(s, 7, 4) + Mid(s, 11, 2) + Mid(s, 13, 2)
D. Left(s, 14) - Left(s, 6)
15、分析解答问题 (6分)
下图所示的算法流程图:
执行情况如下:
当输入a、b的值分别为3、8时,输出结果为5
当输入a、b的值分别为11、7时,输出结果为4
问题一:下列流程图填入虚线框中,符合条件的是( C )(填:A/B/C)
问题二:依据问题一所选流程图,当输入a、b的值分别为9、6时,输出结果 为__________3________。
