VB答案黄色那本.docx
《VB答案黄色那本.docx》由会员分享,可在线阅读,更多相关《VB答案黄色那本.docx(42页珍藏版)》请在冰豆网上搜索。
VB答案黄色那本
1.3.4程序设计题
【习题1-49】编写一个华氏温度F与摄氏温度C之间转换的应用程序,界面如图1-4所示。
其中F与C之间的关系为:
。
参考程序如下:
2012-10-2615:
57上传
下载附件(15.91KB)
PrivateSubCommand1_Click()
DimfAsSingle,cAsSingle
f=Val(Text1.Text)
c=(f-32)*5/9
Text2.Text=Str(C)
EndSub
PrivateSubCommand2_Click()
DimfAsSingle,cAsSingle
c=Val(Text2.Text)
f=9/5*c+32
Text1.Text=Str(f)
EndSub
【习题1-50】编程将弧度值转换为角度值(度、分、秒)的形式,然后在窗体上显示出来。
程序运行界面如图1-5所示。
【提示】利用InputBox()输入弧度值,首先把弧度值转换为原始角度值,然后取整得到角度值,再把原始角度值减去度值,将结果转化为分值,采用类似思维即可求出结果。
参考程序如下:
2012-10-2616:
31上传
下载附件(12.72KB)
PrivateSubForm_Click()
DimsAsSingle,aAsInteger,bAsInteger,cAsInteger
ConstpiAsSingle=3.14159
s=Val(InputBox("请输入弧度值:
"))
s1=s
s=s*180/pi
a=Int(s)
s=s-a
s=s*60
b=Int(s)
s=s-b
c=s*60
Print"输入的弧度值"&s1;"对应的角度值为:
"
Printa&"度"&b&"分"&c&"秒。
"
EndSub
2.3.6设计程序题
源程序见文件夹“第二章习题66-75答案”
【习题2-66】公用电话收费标准如下:
通话时间在3分钟以内,收费0.5元;3分钟以上,则每超过1分钟加收0.15元。
编写程序,计算某人通话S分钟时应缴的电话费。
PrivateSubCommand1_Click()
DimtAsSingle,fAsSingle
t=Val(Text1.Text)
Ift<=3Then
f=0.5
Else
f=0.5+(-(Int(-(t-3))))*0.15
EndIf
Text2.Text=f&"元"
EndSub
【习题2-67】写程序找出能被2,3,5除时余数均为1的最小的10个自然数。
PrivateSubForm_Click()
n=0:
k=0
Do
n=n+1
IfnMod2=1AndnMod3=1AndnMod5=1Then
k=k+1
Printn;
EndIf
LoopWhilek<10
EndSub
【习题2-68】编写程序,计算。
PrivateSubForm_click()
DimsAsSingle,nAsInteger
n=Val(InputBox("请输入计算项数n:
"))
Fori=1Ton
s=s+(-1)^(i-1)*1/(2*i-1)
Nexti
Print"s=";4*s
EndSub
【习题2-69】编写程序,计算1×2×3×…×n,找出能使计算结果大于106的n的值。
PrivateSubForm_Click()
DimsAsDouble,nAsInteger
n=0
s=1
Do
n=n+1
s=s*n
Prints
LoopWhiles<=1E+20
Print"满足要求的n=";n
EndSub
【习题2-70】凡是满足x2+y2=z2的正整数数组(x,y,z)就称为勾股数组(如3,4,5)。
请找出任意一个正整数n(通过InputBox函数输入)以内的所有勾股数组。
PrivateSubForm_Click()
DimnAsInteger
Cls
n=Val(InputBox("请输入正整数n:
"))
Forx=1Ton
Fory=1+xTon'避免重复数对出现
Forz=1Ton
Ifx*x+y*y=z*zThenPrintx;y;z
Nextz
Nexty
Nextx
EndSub
【习题2-71】某正整数与3的和是5的倍数,与3的差是6的倍数。
设计程序,求出符合此条件的最小正整数。
PrivateSubForm_Click()
DimnAsInteger
n=0
Do
n=n+1
LoopUntil(n+3)Mod5=0AndAbs(n-3)Mod6=0
Print"满足条件的最小正整数是=";n
EndSub
【习题2-72】设计程序输出如图2-26所示的“乘法九九表”
2012-10-2910:
59上传
下载附件(34.94KB)
PrivateSubForm_Activate()
Me.Width=7000:
Me.Height=2500
EndSub
PrivateSubForm_Click()
Fori=1To9
Forj=1Toi
Ifi*j<10Andj>1Then
Printi;"*";j;"=";i*j;
Else
Printi;"*";j;"=";i*j;
EndIf
Nextj
Print
Nexti
EndSub
3.3.6程序设计题
【习题3-37】有5个小孩坐在一起,问第5个小孩多少岁?
他说比第4个小孩大2岁;问第4个小孩岁数,他说比第3个小孩大2岁;问第3个小孩,又说比第2个小孩大2岁;问第2个小孩,说比第1个小孩大2岁;最后问第1个小孩,他说是10岁。
用递归算法求出第5个小孩的年龄。
参考程序如下:
PrivateSubForm_Click()
Print"第5个小孩的年龄为:
";age(5)
EndSub
Functionage(nAsInteger)AsInteger
DimcAsInteger
Ifn=1Then
c=10
Else
c=age(n-1)+2
EndIf
age=c
EndFunction
【习题3-38】编写程序求S=A!
+B!
+C!
的值。
阶乘的计算分别用Sub过程和Function过程两种方法来实现。
参考程序如下:
PrivateSubForm_Click()
DimaAsInteger,bAsInteger,cAsInteger,sAsInteger
a=InputBox("Inputa:
")
b=InputBox("Inputb:
")
c=InputBox("Inputc:
")
CallfacProc(a)'调用过程
CallfacProc(b)
CallfacProc(c)
s=a+b+c
's=facFunc(a)+facFunc(b)+facFunc(c)'函数实现
Print"三个数的阶乘之和为:
";s
EndSub
PublicSubfacProc(nAsInteger)'求阶乘的过程
DimtAsInteger,iAsInteger
t=1
Fori=1Ton
t=t*i
Nexti
n=t
EndSub
PrivateFunctionfacFunc(nAsInteger)AsInteger'递归求阶乘的函数
Ifn<=0Then
MsgBox"正整数才有阶乘!
"
Else
Ifn=1Then
facFunc=1
Else
facFunc=n*facFunc(n-1)
EndIf
EndIf
EndFunction
【习题3-39】编写过程,使用辗转相减法求两个数的最大公约数。
参考程序如下:
PublicFunctiongcd(mAsInteger,nAsInteger)AsInteger
DoWhilem<>n
DoWhilem>n
m=m-n
Loop
DoWhilen>m
n=n-m
Loop
Loop
gcd=m
EndFunction
PrivateSubForm_Click()
DimaAsInteger,bAsInteger
a=InputBox("请输入第1个数:
")
b=InputBox("请输入第2个数:
")
Print"最大公约数为:
"&gcd(a,b)
EndSub
【习题3-40】编写一个过程,以整型数作为形参。
当该参数为奇数时。
输出False;当该参数为偶数时,输出True。
参考程序如下:
PrivateSubOddEven(nAsInteger)
IfnMod2Then
Print"False"
Else
Print"True"
EndIf
EndSub
PrivateSubForm_Click()
DimaAsInteger
a=InputBox("请输入一个数:
")
OddEven(a)
EndSub
4.3.4程序设计题
【4-29】
PrivateSubHScroll1_Change()
Timer1.Interval=HScroll1.Value
EndSub
PrivateSubTimer1_Timer()
Image1.Visible=NotImage1.Visible
EndSub
【4-30】
PrivateSubForm_Load()
Dialog1.Flags=3'包含屏幕字体和打印机字体
EndSub
PrivateSubmenuFormatColor_Click()
Dialog1.ShowColor
Text1.ForeColor=Dialog1.Color
EndSub
PrivateSubmenuFormatFont_Click()
Dialog1.ShowFont'显示"字体"对话框
Text1.FontName=Dialog1.FontName
Text1.FontSize=Dialog1.FontSize
EndSub
5.3.6程序设计题
【5-23】程序代码
PrivateSubForm_Click()
Cls
Randomize
Form1.Scale(-2,2)-(2,-2)'定义坐标系
Form1.DrawWidth=3
Fori=1To150
x=Rnd*4-2'随机产生直线终点坐标
y=Rnd*4-2
Form1.Line(0,0)-(x,y),QBColor(Int(Rnd*15)+1)
Nexti
EndSub
说明:
①由于所有直线的起点都在中心位置,所以对窗体定义合适的坐标系,决定了程序实现的难易度。
②虽然是随机直线,但所有的直线都没有超出窗体范围,用随机函数生成直线终点坐标时要设定范围。
【5-24】程序代码
PrivateSubPicture1_Click()
Dimr,x,y,w,h
w=Picture1.ScaleWidth
h=Picture1.ScaleHeight
Ifw>=hThen
r=w\30
x=r:
y=h/2
Picture1.Circle(x,y),r,vbRed
Fori=2To15
Picture1.CircleStep(2*r,0),r
Nexti
Else
r=h\30
x=w\2:
y=r
Picture1.Circle(x,y),r,vbRed
Fori=2To15
Picture1.CircleStep(0,2*r),r
Nexti
EndIf
EndSub
【5-25】程序代码
PrivateSubForm_Load()
Timer1.Interval=50
EndSub
PrivateSubTimer1_Timer()
Cls
Scale(-2,4)-(2,-1)
Line(-2,0)-(2,0)
Line(0,4)-(0,-1)
Fork=-1.8To1.8Step0.01
y=k^2
PSet(k,y)
Nextk
Staticx
FillColor=vbBlue
FillStyle=0
Ifx>1.8Thenx=-1.8
x=x+0.05
y=x^2
Circle(x,y),0.2'画圆
EndSub
思考
①去掉Cls,运行结果如何?
②语句Staticx的作用是什么?
去掉Staticx语句,在何处添加什么语句可达到相同的效果?
【5-26】程序代码
PrivateSubForm_Load()
ScaleMode=3
EndSub
PrivateSubForm_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)
Randomize
IfButton=2Then
r=Int(Rnd*90+10)
c=RGB(Rnd*256,Rnd*256,Rnd*256)
FillStyle=Int(Rnd*8)
FillColor=RGB(Rnd*256,Rnd*256,Rnd*256)
IfX>rAndY>rAndX+rCircle(X,Y),r,c
EndIf
EndIf
EndSub
【说明】
①表达式Button=2,表示按下鼠标右键。
②由于半径的单位为像素,故在Form_Load()中,将ScaleMode设置为3。
③函数RGB(Rnd*256,Rnd*256,Rnd*256)用于随椭机产生任意颜色。
④函数Int(Rnd*8),其取值范围为0到7的整数,用于随机产生填充方式。
⑤表达式X>rAndY>rAndX+r【5-27】程序代码
PrivateSubForm_Click()
Randomize
Cls
Dimx(1To5)
Fork=1To5'产生随机数
x(k)=Int(Rnd*9000+1000)
Nextk
Scale(-0.5,10100)-(6,-2000)'自定义坐标系
Line(0,10000)-(0,-0)'画纵轴
Line(0,0)-(5.5,0)'画横轴
Fork=1To5'画直方图
Line(k-0.5,x(k))-(k,0),,BF
Nextk
CurrentY=-200
Fork=1To5'标横轴的数字
CurrentX=(k-0.5)
Printx(k);
Nextk
EndSub
【说明】
①随机产生的5个数必须放入数组中,以后画矩形块和标注数字要用到。
②自定义坐标的设置语句Scale(-0.5,10100)-(6,-2000):
要画5个直方图,横坐标1到5,每个直方图的宽度为0.5,为了美观,所以将横坐标设置为-0.5到6;画直方图高度为1000-10000,纵坐标最大为1000,为了美观,将纵坐标最大值设置为10100,为了标注横坐标数字,所以将纵坐标设置为-2000到10100。
③由于标注横坐标数字要标注在直方图下方,所以将CurrentY设置为-200。
【5-28】方法一:
程序代码(用默认坐标)
PrivateSubForm_Click()
ConstD=3.14159/180'角度转换成弧度的转换常数
ConstA=500'正弦波的振幅
Fork=0To900Step0.01'画出两个半周期(900°)
PSet(k*3,700)'画出基准轴
PSet(k*3,700-A*Sin(k*D)),vbRed'画出红色的正弦曲线
Nextk
EndSub
方法二:
程序代码(用自定义坐标)
PrivateSubForm_Click()
Cls
ConstD=3.14159/180'角度转换成弧度的转换常数
Scale(0,1.5)-(920,-1.5)'自定义坐标系
Fork=0To900Step0.1'画出两个半周期(900°)
PSet(k,0)'画出基准轴
PSet(k,Sin(k*D)),vbRed'画出红色的正弦曲线
Nextk
EndSub
7.5.1程序设计题
【习题7-1】程序代码
PrivateSubOption1_Click()
Text3.Text=Val(Text1.Text)+Val(Text2.Text)
EndSub
PrivateSubOption2_Click()
Text3.Text=Val(Text1.Text)-Val(Text2.Text)
EndSub
PrivateSubOption3_Click()
Text3.Text=Val(Text1.Text)*Val(Text2.Text)
EndSub
PrivateSubOption4_Click()
IfVal(Text2.Text)<>0Then
Text3.Text=Val(Text1.Text)/Val(Text2.Text)
Else
Text3.Text="除数为0,计算无效"
EndIf
EndSub
【习题7-2】程序代码
PrivateSubOption1_Click()
Text2.Alignment=0
EndSub
PrivateSubOption2_Click()
Text2.Alignment=1
EndSub
PrivateSubOption3_Click()
Text2.Alignment=2
EndSub
PrivateSubText1_Click()
Text1.FontSize=HScroll1.Value
IfOption1.ValueThenText1.Alignment=0
IfOption2.ValueThenText1.Alignment=1
IfOption3.ValueThenText1.Alignment=2
EndSub
PrivateSubHScroll1_Change()
Text2.FontSize=HScroll1.Value
EndSub
【习题7-3】程序代码
PrivateSubForm_Click()
x=Val(InputBox("请输入一个接近于1的小数","输入"))
s=1
n=0
s1=1
DoWhiles1>0.000001
n=n+1
s1=s1*x/n
s=s+s1
Loop
Print"计算结果=";s
EndSub
【习题7-4】程序代码
PrivateSubForm_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)
Cls
IfXr1=X
Else
r1=Me.ScaleWidth-X
EndIf
IfYr2=Y
Else
r2=Me.ScaleHeight-Y
EndIf
Ifr1Circle(X,Y),r
EndSub
7.5.2程序改错题
【习题7-5】“*”号标记的错误语句更正如下:
①a(1To50)AsString
②Chr(Int(Rnd*26+97))
③iMod10=0
④a(i)="a"
【习题7-6】“*”号标记的错误语句更正如下:
①DimXAsInteger
②Fork=2ToX–1(或Fork=2ToX/2或Fork=2ToSqr(X)+1)
③IfXModk=0Thenf=False:
ExitFor
④IffThen(或Iff=TrueThen)
六、程序设计题(每小题10分,共20分)
1.
PrivateSubCommand1_Click()
Dima(0To9)AsInteger
s=Text1.Text
Fori=1ToLen(s)
c=Val(Mid(s,i,1))
a(c)=a(c)+1
Nexti
Forj=0To9
Label1.Caption=Label1.Caption&j&"出现的次数="&a(j)&Chr(13)&Chr(10)
Nextj
EndSub
2.
PrivateSubForm_Click()
DimhouseAsSingle,mAsSingle,wAsSingle,