VB调试题解答07317.docx

上传人:b****6 文档编号:6881723 上传时间:2023-01-12 格式:DOCX 页数:51 大小:34.87KB
下载 相关 举报
VB调试题解答07317.docx_第1页
第1页 / 共51页
VB调试题解答07317.docx_第2页
第2页 / 共51页
VB调试题解答07317.docx_第3页
第3页 / 共51页
VB调试题解答07317.docx_第4页
第4页 / 共51页
VB调试题解答07317.docx_第5页
第5页 / 共51页
点击查看更多>>
下载资源
资源描述

VB调试题解答07317.docx

《VB调试题解答07317.docx》由会员分享,可在线阅读,更多相关《VB调试题解答07317.docx(51页珍藏版)》请在冰豆网上搜索。

VB调试题解答07317.docx

VB调试题解答07317

第四部分:

上机程序调试题(改错或填空)

(一)说明

等级考试上机测试的程序调试题常常是在考生目录中给出一个标准模块程序Modify.BAS,要求根据题意修改该模块中的函数或过程,为检测所作修改是否正确,可以按照以下操作步骤进行调试:

1.要求学生建立一工程,将这一模块添加到工程中。

如果你是通过双击标准模块程序Modify.BAS进入VisualBasic程序设计系统的,则首先需要添加一个窗体模块。

2.将该标准模块程序Modify.BAS代码中用---n---(n为1,2,3,4,5)部分删除后改为合适的内容或将用****错误n****标示的下一语句中的错误改正,并在窗体模块中编写代码(常常写在窗体的Click()事件中)调用标准模块中的sub过程或自定义函数(如果在标准模块程序中有多个过程或函数,要注意调用的先后顺序,否则得不到正确结果),调试运行程序,使其能输出正确结果。

3.按试题要求保存工程。

(二)程序调试题

[题1]Modify.bas模块中的Transfer过程用于将一个十六进制整数转换为十进制整数;number函数过程用于将一个十六进制符号转换为数值。

PublicSubTransfer()

DimHexAsString'十六进制数

DimDecAsDouble'十进制数

DimtempAsString

DimiAsInteger

DimnAsInteger

Hex=InputBox("输入一个十六进制整数")

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

n=Val(Hex)

‘n=len(Hex)

i=0

Do

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

temp=Mid(Hex,i,1)

‘temp=Mid(Hex,n-i,1)

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

Dec=Dec+number*16^i

Dec=Dec+number(temp)*16^i

i=i+1

LoopWhilei

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

Form1.Printstr(Hex)&"转换为十进制数为"&str(Dec)

‘Form1.printHex&“转换为十进制数为”&str(Dec)

EndSub

PublicFunctionnumber(strAsString)AsInteger

SelectCasestr

Case"a","A"

number=10

Case"b","B"

number=11

Case"c","C"

number=12

Case"d","D"

number=13

Case"e","E"

number=14

Case"f","F"

number=15

CaseElse

number=Val(str)

EndSelect

EndFunction

[题2]Modify.bas模块中的BubbleSort过程是冒泡排序法;GenerateData过程产生个[1,20]之间互不相同的随机整数;Swap过程交换两个变量的数值。

PrivateConstn=10

Privatea(1Ton)AsInteger

'BubbleSort过程是冒泡排序

'Swap过程交换两个变量数值

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

PublicSubBubbleSort()

DimiAsInteger,jAsInteger

i=1

Do

Forj=i+1Ton

Ifa(j)>a(i)Then

'*******1*********

Swap(a(j),a(i))

‘.Swapa(j),a(i)

EndIf

Nextj

i=i+1

'*******2*******

LoopWhilei=n

‘Loopwhilei

Form1.Print"排序结果"

Fori=1Ton

Form1.Printa(i);

Nexti

EndSub

PublicSubGenerateData()

DimiAsInteger

DimjAsInteger

DimbAsBoolean

Fori=1Ton

b=False

DoWhileNotb

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

b=True

'******3******

Forj=1Toi

‘forj=1toi-1

Ifa(i)=a(j)Then

b=False

ExitFor

EndIf

Nextj

Loop

Form1.Printa(i)

Nexti

EndSub

'********4********

PublicSubSwap(ByValaAsInteger,ByValbAsInteger)

‘PublicSubSwap(aasinteger,basinteger)

DimtempAsInteger

temp=a

a=b

b=temp

EndSub

[题3]Modify.bas模块中的wrap过程用于判断一个字符串是否“回文”。

所谓“回文”是指字符串顺读与倒读都是一样的,如“潮起潮落,落潮起潮”。

PublicSubWrap()

DimlengthAsInteger

Dimstr1AsString

DimstrleftAsString

DimstrrightAsString

DimkAsInteger

str1=InputBox("请输入任意的字符串")'输入任意字符串

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

length=Val(str1)

‘length=len(str1)

k=1

Do

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

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

‘strleft=mid(str1,k,1)

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

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

‘strright=mid(str1,length-k+1,1)

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

Ifstrleft=strrightThen

‘Ifstrleft<>strrightThen

ExitDo

EndIf

k=k+1

LoopWhilek<=length/2

Ifk>length/2Then

Form1.Printstr1&"是回文"

Else

Form1.Printstr1&"不是回文"

EndIf

EndSub

[题4]Modify.bas模块中的MaxLine过程用于查找一个5行4列的二维数组中行平均值最大的行,并将该行所有数据调整到第一行的位置。

Modify.bas模块中的DataProduce过程用于产生原始数据;Average过程用于计算各行的平均值;PrintArraay过程用于打印二维数组和行平均值。

Dima(1To5,1To4)AsInteger

Dimave(1To5)AsInteger

PublicSubMaxLine()

DimiAsInteger

DimjAsInteger

DimtempAsInteger

DimLine_noAsInteger'最大平均值的行号

'找出最大平均值所在行

Line_no=1

Fori=2To5

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

Ifave(Line_no)>=ave(i)Then

‘Ifave(Line_no)

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

Line_no=ave(i)

‘Line_no=i

EndIf

Nexti

'交换第一行与最大平均值所在行

Forj=1To4

temp=a(1,j)

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

a(Line_no,j)=a(1,j)

‘a(1,j)=a(Line_no,j)

a(Line_no,j)=temp

Nextj

'交换对应行的平均值

temp=ave

(1)

ave

(1)=ave(Line_no)

ave(Line_no)=temp

'打印交换后的数据

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

PrintArray

EndSub

PublicSubDataProduce()

DimiAsInteger

DimjAsInteger

'产生5*4数组

Fori=1To5

Forj=1To4

a(i,j)=Int(100*Rnd)

Nextj

Nexti

EndSub

PublicSubAverage()

DimiAsInteger

DimjAsInteger

DimsumAsInteger

'计算各行平均值

Fori=1To5

sum=0

Forj=1To4

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

sum=a(i,j)

‘sum=sum+a(i,j)

Nextj

ave(i)=sum/4

Nexti

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

Form1.Print"原始数据和平均值"

PrintArray

EndSub

PublicSubPrintArray()

DimiAsInteger

DimjAsInteger

Fori=1To5

Forj=1To4

Form1.Printa(i,j);Spc(3);

Nextj

Form1.Print"平均值=";ave(i)

Nexti

EndSub

[题5]Modify.bas模块中的TJ过程是将一批数据中小于零的数及它们的积打印出来,但不完整,请在横线上填入必要的内容,使其完整。

Modify.bas模块中的SCSJ过程是产生数据,数据的取值范围为-10~10之间的随机数。

PrivateConstn=10

Privatea(1Ton)AsInteger

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

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

PublicSubTJ()

DimiAsInteger

DimtAsSingle

--------1--------t=1

Fori=1To10

If--------2--------a(i)<0Then

t=t*a(i)

EndIf

Nexti

Form1.Print"T=";t

EndSub

PublicSubSCSJ()

Randomize

Form1.Print"原始数据"

DimiAsInteger

DimjAsInteger

Fori=1Ton

'随机产生0或1,为0时取负,为1时取正

j=Int(Rnd*2)

If------3-----j=0ThenJ=-1

a(i)=j*Int(Rnd*(n+1))

Form1.Printa(i);

Nexti

Form1.Print

EndSub

 

[题6]Modify.bas模块中的calculate过程是产生100个[0,99]范围内的随机整数,统计个位上的数字分别为1,2,3,4,5,6,7,8,9,0的数的个数并打印出来.

Publicsubcalculate()

Dima(1to100)asinteger

Dimx(1to10)asinteger

DimIasinteger,pasinteger

‘产生100个[0,99]范围内的随机整数

‘每行10个打印出来

forI=1to100

‘**********1**********

a(i)=rnd*100

‘a(i)=int(Rnd*100)

ifa(i)<10then

form1.printspace

(2);a(i)

else

form1.printspace

(1);a(i);

endif

ifImod10=0thenform1.print

nextI

‘统计个位上的数字分别为1,2,3,4,5,6,7,8,9,0的数的个数

‘并将统计结果保存在数组x

(1),x

(2),……,x(10)中,将统计结果打印出来

forI=1to100

‘**********2**********

p=int(a(i)/10)‘求个位上的数字

p=a(i)mod10

ifp=0thenp=10

‘**********3**********

x(p)=x(p)-1

x(p)=x(p)+1

nextI

form1.print“统计结果”

forI=1to10

p=I

ifI=10thenp=0

‘**********4**********

form1.print“个位数为”+str(p)+”共 “+str(x(p))+”个”

Form1.print“个位数为”+str(p)+”共”+str(x(i))

nextI

endsub

[题7]Modify.bas模块中的PrintArray过程是用于打印一个5行5列的数字方阵,并使两对角线上元素均为1,其余均为2。

要求打印的数字方阵两列数字之间空3格,两行之间空一行。

PublicSubPrintArray()

'下面程序用于打印5行5列的数字方阵

'使两对角线上元素均为1,其余均为2

'要求打印的数字方阵两列数字之间空3格,两行之间空一行

'只要修改标出出错位置的下面那一条语句

Dima(5,5)AsInteger

DimiAsInteger,jAsInteger

Fori=1To5

Forj=1To5

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

Ifi<>jOri<>6-jThen

Ifi<>jandi<>6-jthen

a(i,j)=2

Else

a(i,j)=1

EndIf

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

Form1.Printa(i,j)+Space(3);

Form1.printa(I,j);space(3);

Nextj

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

Form1.Print

form1.print:

form1.print

Nexti

EndSub

[题8]Modify.bas模块中的Guess过程是猜数游戏,由计算机产生一个[1,100]的任意整数,输入猜数后计算机给出提示,如果5次后还没有猜中就结束游戏并公布正确答案,请改正其中的错误。

说明:

只要修改标出出错位置的下面那条语句。

PublicSubGuess()

DimRAsInterger

DimXAsInteger

DimtimeAsInteger

Randomize

----1----

R=Rnd*100'产生一个1—100的任意整数

R=int(rnd*100)+1

Times=1

Do

X=Val(InputBox("输入猜数X")

SelectCaseX

CaseR

Form1.Print"猜中了"

ExitDo

----2----

CaseX>R

CaseIs>R

Form1.Print"太大了,继续猜!

"

CaseElse

Form1.Print"太小了,继续猜!

"

EndSelect

Times=times+1

----3----

LoopWhiletimes>5

Loopuntiltimes>5

Iftimes>5Then

Form1.Print"猜数失败,游戏结束!

"

----4----

Form1.Print"正确答案为"&Str(x)

Form1.print“正确答案为”&str(r)

EndIf

EndSub

[题9]Modify.bas模块中的Findat过程是用于在一个字符串变量中查找”at”,并用消息框给出查找结果的报告:

没有找到或找到的个数。

PublicSubFindat()

'在字符串str1中查找"at"

Dimstr1AsString

DimlengthAsInteger'字符串长度

DimsumAsInteger'查到的个数

DimiAsInteger

str1=InputBox("请输入一个字符串")

length=----1----Len(str1)

i=1

sum=0

DoWhilei<=----2----length-1

If----3----mid(str1,I,2)="at"Then

sum=sum+1

EndIf

i=i+1

Loop

If----4----sum=0Then

MsgBox"没有找到!

"

Else

MsgBox"找到了"&Str(sum)&"个"

EndIf

EndSub

[题10]本程序从键盘上输入一个任意的字符串,将该字符串的所有组成字符拆分开,再按照字符ASCII码从小到大的顺序将这些字符重新组成新的字符串。

例如输入a4fkze5,重新组合的字符串为45aefkz。

请在横线上填入出境必要的内容。

OptionExplicit

PublicSubsortchar()

DimxAsString'原始字符串

DimyAsString'重新组合的字符串

Dimc()AsString'拆分出的字符

DimlasInteger'字符串长度

DimIasInteger,jAsInteger

DimtempAsString

X=InputBox("输入一个字符串")

L=------1------len(x)

ReDimc

(1)AsString

'字符串拆分

ForI=1tol

C(i)=------2------mid(x,i,1)

NextI

'字符排序

ForI=1tol-1

Forj=------3------i+1tol

Ifc(i)>c(j)Then

Temp=c(i)

C(i)=c(j)

C(j)=temp

EndIf

Nextj

NextI

'排序后的字符组成新字符串

y=""

ForI=1tol

------4------y=y&c(i)

NextI

Form1.Print"原始字符串";x

Form1.Print"重新组合的字符串";y

EndSub

 

[题11]sum过程用于计算f=1-1/(2*3)+1/(3*4)-1/(4*5)+……+1/(19*20),请在横线上填入必要的内容。

OptionExplicit

PublicSubsum()

DimfAsSingle

DimiAsInteger

DimsignAsInteger

'------1------sign=-1

f=1

'------2------forI=2to19

f=f+sign/(i*(i+1))

'------3------sign=-sign

Nexti

Form1.Print"f=";f

EndSub

 

[题12]有一个数列,它的前三个数是0,1,2,从第四个数起,每个数都是它前面的两个数之和(斐邦纳契数列),过程Fabonia用于求出该数列的第17个数是多少?

求出该数列的第几个数起每个数都超过1E+8?

请在横线上填入必要的内容。

OptionExplicit

PublicSubFabonia()

Dimlast_oneAsLong

Dimlast_twoAsLong

Dimthis_oneAsLong

DimiAsInteger

last_one=1'数列的第二个数

last_two=2'数列的第三个数

i=4'从数列的第四个数求起

Do

this_one=last_one+last_two

'------1------last_one=last_two

'------2------last_two=this_one

Ifi=17Then

Form1.Print"No:

17=";this_one

EndIf

'------3------i=i+1

LoopWhilethis_one<=100000000#

Form1.Print"No:

";'------4------i-1;is>1E+8

EndSub

 

[题13]以下程序完成下列功能:

随机产生9个[1-100]的整数数组,并按从小到大的顺序进行排序,从键盘输入一个正数,找到该数在原来9个数中的插入点,使得该数插入数组后,数组的10个数依然是从小到大的顺序。

请在横线上填入必要的内容。

OptionExplicit

PublicSubInsert()

Dimx(10)AsInteger

DimiAsInteger,jAsInteger

DimtempAsInteger

DiminsAsInteger,posAsInteger

'随机产生9个1--100的整数并排序

Randomize

Fori=1To9

'------1------x(i)=int(

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1