二程序调试参考答案概要.docx

上传人:b****5 文档编号:7457922 上传时间:2023-05-11 格式:DOCX 页数:22 大小:22.13KB
下载 相关 举报
二程序调试参考答案概要.docx_第1页
第1页 / 共22页
二程序调试参考答案概要.docx_第2页
第2页 / 共22页
二程序调试参考答案概要.docx_第3页
第3页 / 共22页
二程序调试参考答案概要.docx_第4页
第4页 / 共22页
二程序调试参考答案概要.docx_第5页
第5页 / 共22页
二程序调试参考答案概要.docx_第6页
第6页 / 共22页
二程序调试参考答案概要.docx_第7页
第7页 / 共22页
二程序调试参考答案概要.docx_第8页
第8页 / 共22页
二程序调试参考答案概要.docx_第9页
第9页 / 共22页
二程序调试参考答案概要.docx_第10页
第10页 / 共22页
二程序调试参考答案概要.docx_第11页
第11页 / 共22页
二程序调试参考答案概要.docx_第12页
第12页 / 共22页
二程序调试参考答案概要.docx_第13页
第13页 / 共22页
二程序调试参考答案概要.docx_第14页
第14页 / 共22页
二程序调试参考答案概要.docx_第15页
第15页 / 共22页
二程序调试参考答案概要.docx_第16页
第16页 / 共22页
二程序调试参考答案概要.docx_第17页
第17页 / 共22页
二程序调试参考答案概要.docx_第18页
第18页 / 共22页
二程序调试参考答案概要.docx_第19页
第19页 / 共22页
二程序调试参考答案概要.docx_第20页
第20页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

二程序调试参考答案概要.docx

《二程序调试参考答案概要.docx》由会员分享,可在线阅读,更多相关《二程序调试参考答案概要.docx(22页珍藏版)》请在冰点文库上搜索。

二程序调试参考答案概要.docx

二程序调试参考答案概要

(二)程序调试(参考答案)

程序调试题的操作步骤是:

(1)建立一标准EXE工程,将这一模块程序添加到工程中。

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

(2)将该标准模块程序Model1.BAS中代码的指定的错误修改正确或在指定的空位填上适当的语句,并在窗体模块中编写代码(常常写在窗体的Click()事件中)调用标准模块中的Sub过程或用户自定义函数(如果在标准模块程序Model1.BAS有多个过程或函数,要注意调用的先后顺序,否则得不到正确结果),调试运行程序,使其能输出正确结果。

(3)按试题要求保存工程。

如果你的计算机中没有模块程序Model1.BAS,你必需先自己新建一工程,再添加一个默认标准模块,将题目所附的参考程序输入(可复制粘贴),将其中用---n---(n为1,2,3,4,5)部分删除后改为合适的内容或将用****错误n****标示的下一语句中的错误改正,然后调试运行程序使其达到该题目的要求。

1.已有一模块文件Modify.Bas。

该模块中的Summary过程是用于计算1!

+2!

+...+20!

,并打印出计算结果,但不完整,请在横线上填入必要的内容,使其完整。

Modify.Bas模块中的nFactor函数过程用于计算n!

程序如下:

PublicFunctionnFactor(ByValnAsInteger)AsDouble

DimiAsInteger

DimtempAsDouble

temp=1

Fori=1Ton

temp=temp*i

Nexti

nFactor=temp

EndFunction

PublicSubsummary()

DimsumAsDouble

DimiAsInteger

DimnAsInteger

n=20

Fori=1Ton

sum=sum+nFactor(i)

Nexti

Form1.Print"sum="&sum

EndSub

2.已有一模块文件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)=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)mod10)'求个位上的数字

Ifp=0Thenp=10

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

x(p)=x(p)+1

Nexti

Form1.Print"统计结果"

Fori=1To10

p=i

Ifi=10Thenp=0

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

Form1.Print"个位数为"+Str(p)+"共"+Str(x(i))+"个"‘个位数为0统计结果保存在x(10)中

Nexti

EndSub

3.已有一模块文件Modify.Bas。

该模块中的Findat过程是用于在一个字符串变量中查找"at",并用消息框给出查找结果的报告:

没有找到或找到的个数,但不完整,请在横线上填入必要的内容,使其完整。

程序如下:

PublicSubFindat()

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

Dimstr1AsString

DimlengthAsInteger'字符串长度

DimsumAsInteger'查到的个数

DimiAsInteger

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

length=len(str1)

i=1

sum=0

DoWhilei<=length

Ifmid(str1,i,2)="at"Then

sum=sum+1

EndIf

i=i+1

Loop

Ifsum=0Then

MsgBox"没有找到!

"

Else

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

EndIf

EndSub

4.已有一模块文件Modify.Bas。

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

程序如下:

PublicSubGuess()

DimRAsInteger

DimXAsInteger

DimtimesAsInteger

Randomize

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

R=int(Rnd*100+1)'产生一个1--100的任意整数或int(Rnd*100)+1

times=1

Do

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

SelectCaseX

CaseR

Form1.Print"猜中了"

ExitDo

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

CaseIS>R

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

"

CaseElse

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

"

EndSelect

times=times+1

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

LoopWhiletimes<=5

Iftimes>5Then

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

"

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

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

EndIf

EndSub

5.已有一模块文件Modify.Bas。

该模块中的ArmstrongNumber过程是用于求出1--999之间所有的Armstrong数,并打印出来,但不完整,请在横线上填入必要的内容,使其完整。

所谓Armstrong数是指一个数等于它每位上数字的立方和。

例如:

371=3^3+7^3+1^3,那么371就是一个Armstrong数。

程序如下:

PublicSubArmstrongNumber()

DimarmstrongAsInteger

DimiAsInteger

DimhundredAsInteger'百位上的数字

DimtenAsInteger'十位上的数字

DimoneAsInteger'个位上的数字

Fori=1To999

hundred=i\100

ten=(i-hundred*100)\10

one=imod10

Ifi=hundred^3+ten^3+one^3Then

Form1.Printi;"isarmstrongnumber"

EndIf

Nexti

EndSub

6.已有一模块文件Modify.Bas。

该模块中的CountTo60过程是用于从一堆一分、二分、五分的硬币中取出20枚,使其总值为60分,要求输出取法的数量及每一种取法的一分、二分、五分的个数。

程序如下:

PublicSubCountTo60()

'从一堆一分、二分、五分的硬币中取出20枚,使其总值为60分

'输出取法的数量及每一种取法的一分、二分、五分的个数

DimoneAsInteger'一分硬币个数

DimtwoAsInteger'二分硬币个数

DimfiveAsInteger'五分硬币个数

Constn=20'总数20枚

DimkAsInteger'取法数量

k=0

Forone=1Ton

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

Fortwo=1Ton-one

five=n-one-two

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

Ifone+two*2+five*5=60Then

k=k+1

Form1.Print"one=";one;"two=";two;"five=";five

EndIf

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

Nexttwo

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

Nextone

Form1.Print"k=";k

EndSub

7.已有一模块文件Modify.Bas。

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

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

程序如下:

PrivateConstn=10

Privatea(1Ton)AsInteger

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

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

PublicSubTJ()

DimiAsInteger

DimtAsSingle

t=1

Fori=1To10

Ifa(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)

Ifj=0Thenj=-1

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

Form1.Printa(i);

Nexti

Form1.Print

EndSub

8.已有一模块文件Modify.Bas。

该模块中的Money过程是用于统计一个有7个工作人员的餐厅发工资所需的100元、50元、10元、5元和1元的票面数,但不完整,请在横线上填入必要的内容,使其完整。

Modify.Bas模块中的SalaryData过程是给出7个员工的工资。

(工资单位是元)

程序如下:

Dimsalary(7)AsInteger

PublicSubMoney()

DimhundredAsInteger,totalhundredAsInteger'100元票面数量、总数量

DimfiftyAsInteger,totalfiftyAsInteger'50元票面数量、总数量

DimtenAsInteger,totaltenAsInteger'10元票面数量、总数量

DimfiveAsInteger,totalfiveAsInteger'5元票面数量、总数量

DimoneAsInteger,totaloneAsInteger'1元票面数量、总数量

DimtotalsalaryAsInteger'工资总计

DimiAsInteger,tempAsInteger

totalhundred=0

totalfifty=0

totalten=0

totalfive=0

totalone=0

totalsalary=0

Fori=1To7

temp=salary(i)

hundred=Int(temp/100)

temp=temp–hundred*100

fifty=Int(temp/50)

temp=temp-fifty*50

ten=Int(temp/10)

temp=temp-ten*10

five=Int(temp/5)

temp=temp-five*5

one=temp

totalhundred=totalhundred+hundred

totalfifty=totalfifty+fifty

totalten=totalten+ten

totalfive=totalfive+five

totalone=totalone+one

totalsalary=totalsalary+salary(i)

Nexti

Form1.Print"共需100元"&Str(totalhundred)&"张"

Form1.Print"共需50元"&Str(totalfifty)&"张"

Form1.Print"共需10元"&Str(totalten)&"张"

Form1.Print"共需5元"&Str(totalfive)&"张"

Form1.Print"共需1元"&Str(totalone)&"张"

Form1.Print"合计"&Str(totalsalary)&"元"

EndSub

PublicSubSalaryData()

salary

(1)=1398

salary

(2)=1765

salary(3)=689

salary(4)=1500

salary(5)=832

salary(6)=590

salary(7)=1200

EndSub

9.已有一模块文件Modify.Bas。

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

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

程序如下:

Dima(1To5,1To4)AsInteger

Dimave(1To5)AsInteger

PublicSubMaxLine()

DimiAsInteger

DimjAsInteger

DimtempAsInteger

DimLine_noAsInteger'最大平均值的行号

'找出最大平均值所在行

Line_no=1

Fori=2To5

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

Ifave(Line_no)

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

Line_no=i

EndIf

Nexti

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

Forj=1To4

temp=a(1,j)

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

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=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

10.已有一模块文件Modify.Bas。

该模块中的Wrap过程用于判断一个字符串是否“回文”。

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

程序如下:

PublicSubWrap()

DimlengthAsInteger

Dimstr1AsString

DimstrleftAsString

DimstrrightAsString

DimkAsInteger

str1=InputBox("请输入任意的字符串")'输入任意字符串,如“潮起潮落,落潮起潮”

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

length=len(str1)

k=1

Do

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

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

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

strright=mid(str1,length+1–k,1)'从右边起逐个取出一个字符

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

Ifstrleft<>strrightThen

ExitDo

EndIf

k=k+1

LoopWhilek<=length/2

Ifk>length/2Then

Form1.Printstr1&"是回文"

Else

Form1.Printstr1&"不是回文"

EndIf

EndSub

11.已有一模块文件Modify.Bas。

该模块中的BubbleSort过程是冒泡排序法;GenerateData过程产生10个[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*********

Swapa(j),a(i)‘去掉括号,或改为callSwap(a(j),a(i))

EndIf

Nextj

i=i+1

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

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–1

Ifa(i)=a(j)Then

b=False

ExitFor

EndIf

Nextj

Loop

Form1.Printa(i)

Nexti

EndSub

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

PublicSubSwap(aAsInteger,bAsInteger)‘去掉ByVal,数组不能以ByVal传递

DimtempAsInteger

temp=a

a=b

b=temp

EndSub

12.已有一模块文件Modify.Bas。

该模块中的Transfer过程用于将一个十六进制整数转换为十进制整数;number函数过程用于将一个十六进制符号转换为数值。

程序如下:

PublicSubTransfer()

DimHexAsString'十六进制数

DimDecAsDouble'十进制数

DimtempAsString

DimiAsInteger

DimnAsInteger

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

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

n=len(Hex)

i=0

Do

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

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

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

Dec=Dec+number(temp)

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

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2