visualbasic程序设计教程第四版刘炳文编著清华大学.docx
《visualbasic程序设计教程第四版刘炳文编著清华大学.docx》由会员分享,可在线阅读,更多相关《visualbasic程序设计教程第四版刘炳文编著清华大学.docx(16页珍藏版)》请在冰豆网上搜索。
visualbasic程序设计教程第四版刘炳文编著清华大学
VisualBasic程序设计教程
部分习题参考
第四版刘炳文编著清华大学出版社
第五章
、从键盘上输入4个数,编写程序,计算并输出这4个数的和及平均值。
通过inputbox函数输入数据,在窗体上显示和及平均值。
Dimaassingle
Fori=1to4
a=inputbox(“请输入一个数:
”,“数据输入”)
sum=sum+a
n=n+1
avg=sum/n
nexti
print“和是:
”,sum
print“平均值是:
”,avg
、编写程序,要求用户输入下列信息:
姓名、年龄、通信地址、邮政编码、电话,然后将输入的数据用适当的格式在窗体上显示出来。
Dimaasvariant
Fontsize=20
a=inputbox(“请输入姓名:
”,“数据输入”)
print“姓名:
”;a
a=inputbox(“请输入年龄:
”,“数据输入”)
print“年龄:
”;a
a=inputbox(“请输入通信地址:
”,“数据输入”)
print“通信地址:
”;a
a=inputbox(“请输入邮政编码:
”,“数据输入”)
print“邮政编码:
”;a
a=inputbox(“请输入电话:
”,“数据输入”)
print“电话:
”;a
.设a=5,b=,c=,编程序计算:
y=(πab)/(a+bc)
程序:
Dimaassingle,bassingle,cassingle
a=5
b=
c=
pi=
y=(pi*a*b)/(a+b*c)
print“结果是:
”;y
、输入以秒为单位表示的时间,编写程序,将其转换为几日几时几秒。
Dimaaslong,dasinteger,hasinteger,sasinteger
a=inputbox(“请输入秒数:
”,“数据输入”)
d=int(a/86400)
h=int((a-d*86400)/3600)
s=a-d*86400-h*3600
printd;“日”;h;“时”;s;“秒”
、自由落体位移公式为:
s=gt2/2+v0t
其中v0为初始速度,g为重力加速度,t为经历的时间,编写程序,求位移量s。
设v0=s,t=,g=s2,在程序中把g定义为符号常量,用inputbox函数输入v0和t两个变量的值。
Dimvassingle,tassingle,sassingle
g=
v=inputbox(“请输入初始速度:
”,“数据输入”)
v=val(v)
t=inputbox(“请输入经历的时间:
”,“数据输入”)
t=val(t)
s=g*t*t/2+v*t
print“位移量是:
”;s
第七章
.编程计算并输出S的值:
s=2+4+6+8+…+100
dimi,sasinteger
s=0
fori=2to100step2
s=s+i
next
prints
、我国现有人口为13亿,设年增长率为1%,编写程序,计算多少年后增加到20亿。
PrivateSubForm_click()
DimpAsDouble
DimrAsSingle
DimnAsInteger
p=0
r=
n=0
DoWhilep<=0
p=p*(1+r)
n=n+1
Loop
Printn;"年后";"中国人口增加到";p
EndSub
、给定三角形的3条边长,计算三角形的面积。
编写程序:
首先判断给出的3条边能否构成三角形,如可以构成,则计算并输出三角形的面积,否则要求重新输入。
当输入-1时结束程序。
Dimaassingle;bassingle;cassingle
Start:
a=inputbox(“请输入第一条边长-1结束:
”,”数据输入”)
a=val(a)
ifa=-1then
end
endif
b=inputbox(“请输入第二条边长”,“数据输入”)
b=val(b)
c=inputbox(“请输入第三条边长”,“数据输入”)
c=val(c)
ifa+b<=cora+c<=borb+c<=athen
msgbox(“您输入的三条边长不能构成三角形,请重新输入!
”)
gotostart
else
l=(a+b+c)/2
s=sqr(l*(l-a)*(l-b)*(l-c))
endif
print“三角形的面积为:
”;s
、编写程序,打印如下所示的“数字金字塔”
1
21
12321
……
12345678987654321
Private Sub Form_Click()
Dim a(1 To 5) As Integer
For j = 1 To 5
a(j) = j
Next j
For i = 1 To 5
Print Tab(30 - i * 3);
For j = 1 To 2 * i - 1
If j > i Then
Print a(2 * i - j);
Else
Print a(j);
End If
Next j
Next i
End Sub
.勾股定理中三个数的关系是a*a+b*b=c*c。
编写程序,输出30以内满足上述关系的整数组合。
例如3,4,5就是一个满足要求的整数组合
PrivateSubCommand1_Click()
DimMaxAsInteger,IAsInteger,JAsInteger,K
Max=30
ForI=3ToMax-2
ForJ=I+1ToMax-1
K=Sqr(I^2+J^2)
IfK=Int(K)AndK<=MaxThenPrintI,J,K
Next
Next
EndSub
.如果一个数的因子之和等于这个数的本身,则称这样的数为“完全数”。
例如,整数28的因子为1,2,4,7,14,其和1+2+4+7+14=28,因此28是一个完全数,编写一个程序,从键盘上输入整数M和N,求出M和N之间的所有的完全数
formload()
'inti,j,m,n,sum
m=inputbox("输入最小正整数")
n=inputbox("输入最大正整数")
forj=mton
sum=0
fori=1toj
if(jmodi=0)and(i<>j)thensum=sumi
next
ifj=sumthenprintsum&"是完全数"
next
print"查找完毕"
beep
endsub
.从键盘上输入一个学生的学号和考试成绩,然后输出该学生的学号和考试成绩,并根据成绩按下面的规定输出对该学生的评语:
成绩80~10060~7950~5940~490~39
评语verygoodgoodfairpoorfail
PrivateSubForm_Click()
n=InputBox("请输入学号")
s=InputBox("请输入分数")
Ifs>=80Then
Print"学号:
";n;",";"分数:
";s;",";"学生评语:
";"VeryGood"
ElseIfs>=60Ands<=79Then
Print"学号:
";n;",";"分数:
";s;",";"学生评语:
";"Good"
ElseIfs>=50Ands<=59Then
Print"学号:
";n;",";"分数:
";s;",";"学生评语:
";"Fair"
ElseIfs>=40Ands<=49Then
Print"学号:
";n;",";"分数:
";s;",";"学生评语:
";"Poor"
ElseIfs>=0Ands<=39Then
Print"学号:
";n;",";"分数:
";s;",";"学生评语:
";"Fail"
EndIf
EndSub
.一个两位的正整数,如将它的个位数字与十位数字对调,则产生另一个正整数,我们把后者叫做前者的对调数。
如给定一个两位的正整数,请找到另一个两位的正整数,值得这两个整数之和等于他们各自的对调数之和,例如,12+32=21+23.编写程序,输入一个两位的正整数,把具有这种特征的每一对两位正整数都找出来
Private Sub Command1_Click()
Dim a As String
Dim i As Long
a = InputBox("输入一个两位的正整数:
")
If Val(a) <= 0 Or Val(a) >= 100 Then
MsgBox "输入不合法"
Exit Sub
End If
For i = 1 To 99
If Val(a) + i = Val(getDuiTiao(a)) + getDuiTiao(CStr(i)) Then
i
End If
Next
End Sub
Private Function getDuiTiao(ByVal vStr As String) As String
Dim strTmp As String
strTmp = Right(CStr(vStr), 1) & Left(CStr(vStr), 1)
getDuiTiao = strTmp
End Function
第八章
.从键盘上输入10个整数,并放入一个一维数组中,然后将其前5个元素与后5个元素对换,即:
第1个元素与第10个元素互换,第2个元素与第9个元素互换……第10个元素与第1个元素互换。
分别输出数组原来各元素的值和对换后各元素的值。
OptionBase1
PrivateSubForm_Click()
arr=Array(1,2,3,4,5,6,7,8,9,10)
Print"原来数组:
"
Fori=1To10
Printarr(i);
Nexti
Print
Fori=1To5
Forj=6To10
t=arr(i)
arr(i)=arr(j)
arr(j)=t
Nextj
Nexti
Print"对换后数组:
"
Fori=1To10
Printarr(i);
Nexti
EndSub
.设有如下两组数据。
(1)2,8,7,6,4,28,70,25
(2)79,27,32,41,57,66,78,80
编写一个程序,把上面两组数据分别读入两个数组中,然后把两个数组中对应下标的元素相加,即2+79,8+27,……,25+80,并把相应的结果放入第三个数组中,最后输出第三个数组的值。
OptionBase1
PrivateSubForm_Click()
DimA,B,C(8)AsInteger
A=Array(2,8,7,6,4,28,70,25)
B=Array(79,27,32,41,57,66,78,80)
Fori=1To8
C(i)=A(i)+B(i)
Nexti
Print"第一个数组为:
";
Fori=1To8
PrintA(i);
Nexti
Print
Print"第二个数组为:
";
Fori=1To8
PrintB(i);
Nexti
Print
Print"第三个数组为:
";
Fori=1To8
PrintC(i);
Nexti
Print
EndSub
编写程序,把下面的数据输入到一个二维数组中:
25367813
12268893
75182232
56443658
然后执行以下操作:
1)输出矩阵两个对角线上的数;
2)分别输出各行和各列的和。
3)交换第一行和第三行的位置。
4)交换第二行和第四行的位置。
5)输出处理后的数组。
Dima(4,4),b(4,4)AsInteger
Fori=0To3
Forj=0To3
a(i,j)=Val(InputBox("请输入第"&i+1&"行第"&j+1&"列的数"))
Nextj
Nexti
Print"原始数据"
Fori=0To3
Printa(i,0)&""&a(i,1)&""&a(i,2)&""&a(i,3)&"和"&Val(a(i,0)+a(i,1)+a(i,2)+a(i,3))
Nexti
Print"和和和和"
Forj=0To3
Print"";Val(a(0,j)+a(1,j)+a(2,j)+a(3,j));
Nextj
Print
'对角线
Fori=0To3
PrintTab(i*2);a(i,i)
Nexti
Print
Fori=0To3
PrintTab((3-i)*2);a(i,3-i)
Nexti
Print
'调整
Forj=0To3
b(2,j)=a(0,j)'第一行和第三行
b(0,j)=a(2,j)
b(1,j)=a(3,j)
b(3,j)=a(1,j)
Nextj
Print"调整后数据"
Fori=0To3
Printb(i,0)&""&b(i,1)&""&b(i,2)&""&b(i,3)
Nexti
.设有如下人员名册:
姓名性别年龄文化程度籍贯
张得功男24大学本科河北
李得胜男30高中毕业北京
王丽女25研究生山东
……
试编写一个程序,对该名册进行检索。
程序运行后,只要在键盘上输入一个人名,就可以在屏幕上显示出这个人的情况。
例如,输入“张得功”,则显示:
张得功男24大学本科河北
要求:
(1)使用动态数组,输入的人数可以根据实际情况改变。
(2)当检索名册中不存在的人名时,输出相应的信息。
(3)每次检索结束后,询问是否继续检索,根据输入的信息确定是否结束程序。
dimarr()'..........'单位开运动会,共有10人参加男子100米短跑,运动员和成绩如下:
207号秒077号秒
156号秒231号秒
453号秒276号秒
096号秒122号秒
339号秒302号秒
编写程序,按成绩排出名次,并按如下格式输出:
名次运动员成绩
1..........
2..........
3..........
............
10..........
在Form1中加入一个Command控件,粘贴入以下代码:
DimiAsInteger,jAsInteger
DimnAsInteger,mAsInteger
Dimw(9,1)AsDouble
PrivateSubCommand1_Click()
Dima1AsDouble,a2AsDouble
a1=0
a2=0
Fori=1To10
Forj=0To9-i
Ifw(j,1)>w(j+1,1)Then
a1=w(j,0)
a2=w(j,1)
w(j,0)=w(j+1,0)
w(j,1)=w(j+1,1)
w(j+1,0)=a1
w(j+1,1)=a2
EndIf
Nextj
Nexti
Fori=0To9
Printw(i,0)
Next
Print"名次"&"运动员"&"成绩"
Fori=0To9
Print""&i+1&""&Format(w(i,0),"000")&""&w(i,1)
Next
EndSub
PrivateSubForm_Load()
Fori=0To9
w(i,0)=InputBox("请输入第"&i+1&"运动员的编号")
w(i,1)=InputBox("请输入第"&i+1&"运动员的成绩")
Next
="名次排列"
EndSub
.VB编写程序,建立并输出一个10*10的矩阵,该矩阵两条对角线元素为1,其余元素均为0
PrivateSubForm_Click()
Dima(1To10,1To10)AsInteger
Fori=1To10
Forj=1To10
a(i,j)=0
Ifi=jThena(i,j)=1
Ifi+j=11Thena(i,j)=1
Printa(i,j);"";
Nextj
Print
Nexti
EndSub
.杨辉三角形每一行是(x+y)的n次方的展开式的各项系数。
例如第一行系数是1;第二行1,1;第三行1,2,1……请编写程序输出n=10的杨辉三角形
OptionBase1
PrivateSubCommand1_Click()
Dima()AsDouble
m=InputBox("请输入行数","输入",0)
ReDima(m,m)AsDouble
Fori=1Tom
a(i,1)=1
Forj=1Tom
a(j,j)=1
Ifj>=2Andj<=i-1Then
a(i,j)=a(i-1,j-1)+a(i-1,j)
EndIf
Nextj
Nexti
Fori=1Tom
Forj=1Tom
Ifi>=jThen
PrintTab(j*4);Str(a(i,j));
EndIf
Nextj
Print
Nexti
EndSub