VB上机调试题及答案

更新时间:2024-06-20 23:20:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第二部分 浙江省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

str1 = InputBox(\请输入任意的字符串\输入任意字符串 '****错误1***** length = Val(str1) k = 1 Do

'****错误2*****

strleft = Left(str1, k) '从左边起逐个取出一个字符 '****错误3*****

strright = Right(str1, k) '从右边起逐个取出一个字符 '****错误4****

If strleft = strright Then Exit Do End If k = k + 1

Loop While k <= length / 2 If k > length / 2 Then

Form1.Print str1 & \是回文\ Else

Form1.Print str1 & \不是回文\ End If End Sub

程序调试12

Option Explicit Public Sub DToB()

'该过程是将一个十进制正整数转换成为一个二进制数。

'采用连除2取余数的方法,将一个十进制数转换为二进制数。 Dim Dec As Integer Dim Bin As String Dim res As Integer Dim i As Integer

Dec = Val(InputBox(\输入一个十进制数 Form1.Print \十进制数:\ Do

res = -----1------ '求出除以2的余数 Bin = Trim(Str(res)) & -----2------ Dec = -----3------ Loop While ----4------

Form1.Print \转换为二进制数为:\End Sub

程序调试13

Public Sub Guess()

'该过程是猜数游戏,由计算机产生一个[1,100]的任意整数,

'输入猜数后计算机给出提示,如果5次后还没有猜中就结束游戏并公布正确答案。 Dim R As Integer

33

Dim X As Integer Dim times As Integer Randomize

R = Int(Rnd * 100) + 1 '产生一个在区间[1,100] 的任意整数 times = 1 Do

X = Val(InputBox(\输入猜数X\ Select Case X Case R

Form1.Print \猜中了\ Exit Do

'***** 错误1 ****** Case Is < R

Form1.Print \太大了,继续猜!\ Case Else

Form1.Print \太小了,继续猜!\ End Select

times = times + 1 '****** 错误2 ****** Loop While times > 5 If times > 5 Then

Form1.Print \猜数失败,游戏结束!\ '****** 错误3 ******

Form1.Print \正确答案为\ End If End Sub

程序调试14

Option Explicit

Public Sub summary()

'该过程是用于计算s=1+2+2^2+2^3+??,直至s超过1E+16 Dim s As Single Dim i As Integer ------1------ i = 1

------2------ s = s + 2 ^ i ------3------ Loop

Form1.Print \End Sub

程序调试15

Option Explicit Public Sub find()

'该过程是用于找出被3、5、7除,余数为1的最小的5个整数,并将结果输出来。

34

Dim countN%, n% countN = 0 n = 1 Do

n=----1----

if -----2---- then Form1.Print n

countN = countN + 1 End If

Loop ----3----- End Sub

程序调试16

Option Explicit Public Sub e()

'该过程是用于计算e的值并将结果输出,要求精确到0.000000000000001, 'e的计算公式为:e=1+1/1!+1/2!+?+1/n!。 Dim n, term, t

n = 0: term = 1: t = 1 Do

n = n + 1 t= ---1---

term= ---2-----

Loop While t > 0.000000000000001 form1.print \End Sub

程序调试17

Option Explicit Public Sub qiuN()

'该过程是用于求出满足不等式1+2x+3x^2+4x^3+?+(n+1)x^n<1000的最大n值, '其中x是大于等于1的实数,其值由键盘输入。

Dim x As Single, s As Single, n As Integer, s1 As Single, p As Single x = Val(InputBox(\ s = 1: n = 1 p = x

while ----1---- s1 = s

s = s + (n + 1) * p p=p* ----2---- n= ----3---- Wend

n= ----4-----

form1.Print \End Sub

35

三、多重循环

程序调试18

Public Sub prt()

'该过程是输出由数字组成的如下所示金字塔图案 ' 9 ' 888 ' 77777 ' 6666666 ' 555555555 ' 44444444444 ' 3333333333333 ' 222222222222222 ' 11111111111111111

Dim i As Integer, j As Integer '******** 错误1 ******** For i = 9 To 1

Form1.Print Space(i); For j = 1 To 19 - 2 * i '*********错误2 ******** Form1.Print i Next j

Form1.Print Next i

'*********错误3 ******** End Function

程序调试19

Option Explicit

Public Sub pyramid()

'该过程用于打印数字金字塔 ' 1 ' 222 ' 33333 ' 4444444 ' 555555555 ' 6666666 ' 77777 ' 888 ' 9 Dim i As Integer Dim j As Integer

Dim start As Integer '每行起始空格数 Dim num As Integer '每行数字个数 For i = 1 To 9

If i <= ---1---- Then

36

start = 20 - i num = 2 * i - 1 Else

start = 10 + i num = 19 - 2 * i End If

For j = 1 To ---2----

Form1.Print Tab(start+j);---3---- Next j

Form1.Print Next i End Sub

程序调试20

Public Sub prime()

'该过程是输出100到200之间所有的素数,并统计素数的个数 Dim i As Integer Dim j As Integer Dim k As Integer

Dim t As Integer '统计素数的个数 Dim b As Boolean For i = 100 To 200 b = True

k= ------ 1 ------- j = Int(Sqr(i))

Do While k <= j And b If i Mod k = 0 Then ------ 2 ------ End If

------ 3 ------ Loop

if ------ 4 ------- then t = t + 1 Form1.Print i End If Next i

Form1.Print \End Sub

四、一维数组

程序调试21

Option Explicit

Public Sub aboveave()

' 该过程是产生30个1--100之间的随机整数 ' 计算这30个数的平均值

37

' 找出30个数中数值大于平均值的数据,并统计出这些数据的个数 Dim x(30) As Integer

Dim sum As Integer, ave As Integer '平均值取整数 Dim i As Integer

Dim count As Integer '在平均值之上的数据个数 Randomize

For i = 1 To 30

x(i) = Int(Rnd * 100) + 1 Next i sum = 0

For i = 1 To 30

sum = ---------1--------- Next i

ave = --------2---------

'5个一行打印出原始数据,打印平均值 For i = 1 To 30

Form1.Print x(i); Space(2); If i Mod 5 = 0 Then Form1.Print Next i

Form1.Print \平均值:\

'找出并5个一行打印在平均值之上的数据,打印统计的个数 Form1.Print \在平均值之上的数据是:\ For i = 1 To 30

If x(i) > ave Then

---------3---------

Form1.Print x(i); Space(2);

If ------4-------- Then Form1.Print End If Next i

Form1.Print

Form1.Print \共有\个在平均值之上.\End Sub

程序调试22

Option Explicit Public Sub Del()

'该过程从一个含有10个数组元素的数组中删除一个指定的数据,若该数据不存在,则给出提示。 '先产生10个[1,100]的随机整数

'从键盘上输入一个数,将该数从数组中删除 Randomize

Dim x As Integer Dim a() As Integer

Dim i As Integer, pos As Integer ReDim a(10) As Integer For i = 1 To 10

a(i) = Int(Rnd * 100) + 1

38

Next i

Form1.Print \原始数据:\ For i = 1 To 10

Form1.Print a(i); \ Next i

Form1.Print

x = Val(InputBox(\输入删除的数x=\ pos = 0

For i = 1 To 10

If x = a(i) Then ------1----- Exit For End If Next i

If pos <> 0 Then

For i = -----2------ To 9 -------3------- Next i

ReDim Preserve a(9) '保留原数组中的9个数 Form1.Print \删除后数据:\ For i = 1 To 9

Form1.Print a(i); \ Next i

Form1.Print Else

MsgBox \数组中未找到\删除不成功\ End If End Sub

程序调试23

Option Explicit

Public Sub countEven()

'该过程是用于统计在随机产生的10个两位整数中的偶数的个数并用消息框输出。 Dim a(10) As Integer '存放10个随机数第一个为a(0) Dim count As Integer

Dim I As Integer, n As Integer Randomize

'******错误1****** For I = 1 To 10 '*****错误2***** n = Int(Rnd * 90) a(I) = n

Form1.Print a(I)

If a(I) Mod 2 = 0 Then count = count + 1 End If

39

Next I

'*****错误3*****

msgbox(\偶数个数:\End Sub

程序调试24

Option Explicit

Public Sub sortchar()

'该过程是对字符串进行整理,

'首先从键盘上输入一个任意的字符串,将该字符串的所有组成字符拆分开, '再按照字符ASCII码从小到大的顺序将这些字符重新组成新的字符串。 '例如输入a4fkze5,重新组合的字符串为45aefkz。 Dim x As String '原始字符串

Dim y As String '重新组合的字符串 Dim c() As String '拆分出的字符 Dim k As Integer '字符串长度 Dim i As Integer, j As Integer Dim temp As String

x = InputBox(\输入一个字符串\ k = ------1------- ReDim c(k) As String '字符串拆分 For i = 1 To k

c(i) = ------2------- Next i '字符排序

For i = 1 To k - 1

For j = -------3------- If c(i) > c(j) Then temp = c(i) c(i) = c(j) c(j) = temp End If Next j Next i

'排序后的字符组成新字符串 y = \

For i = 1 To k y = y & c(i) Next i

Form1.Print \原始字符串\

Form1.Print \重新组合的字符串\End Sub

程序调试25

Option Explicit

40

Public Sub compositor()

'该过程是用于产生20个不大于1000的自然数,

'并使用选择分类法按从大到小的顺序输出,相同数不输出。 Const n = 20

Dim a(n), i, p, j, t For i = 1 To n a(i) = ----1---- Next i

For i = 1 To n - 1 p = i

For j = i To n

If a(p) < a(j) Then ----2---- Next j

If ----3---- Then t = a(i): a(i) = a(p): a(p) = t Next i

Form1.Print a(1) For i = 2 To n

If a(i) <> a(i - 1) Then Form1.Print ----4---- Next i

Form1.Print End Sub

程序调试26

Option Explicit Public Sub prt()

'该过程是输出由数字组成的如下所示杨辉三角形图案 ' 1 ' 1 1 ' 1 2 1 ' 1 3 3 1 ' 1 4 6 4 1 ' 1 5 10 10 5 1 ' 1 6 15 20 15 6 1 Const n = 8

Dim a(n + 1) As Byte, i As Integer, j As Integer Dim s As String '给数组a赋初值 For i = 1 To n + 1 a(i) = 0 Next i

'计算并打印第一个数 a(1) = 1

Form1.Print Space(2 * n + 2); '计算数字前的空格数 Form1.Print a(1)

'计算其余行的数并打印 For i = 2 To ----1----

41

a(i) = a(i - 1)

For j = ----2---- To 2 Step -1 ----3---- Next j

Form1.Print Space((n - i + 1) * 2); For j = 1 To i

s = Trim(Str(----4----))

Form1.Print Space(Int((4 - Len(s)) / 2 + 0.5)) + s + Space(Int((4 - Len(s)) / 2 + 0.5));

Next j

Form1.Print Next i End Sub

五、多维数组

程序调试27

Public Sub Transpose()

'该过程用于产生一个6×6的转置矩阵,将二维数组中所有行和对应列的元素进行交换。 Dim a(1 To 6, 1 To 6) As Integer Dim i As Integer, j As Integer Form1.Print \原始数据\ For i = 1 To 6 For j = 1 To 6

a(i, j) = Int(Rnd * 10) Form1.Print a(i, j); Next j

Form1.Print Next i

For i = 2 To 6

For j = 1 To ----- 1 ----- ------ 2 ----- Next j Next i

Form1.Print \转置后数据\ For i = 1 To 6 For j = 1 To 6 ----- 3 ----- Next j

Form1.Print Next i End Sub

Public Sub Swap(a As Integer, b As Integer) Dim temp As Integer temp = a a = b

42

b = temp End Sub

程序调试28

Public Sub PrintArray()

'下面程序用于显示5行5列的数字方阵 '使两对角线上元素均为1,其余均为2

'要求显示的数字方阵两列数字之间空3格,两行之间空一行 '只要修改标出出错位置的下面那一条语句 Dim a(5, 5) As Integer

Dim i As Integer, j As Integer For i = 1 To 5 For j = 1 To 5

'******** 错误1 ********* If i <> j Or i <> 6 - j Then a(i, j) = 2 Else

a(i, j) = 1 End If

'******** 错误2 *********

Form1.Print a(i, j) + Space(3); Next j

'******* 错误3 ******* Form1.Print: Form1.Cls Next i End Sub

程序调试029

'PrintArray过程是输出一个右上三角元素(含对角线)为1,其余元素为0 的5×5矩阵 Public Sub PrintArray()

Dim a(1 To 5, 1 To 5) As Integer Dim i As Integer, j As Integer For i = 1 To 5 For j = 1 To 5

If ----- 1 ----- Then ----- 2 ----- End If Next j Next i

For i = 1 To 5 For j = 1 To 5

Form1.Print \ Next j

------ 3 ----- Next i End Sub

43

六、Sub过程

程序调试30

Private Const n = 10

Private a(1 To n) As Integer

'TJ过程是将一批数据中小于零的数及它们的积打印出来

'数据由SCSJ过程产生,数据的取值范围为-10 ~ 10 之间的随机整数数 Public Sub TJ()

Dim i As Integer Dim t As Single

t= -------- 1 -------- For i = 1 To 10

If -------- 2 -------- Then t = t * a(i) End If Next i

Form1.Print \End Sub

Public Sub SCSJ() Randomize

Form1.Print \原始数据\ Dim i As Integer Dim j As Integer For i = 1 To n

'随机产生0或1,为0时取负,为1时取正 j = Int(Rnd * 2)

If ------ 3 ----- Then J = -1 a(i) = j * Int(Rnd * (n + 1)) Form1.Print a(i); Next i

Form1.Print End Sub

程序调试31

Dim a(30) As Integer Public Sub FindMax()

'该过程是用于查找一批数据中的最大数,并输出最大数的值及最大数在数组中的下标值。 Dim Position As Integer '最大数在数组中的下标 Dim max As Integer '最大数 Dim i As Integer GenerateData max = ----1----

Position = ----2---- For i = 2 To 30

If a(i) > max Then

44

max = ----3----

Position = ----4---- End If Next i

Form1.Print \最大值=\

Form1.Print \最大值的下标=\End Sub

Public Sub GenerateData() Dim i As Integer For i = 1 To 30

a(i) = Int(500 * Rnd() + 1) Form1.Print a(i),

If i Mod 5 = 0 Then Form1.Print Next i End Sub

程序调试32

Dim a(1 To 5, 1 To 4) As Integer Dim ave(1 To 5) As Integer Public Sub MaxLine()

'该过程用于查找一个5行4列的二维数组中行平均值最大的行,并将该行所有数据调整到第一行的位置。

Dim i As Integer, j As Integer, temp As Integer Dim Line_no As Integer '最大平均值的行号 '找出最大平均值所在行 Line_no = 1 For i = 2 To 5

'****** 错误1 *******

If ave(Line_no) >= ave(i) Then '****** 错误2 ******* Line_no = ave(i) End If Next i

'交换第一行与最大平均值所在行 For j = 1 To 4 temp = a(1, j)

'****** 错误3 ****** a(Line_no, j) = a(1, j) a(Line_no, j) = temp Next j

'交换对应行的平均值 temp = ave(1)

ave(1) = ave(Line_no) ave(Line_no) = temp '打印交换后的数据

Form1.Print \交换后的数据和平均值\

45

PrintArray End Sub

Public Sub DataProduce()

'该过程用于产生原始数据。 Dim i As Integer Dim j As Integer '产生5*4数组 For i = 1 To 5 For j = 1 To 4

a(i, j) = Int(100 * Rnd) Next j Next i End Sub

Public Sub Average()

'该过程用于计算各行的平均值。 Dim i As Integer Dim j As Integer Dim sum As Integer '计算各行平均值 For i = 1 To 5 sum = 0 For j = 1 To 4

'****** 错误4 ****** sum = a(i, j) Next j

ave(i) = sum / 4 Next i

'将数组和平均值打印出来

Form1.Print \原始数据和平均值\ PrintArray End Sub

Public Sub PrintArray()

'该过程用于打印二维数组和行平均值。 Dim i As Integer Dim j As Integer For i = 1 To 5 For j = 1 To 4

Form1.Print a(i, j); Spc(3); Next j

Form1.Print \平均值=\ Next i End Sub

程序调试33

Public Sub SortData()

'该过程是产生10个[30,50]的随机整数,并按从小到大的顺序打印出来。

46

Dim a(10) As Integer

Dim i As Integer, j As Integer For i = 1 To 10

a(i) = Int(Rnd * 21 + 30) Next i

For i = 1 To 9

-------- 1 --------- If a(i) > a(j) Then

--------- 2 ---------- End If Next j

Form1.Print a(i) Next i

Form1.print --------- 3 -------- End Sub

Public Sub Swap(a As Integer, b As Integer) '该过程是用于交换两个变量的值。 Dim temp As Integer temp = a a = b b = temp End Sub

程序调试34

Private Const n = 10

Private a(1 To n) As Integer 'BubbleSort过程是冒泡排序 'Swap过程交换两个变量数值

'GenerateData过程产生10个[1,20]之间互不相同的随机整数 Public Sub BubbleSort()

Dim i As Integer, j As Integer i = 1 Do

For j = i + 1 To n

If a(j) > a(i) Then

'*******错误1 ********* Swap (a(j), a(i)) End If Next j i = i + 1

'*******错误2 ******* Loop While i = n

Form1.Print \排序结果\ For i = 1 To n

Form1.Print a(i); Next i

47

End Sub

Public Sub GenerateData() Dim i As Integer Dim j As Integer Dim b As Boolean For i = 1 To n b = False

Do While Not b

a(i) = Int(20 * Rnd + 1) b = True

'******错误3 ****** For j = 1 To i

If a(i) = a(j) Then b = False Exit For End If Next j Loop

Form1.Print a(i) Next i End Sub

'********错误4 ********

Public Sub Swap(ByVal a As Integer, ByVal b As Integer) Dim temp As Integer temp = a a = b b = temp End Sub

七、函数过程

程序调试35

Option Explicit Public Sub rn()

'该过程通过调用函数isLeapYear判断某年是否是闰年,若是,则打印\今年是润年\ '否则,打印\今年不是闰年\。 Const year = 2023 If ----1---- Then

Form1.Print \今年是闰年\ Else

Form1.Print \今年不是闰年\ End If End Sub

Function isLeapYear(y As Integer) As Boolean

If ----2---- Or (----3---- And ----4----) Then isLeapYear = False

48

Else

isLeapYear = True End If End Function

程序调试36

Option Explicit Public Sub total()

'该过程是计算s=7+77+777+??+(n个7组成的数),并输出。 Const n = 20 Dim s As Single Dim i As Integer For i = 1 To n

s = s + ------1------- Next i

Form1.Print \End Sub

Public Function number( -----2------ ) As Single '该函数是求出n个7所组成的数。 Dim k As Integer number = 0 For k = 1 To n

--------3--------- Next k End Function

程序调试37

Option Explicit

Public Sub findstr()

'该过程通过调用matchCount函数计算子串s2在母串s1中匹配的次数 Dim s1 As String, s2 As String

s1 = \母串 s2 = \子串 Form1.Print ----1---- End Sub

Function matchCount(str1 As String, str2 As String) As Integer '本函数计算子串str2在母串str1中的匹配次数

Dim num As Integer, i As Integer, pos As Integer num = 0

For i = 1 To ----2---- '从第1个字符开始循环找 pos = ----3----

If pos > 0 Then '找到了指定的字符串 num = num + 1 '次数加1 ----4---- '继续向前找 Else

49

Exit For '没找到,退出 End If Next i

matchCount = num End Function

程序调试38

Public Function nFactor(ByVal n As Integer) As Double '该过程用于计算n!。 Dim i As Integer Dim temp As Double ----1----

For i = 1 To n

temp = temp * i Next i

nFactor = ----2---- End Function

Public Sub summary()

'该过程用于计算1!+2!+...+20!,并打印出计算结果。 Dim sum As Double Dim i As Integer Dim n As Integer n = 20

For i = 1 To n

sum = sum + ----3---- Next i

Form1.Print \End Sub

程序调试39

Option Explicit Public Sub find()

'该过程是用于从1到10000中找出这样的数,

'该数各个位的数字的阶乘相加之和等于该数,并将结果输出。 Dim k, a, n, i Dim p As Integer For k = 1 To 10000 a = LTrim(Str(k)) n = 0

For i= ----1-----

p = Val(Mid(a, i, 1)) n= -----2---- Next i

If n = k Then form1.Print k Next k End Sub

50

Function fact(x As Integer) As Long '该函数用于计算阶乘 Dim y As Long Dim i% y = 1

For i% = 1 To x y = y * i% Next i% ----3---- End Function

程序调试40

Public Sub Transfer()

'该过程用于将一个十六进制整数转换为十进制整数。 Dim Hex As String '十六进制数 Dim Dec As Double '十进制数 Dim temp As String Dim i As Integer Dim n As Integer

Hex = InputBox(\输入一个十六进制整数\ '****** 错误1 ******* n = Val(Hex) i = 0 Do

'****** 错误2 ******* temp = Mid(Hex, i, 1)

Dec = Dec + number(temp) * 16 ^ i i = i + 1 Loop While i < n

'****** 错误3 ******

Form1.Print Hex + \转换为十进制数为\End Sub

Public Function number(str As String) As Integer '该函数过程用于将一个十六进制符号转换为数值。 Select Case str Case \ number = 10 Case \ number = 11 Case \ number = 12 Case \ number = 13 Case \ number = 14 Case \

51

number = 15 Case Else

number = Val(str) End Select End Function

程序调试41

Option Explicit

Public Sub ComMulti()

'该过程是求任意两个正整数的最小公倍数

'求最小公倍数的一种方法是先求出两个数的最大公约数, '两个数的乘积除以最大公约数的商即为最小公倍数 Dim m As Integer, n As Integer '任意两个正整数 Dim i As Integer

Dim multi As Integer '最小公倍数

'输入两个正整数,要求m与n都必须大于零 Do

m = Val(InputBox(\ n = Val(InputBox(\ Loop While -----1------ multi = -------2--------

Form1.Print m; \和\的最小公倍数是:\End Sub

'Div函数过程求任意两个正整数m和n的最大公约数

Public Function Div(m As Integer, n As Integer) As Integer '该函数过程用于求任意两个正整数的最大公约数。 Dim i As Integer

'先将两个整数中的较小数假设为最大公约数,再依次往下 '寻找能同时除尽m和n的数即为最大公约数 ----------3------------ If n < m Then Div = n End If

Do While m Mod Div <> 0 Or n Mod Div <> 0 -----------4---------- Loop End Function

程序调试42

Public Sub Combination()

'该过程是用于计算在m个数据中取出n个数据的排列组合值,计算公式为Cmn=m!/(n!*(m-n)!)。 Dim m As Integer Dim n As Integer Dim Cmn As Long Do

m = Val(InputBox(\请输入一个整数m\

52

n = Val(InputBox(\请输入一个整数n(n<=m)\ Loop While m < n '必须保证输入的两个数m>=n '****** 错误1 ******

Cmn = nFactor(m) / nFactor(n) * nFactor(m - n) Form1.Print \排列组合数为\End Sub

Public Function nFactor(ByVal n As Integer) As Double '该函数过程用于计算n!。 Dim i As Integer Dim temp As Double temp = 1

For i = 1 To n

temp = temp * i Next i

'******错误 2 ****** nFactor(n) = temp '****** 错误3 ****** End Sub 题解01

1:dalt > 0 2: dalt = 0 3:sqr(-dalt) 题解02

1:Len(oldsen)

2:” ” 注意:双引号中间有空格 3:mid(oldsen,I,1) 题解03

错误1:Dim k As Integer 改为:dim k as single

错误2:For i = 1 To 100 改为:for I=1 to 100 step 2 错误3:k = 1 / i + 1 改为:k=-1/(I+1) 题解04

1:trim(str(i)) 2:trim(str(I^2))

3:right(x2,len(x1))=x1 题解05 1:I\\100 2:i mod 10

3:I=hundred^3+ten^3+one^3 题解06 1:sign=-1

2:for I=2 to 19 3:sign=-sign 题解07 1:1 2:-1

3:x=2*(x+1)

53

题解08

1:last_two 2:this_one 3:I=I+1 4:I-1 题解09

1:len(str1) 2:length

3:mid(str1,I,2) 4:sum=0 题解10

1:m<=0 or n<=0 2:div=m

3:div=div -1 题解11

错误1:length = Val(str1) 改为:length = len (trim(str1)) 错误2:strleft = Left(str1, k) 改为:strleft = mid(str1, k,1)

错误3:strright = Right(str1, k) 改为:strright = mid(str1, length+1-k,1) 错误4:If strleft = strright Then 改为:If strleft <> strright Then 题解12

1:Dec mod 2 2:Bin 3:Dec\\2 4:Dec >= 1 题解13

错误1:Case Is < R 改为:Case Is > R

错误2:Loop While times > 5 改为:Loop While times <= 5

错误3:Form1.Print \正确答案为\改为:Form1.Print \正确答案为\题解14 1:s = 1

2:do while s <= 1E + 16 3:I = I + 1 题解15 1:n=n+7

2:(n mod 3=1) and (n mod 5=1) 3:while countN<5 题解16 1:t/n 2:term+t 3:str(term) 题解17 1:s<1000 2:x 3:n+1 4:n-2 题解18

54

错误1:For i = 9 To 1 改为:For i = 9 To 1 step -1 错误2:Form1.Print I 改为:Form1.Print trim(str(i)) 错误3:End Function 改为:End sub 题解19 1:5 2:num

3:trim(str(i)); 题解20 1:2

2:b = false 3:k=k+1 4:b = true 题解21

1:sum + x(i) 2:sum / 30

3:count = count + 1 4:count mod 5 = 0 题解22 1:pos = i 2:pos

3:a(i) = a(I+1) 题解23

错误1:For I = 1 To 10 改为:For I = 0 To 9

错误2:n = Int(Rnd * 90) 改为:n = Int(Rnd * 90) + 10

错误3:msgbox(\偶数个数:\改为:msgbox(\偶数个数:\题解24

1:k = Len(Trim(x)) 2:Mid(x,I,1) 3:I + 1 to k 题解25

1:int(rnd*1000) + 1 2:p = j 3:P <> i 4:a(i) 题解26 1:n + 1 2:I - 1

3:a(j) = a(j-1) + a(j) 4:a(j) 题解27 1:i - 1

2:swap a(I,j) , a(j,I) 3:Print a(I,j); 题解28

错误1:If i <> j Or i <> 6 - j Then 改为:If i <> j and i + j <> 6 Then 错误2:Form1.Print a(i, j) + Space(3); 改为:Form1.Print a(i, j) & Space(3);

55

错误3:Form1.Print: Form1.Cls 改为:Form1.Print: Form1.Print 题解29 1:j >= i 2:a(I,j) = 1 3:Print 题解30 1:1

2:a(i) < 0 3:j = 0

Private Sub Form_Click() Call SCSJ Call TJ End Sub 题解31 1:a(1) 2:1 3:a(i) 4:i 题解32

错误1:If ave(Line_no) >= ave(i) Then 改为:If ave(Line_no) <= ave(i) Then 错误2:Line_no = ave(i) 改为:Line_no = i

错误3:a(Line_no, j) = a(1, j) 改为:a(1, j) = a(Line_no, j) 错误4:sum = a(i, j) 改为:sum = sum + a(i, j)

Private Sub Form_Click() Call DataProduce Call Average Call MaxLine End Sub 题解33

1:for j = I + 1 to 10 2:swap a(i) , a(j) 3:a(10) 题解34

错误1:Swap (a(j), a(i)) 改为:Swap a(j), a(i) 错误2:Loop While i = n 改为:Loop While i < n 错误3:For j = 1 To I 改为:For j = 1 To I - 1

错误4:Public Sub Swap(ByVal a As Integer, ByVal b As Integer) 改为: Public Sub Swap( a As Integer, b As Integer)

Private Sub Form_Click() Call GenerateData Call BubbleSort End Sub 题解35

56

1:isLeapYear(Year) 2:y mod 4 <> 0 3:y mod 400 <> 0 4:y mod 100 = 0 题解36

1:number(i) 2:n as integer

3:number = number + 7*10^(k-1) 题解37

1:matchCount(s1,s2) 2:len(str1)

3:InStr(str1,str2)

4:str1 = Right(str1, Len(str1) - pos - Len(str2) + 1) 或 str1=mid(str1,pos+len(str2)) 题解38

1:temp = 1 2:temp

3:nFactor(i) 4:sum 题解39

1:1 to len(a) 2:n + fact(p) 3:fact = y 题解40

错误1:n = Val(Hex) 改为:n = len(trim(Hex))

错误2:temp = Mid(Hex, i, 1) 改为:temp = Mid(Hex, n - i, 1) 错误3:Form1.Print Hex + \转换为十进制数为\改为:

Form1.Print Hex + \转换为十进制数为\

题解41

1:m < 0 or n < 0 2:m * n \\ div(m , n) 3:div = m

4:div = div - 1 题解42

错误1:Cmn = nFactor(m) / nFactor(n) * nFactor(m - n) 改为: Cmn = nFactor(m) /( nFactor(n) * nFactor(m - n)) 错误2:nFactor(n) = temp 改为:nFactor = temp 错误3:End Sub 改为:End Function

57

本文来源:https://www.bwwdw.com/article/r9j3.html

Top