第二部分 浙江省VB二级试题解
A.程序调试题 一、选择结构
程序调试01
Option Explicit
Public Sub getanswer()
'该过程是用于计算一元二次方程的根,并将结果输出来。 Dim dalt!, a#, b#, c#
a = InputBox(\输入系数a\ b = InputBox(\输入系数b\ c = InputBox(\输入系数c\dalt = b * b - 4 * a * c if ----1---- then dalt = Sqr(dalt)
MsgBox Format((-b + dalt) / 2 / a), \a, \
elseif ---2---- then
MsgBox Format(-b / 2 / a, \ Else
dalt= ---3----
MsgBox Format(-b / 2 / a, \+ Format(-b / 2 / a, \ End If End Sub
二、单重循环
程序调试02
Option Explicit ‘这条语句要求在该模块中,使用变量前必须先声明。 Public Sub Uppersen()
'该过程是将一个英文句子的每个单词的首字母都变成大写。 '从键盘上任意输入一条英文句子,
'将句子中的每个单词的首字母都变成大写 '例如:输入I am a good student. '要求输出I Am A Good Student.
Dim oldsen As String, newsen As String Dim char As String, lastchar As String Dim k As Integer, i As Integer
oldsen = InputBox(\请输入英文句子:\ k = -------1--------
'以空格作为单词的界定,空格后的字母转换为大写字母 lastchar = ---------2-------- For i = 1 To k
28
char = ------3-------- If lastchar = \ char = UCase(char) End If
newsen = newsen & char lastchar = char Next i
Form1.Print \ Form1.Print \End Sub
程序调试03
Public Sub JiSuan()
'该过程用于计算1-(1/2)+(1/3)-...+(1/99)-(1/100)的值并打印出来。 Dim i As Integer
'****** 错误1 ******* Dim k As Integer Dim s As Single s = 0
'******* 错误2 ******* For i = 1 To 100 k = 1 / i s = s + k
'******* 错误3 ******* k = 1 / i + 1 s = s + k Next i
Form1.Print \End Sub
程序调试04
Option Explicit Public Sub same()
'该过程找出1--1000之间所有的同构数
'所谓同构数是指一个数出现在它的平方数的右端 '如25在25平方625的右端,则25为同构数 '利用数字转字符再取出右端字符的方法进行判断 Dim i As Long
Dim x1 As String, x2 As String For i = 1 To 1000
x1 = -------1-------- '将i转字符型 x2 = -------2-------- '将i^2转字符型 If ------3------ Then
Form1.Print i; \是同构数\ End If Next i
29
End Sub
程序调试05
Public Sub ArmstrongNumber()
'该过程是用于求出1--999之间所有的Armstrong数,并输出。
'所谓Armstrong数是指一个数等于它每位上数字的立方和。例如:371=3^3+7^3+1^3,那么371就是一个Armstrong数。
Dim armstrong As Integer Dim i As Integer
Dim hundred As Integer '百位上的数字 Dim ten As Integer '十位上的数字 Dim one As Integer '个位上的数字 For i = 1 To 999
hundred = ----1----
ten = Int((i Mod 100) \\ 10) one = ----2---- If ----3---- Then
Form1.Print i; \ End If Next i End Sub
程序调试06
Public Sub sum()
'该过程是用于计算并输出f=1-1/(2*3)+1/(3*4)-1/(4*5)+??+1/(19*20)。 Dim f As Single Dim i As Integer Dim sign As Integer -----1------ f = 1
-----2------
f = f + sign / (i * (i + 1)) ------3------- Next i
Form1.Print \End Sub
程序调试07
Option Explicit Public Sub eat()
'该过程是用于计算猴子共摘了多少个桃子。
'(小猴在一天摘了若干个桃子,当天吃掉了一半多一个; '第二天吃了剩下的一半多一个;
'以后每天都吃尚存的一半零一个,到第7天早上要吃时只剩下一个了), '并将结果输出来。 Dim n%, i%, x%
30
x = 1
for i=6 to ---1---- step ----2---- -----3---- Next i
Form1.Print \共有\个桃子\End Sub
程序调试08
Public Sub Fabonia()
'该过程是对以下数列进行运算:
'有一个数列,它的前三个数是0,1,2,
'从第四个数起,每个数都是它前面的两个数之和 '求出该数列的第17个数是多少
'求出该数列的第几个数起每个数都超过1E+8 Dim last_one As Long Dim last_two As Long Dim this_one As Long Dim i As Integer
last_one = 1 '数列的第二个数 last_two = 2 '数列的第三个数
i = 4 '从数列的第四个数求起 Do
this_one = last_one + last_two last_one = ------1------- last_two = ------2------- If i = 17 Then
Form1.Print \ End If
------3-------
Loop While this_one <= 100000000#
Form1.Print \End Sub
程序调试09
Public Sub Findat()
'该过程是用于在一个字符串变量中查找”at”,并用消息框给出查找结果的报告:没有找到或找到的个数。
Dim str1 As String
Dim length As Integer '字符串长度 Dim sum As Integer '查到的个数 Dim i As Integer
str1 = InputBox(\请输入一个字符串\ length = ----1---- i = 1 sum = 0
Do While i < ----2----
31
If ----3---- = \ sum = sum + 1 End If i = i + 1 Loop
If ----4---- Then
MsgBox \没有找到!\ Else
MsgBox \找到了\个\ End If End Sub
程序调试10
注:此题题目和第41`题相同,但算法不一样。 Option Explicit Public Sub ComDiv()
'该过程是求任意两个正整数的最大公约数
Dim m As Integer, n As Integer '任意两个正整数 Dim i As Integer
Dim div As Integer '最大公约数
'输入两个正整数,要求m与n都必须大于零 Do
m = Val(InputBox(\ n = Val(InputBox(\ Loop While ----1----
'先将两个整数中的较小数假设为最大公约数,再依次往下 '寻找能同时除尽m和n的数即为最大公约数 -----2----- If n < m Then div = n End If
Do While m Mod div <> 0 Or n Mod div <> 0 ----3----- Loop
Form1.Print m; \和\的最大公约数是:\End Sub
程序调试11
Public Sub Wrap()
'该过程用于判断一个字符串是否“回文”。
'所谓“回文”是指字符串顺读与倒读都是一样的,如“潮起潮落,落潮起潮”。 Dim length As Integer Dim str1 As String Dim strleft As String Dim strright As String Dim k As Integer
32