大学VB考试程序调试题及参考答案.docx
《大学VB考试程序调试题及参考答案.docx》由会员分享,可在线阅读,更多相关《大学VB考试程序调试题及参考答案.docx(48页珍藏版)》请在冰豆网上搜索。
大学VB考试程序调试题及参考答案
程序调试题及参考答案
[1].该过程是用于计算一元二次方程的根,并将结果输出来。
OptionExplicit
PublicSubgetanswer()
Dimdalt!
a#,b#,c#
a=InputBox("输入系数a")
b=InputBox("输入系数b")
c=InputBox("输入系数c")
dalt=b*b-4*a*c
Ifdalt>0Then'----1----
dalt=Sqr(dalt)
MsgBoxFormat((-b+dalt)/2/a,"0.00")+Chr(13)+Chr(10)+Format((-b-dalt)/2/a,"0.00")
ElseIfdalt=0Then'---2----
MsgBoxFormat(-b/2/a,"0.00")+Chr(13)+Chr(10)+Format(-b/2/a,"0.00")
Else
dalt=Sqr(-dalt)'---3----
MsgBoxFormat(-b/2/a,"0.00")+"+"+Format((dalt)/2/a,"0.00")+"i"+Chr(13)+Chr(10)+Format(-b/2/a,"0.00")+"-"+Format((dalt)/2/a,"0.00")+"i"
EndIf
EndSub
'[2]过程prt用以打印一个菱形图案,请在横线上填入'必要的内容,使其完整。
OptionExplicit
PublicSubprt()
'打印数字金字塔
'#
'###
'#####
'#######
'#########
'#######
'#####
'###
'#
DimiAsInteger,jAsInteger
DimstartAsString'每行起始空格数
DimCountAsInteger'每行#个数
Fori=1To9
Ifi<=5Then
start=Space(21-i)'------1------
Count=2*i-1
Else
start=Space(11+i)'i>=6
Count=19-2*i'------2------
EndIf
Form1.Printstart;'------3------
Forj=1ToCount
Form1.Print"#";
Nextj
Form1.Print'------4------
Nexti
EndSub
'[3]过程pyramid用以打印一个数字金字塔,请在横线上填入必要的内容,使其完整。
OptionExplicit
PublicSubpyramid()
'打印数字金字塔
'1
'222
'33333
'4444444
'555555555
'6666666
'77777
'888
'9
DimiAsInteger
DimjAsInteger
DimstartAsString'每行起始空格数
DimnumAsInteger'每行数字个数
Fori=1To9
Ifi<=5Then
start=Space(20-i)
num=2*i-1
Else
start=Space(10+i)'------1------
num=19-2*i'------2------
Form1.Print'------4------
Nexti
EndSub
'[4]打印由数字组成的如下所示金字塔图案
OptionExplicit
PublicSubprt()
'9
'888
'77777
'6666666
'555555555
'44444444444
'3333333333333
'222222222222222
'111111*********11
DimiAsInteger,jAsInteger
'******错误1******Fori=9To1
Fori=9To1Step-1
Form1.PrintSpace(i);
'******错误2******Forj=1To2*i-1
Forj=1To2*(9-i+1)-1
'******错误3******Form1.Printi
Form1.PrintTrim(Str(i));
Nextj
Form1.Print
Nexti
EndSub
'[5]计算s=7+77+777+……+(n个7组成的数)。
PublicSubtotal()
'计算s=7+77+777+……+(n个7组成的数)
Constn=20
DimsAsSingle
DimiAsInteger
Fori=1Ton
s=s+number(i)'-------1------'------2-------
Nexti
Form1.Print"s=";s
EndSub
PublicFunctionnumber(nAsInteger)AsSingle'------2-------
DimiAsInteger
number=0
Fori=1Ton
number=number*10+7'------3------
Nexti
EndFunction
'[6]eat()过程是用于计算猴子共摘了多少个桃子。
(小猴在一天摘了若干个桃子,当天吃掉了一半多一个'第二天吃了剩下的一半多一个;以后每天都吃尚存的一半零一个.到第7天早上要吃时只剩下一个了)
OptionExplicit
PublicSubeat()
Dimn%,i%,x%
x=1
Fori=6To1Step-1'---1--------2----
x=(x+1)*2'-----3----
Nexti
Form1.Print"共有";x;"个桃子"
EndSub
'[7]Modify.bas模块中的Prime过程是求出100到200之间所有的素数',并打印出来。
PublicSubprime()
'打印出100到200之间所有的素数,并统计素数的个数
DimiAsInteger
DimjAsInteger
DimkAsInteger
DimtAsInteger'统计素数的个数
DimbAsBoolean
Fori=100To200
b=True
k=2'------1-------
j=Int(Sqr(i))
DoWhilek<=jAndb
IfiModk=0Then
b=False'------2------
EndIf
k=k+1'------3------
Loop
Ifb=TrueThen'---4---
t=t+1
Form1.Printi
EndIf
Nexti
Form1.Print"t=";t
EndSub
'[8]过程even用以验证一个偶数可以分解为两个素数之和;'Isprime用以判断x是否是素数。
PublicSubeven()
'从键盘输入一个大于4的偶数,将它所有的不重复的分解式求出
DimxAsInteger
DimiAsInteger
DoWhilex<4OrxMod2<>0'------1----保证x是大于4的偶数
x=Val(InputBox("x="))
Loop
Fori=3Tox/2Step2'在不大于x的奇数中找素数
IfIsprime(i)AndIsprime(x-i)Then'------2------
Form1.Printx;"=";i;"+";x-i
EndIf
Nexti
EndSub
PublicFunctionIsprime(xAsInteger)AsBoolean
DimiAsInteger
Isprime=True'------3------
Fori=2Tox-1
IfxModi=0Then'------4------
Isprime=False
ExitFor
EndIf
Nexti
EndFunction
'[9]该过程是用于找出被3、5、7除,'余数为1的最小的5个整数,并将结果输出来。
OptionExplicit
PublicSubfind()
DimcountN%,n%
countN=0
n=1
Do
n=n+1'----1----
IfnMod3=1AndnMod5=1AndnMod7=1Then'-----2----
Form1.Printn
countN=countN+1
EndIf
LoopWhilecountN<5'----3-----
EndSub
'[10]rn过程通过调用函数isLeapYear判断某年是否是闰年'若是,则打印"今年是润年",否则,打印"今年不是闰年"。
OptionExplicit
PublicSubrn()
Constyear=2023
IfNot(isLeapYear(year))Then'----1----
Form1.Print"今年是闰年"
Else
Form1.Print"今年不是闰年"
EndIf
EndSub
FunctionisLeapYear(yAsInteger)AsBoolean
IfyMod400=0Or(yMod4=0AndyMod100<>0)Then'----2--------3--------4----
isLeapYear=False
Else
isLeapYear=True
EndIf
EndFunction
'[11]在考生目录中,已有模块文件Modify.bas。
'Modify.bas模块中的CountTo60过程是用于从一堆一分、二分、五分'的硬币中取出20枚,使其总值为60分,要求输出取法的数量'及每一种取法的一分、二分、五分的个数。
PublicSubCountTo60()
DimoneAsInteger'一分硬币个数
DimtwoAsInteger'二分硬币个数
DimfiveAsInteger'五分硬币个数
Constn=20'总数20枚
DimkAsInteger'取法数量
k=0
Forone=1Ton
'*******错误1********
Fortwo=1Ton-one'Fortwo=one+1Ton
five=n-one-two
'*******错误2*********
Ifone+two*2+five*5=60Then'one+two+five=60
k=k+1
Form1.Print"one=";one;"two=";two;"five=";five
EndIf
'*******错误3********
Nexttwo'Nextone
'******错误4******
Nextone'Nexttwo
Form1.Print"k=";k
EndSub
'[12]过程same用以找出1-100之间所有的同构数。
所谓同构数'是指一个数出现在它的平方数的右端,如25在25平方62的右端,'则25为同构数。
利用数字转字符再取出右端字符的方法进行判断。
PublicSubsame()
DimiAsInteger
Dimx1AsString,x2AsString
Fori=1To1000
x1=Trim(Str(i))'------1------'将i转字符型
x2=Trim(Str(i^2))'------2------'将i^2转字符型
Ifx1=Right(x2,Len(x1))Then'------3------
Form1.Printi;"是同构数"
EndIf
Nexti
EndSub
'[13]Modify.bas模块中的ArmstrongNumber过程是用于'求出1-999之间所有的Armstrong数,并打印出来。
'所谓Armstrong数是指一个数等于它每位上数字的立方和?
PublicSubArmstrongNumber()
DimarmstrongAsInteger
DimiAsInteger
DimhundredAsInteger'百位上的数字
DimtenAsInteger'十位上的数字
DimoneAsInteger'个位上的数字
Fori=1To999
hundred=i\100'----1----
ten=Int((iMod100)\10)
one=iMod10'---2----
Ifi=hundred^3+ten^3+one^3Then'----3----
Form1.Printi;"isarmstrongnumber"
EndIf
Nexti
EndSub
'[14]过程cloze用以求1~1000中的所有完数。
所谓完数是指'一个数的所有因子之和等于其自身。
OptionExplicit
Dima(50)AsInteger'存放每个数分解出来的因子
PublicSubcloze()
'求1--100中的所有完数
DimiAsInteger,jAsInteger
DimnAsInteger'因子个数
DimsAsInteger'因子和
Fori=1To1000
n=0'因子个数
s=0'因子和
factori,n'-------1------
Forj=1Ton
s=s+a(j)
Nextj
Ifi=sThen'-------2------
Form1.Printi
EndIf
Nexti
EndSub
PublicSubfactor(ByValxAsInteger,ByRefkAsInteger)
DimiAsInteger
a
(1)=1
k=1
Fori=2Tox/2'------3------
IfxModi=0Then
k=k+1
a(k)=i'------4------
EndIf
Nexti
EndSub
'[15]Modify.bas模块中的summary过程是用于计算s=1+2+2^2+2^3+…'直至s超过1E+16
PublicSubsummary()
DimsAsSingle
DimiAsInteger
s=1'----1----
i=1
DoWhiles<1E+16'----2----
s=s+2^i
i=i+1'----3----
Loop
Form1.Print"S=";s
EndSub
'[16]Modify.bas模块中的qiuN过程是用于求出'满足不等式1+2x+3x^2+4x^3+…+(n+1)x^n<1000的'最大n值。
其中x是大于等于1的实数,其值由键盘输入。
OptionExplicit
PublicSubqiuN()'该过程是用于求出满足不等式'1+2x+3x^2+4x^3+…+(n+1)x^n<1000的最大n值,'其中x是大于等于1的实数,其值由键盘输入。
DimxAsSingle,sAsSingle,nAsInteger,s1AsSingle,pAsSingle
x=Val(InputBox("x="))
s=1:
n=1
p=x
Whiles<1000'----1----
s1=s
s=s+(n+1)*p
p=p*x'----2----
n=n+1'----3----
Wend
n=n-2'----4-----
Form1.Print"TheMaxismofn";n,"s=";s1
EndSub
'[17]sum过程用于计算f=1-1/(2*3)+1/(3*4)-1/(4*5)+……+1/(19*20)
OptionExplicit
PublicSubsum()
DimfAsSingle
DimiAsInteger
DimsignAsInteger
sign=-1'------1------
f=1
Fori=2To19'------2------
f=f+sign/(i*(i+1))
sign=-sign'------3------
Nexti
Form1.Print"f=";f
EndSub
'[18]Modify.bas模块中的JiSuan过程是用于计算'1-(1/2)+(1/3)-……+(1/99)-(1/100)的值并打印出来。
PublicSubJiSuan()
'计算1-(1/2)+(1/3)-...+(1/99)-(1/100)的值并打印出来
DimiAsInteger
'******错误1*******DimkAsInteger
DimkAsSingle
DimsAsSingle
s=0
'*******错误2*******Fori=1To100
Fori=1To100Step2
k=1/i
s=s+k
'*******错误3*******k=1/i+1
k=1/(i+1)
s=s-k
Nexti
Form1.Print"s=";s
EndSub
'[19]Modify.bas模块中的summary过程是用于计算1!
+2!
+…+20!
,'并打印出计算结果.Modify.bas模块中的nFaction函数过程用于计算n!
。
PublicFunctionnFactor(ByValnAsInteger)AsDouble
DimiAsInteger
DimtempAsDouble
temp=1'----1----
Fori=1Ton
temp=temp*i
Nexti
nFactor=temp'----2----
EndFunction
PublicSubsummary()
DimsumAsDouble
DimiAsInteger
DimnAsInteger
n=20
Fori=1Ton
sum=sum+nFactor(i)'----3----
Nexti
Form1.Print"sum="&sum'----4----
EndSub
'[20]find过程是用于从1到10000中找出这样的数,'该数各个位的数字的阶乘相加之和等于该数,'并将结果输出。
OptionExplicit
PublicSubfind()
Dimk,a,n,i
DimpAsInteger
Fork=1To10000
a=LTrim(Str(k))
n=0
Fori=1ToLen(a)'----1-----
p=Val(Mid(a,i,1))
n=n+fact(p)'-----2----
Nexti
Ifn=kThenForm1.Printk
Nextk
EndSub
Functionfact(xAsInteger)AsLong'该函数用于计算阶乘
DimyAsLong
Dimi%
y=1
Fori%=1Tox
y=y*i%
Nexti%
fact=y'----3----
EndFunction
'[21]Modify.bas模块中的Combination过程是用于计算m个数据'中取出n个数据的排列组合值,计算公式为Cmn=m!
/(n!
*(m-n)!
)。
'Modify.bas模块中的n过程是产生数据,数据的取值范围为'-10~10之间的随机数。
PublicSubCombination()
DimmAsInteger
DimnAsInteger
DimCmnAsLong
Do
m=Val(InputBox("请输入一个整数m"))
n=Val(InputBox("请输入一个整数n(n<=m)"))
'******错误1******LoopWhilem>=n'必须保证输入的两个数m>=n
LoopWhilem'******错误2******
Cmn=nFactor(m)/